macOS Catalina 上的 AudioKit 4.9.3:AKFrequencyTracker() 和 AKMicrophoneTracker() 提供虚假的振幅和频率

AudioKit 4.9.3 on macOS Catalina: AKFrequencyTracker() & AKMicrophoneTracker() give bogus amplitude & frequency

我已经按照说明在我的 macOS 应用程序中安装了 AudioKit 4.9.3 框架。

我的应用程序使用沙盒功能,Catalina 下的 XCode 11.3 默认启用,并勾选 "Audio Input" 项目以允许访问麦克风。 AudioKit 4.9.3 表示它支持沙盒。

我已经尝试安装预构建的框架,但它不起作用。 我还从源代码构建了 AudioKit 并使用了这些框架。没用。我使用了我可以在网上找到的所有记录的方法进行麦克风跟踪,但我似乎无法检测到麦克风的振幅或频率,无论我使用的是 AKMicrophoneTracker() 还是 AKFrequencyTracker()。

没有多少麦克风输入会改变返回的频率或振幅值,即使首选项窗格在内置仪表上显示麦克风 activity。

配置:

- Late 2015 iMac
- macOS Catalina 10.15.2
- Xcode 11.3
- Latest AudioKit 4.9.3 for macOS
- Tried with sandboxing disabled, and enabled (with Audio Input checked in capabilities).


我使用的最新方法:

AudioKit.output = AKMixer()
do { 
   try AudioKit.start() 
} catch { 
   print("AudioKit start error") 
}
let tracker = AKMicrophoneTracker()
tracker.start()
Timer.scheduledTimer(withTimeInterval: 0.5, repeats: true, block: { _ in
    print(String(format:"%.3f", tracker.amplitude), tracker.frequency)
})

显示:

0.000 100.0
0.000 100.0
0.000 100.0
0.000 100.0
0.000 100.0
.
.
.

在所有情况下,我都看到记录了以下错误(在初始化时),但 Internet 上的许多报告是它们是由 OS / 内部框架产生的。

2020-01-01 16:14:30.796714-0800 AudioKit_mic_tracking[36792:18467342] [插件]
AddInstanceForFactory:没有为 id
注册的工厂 2020-01-01 16:14:30.823727-0800
AudioKit_mic_tracking[36792:18467342]
HALC_ShellDriverPlugIn::Open:无法获取指向 Open 例程的指针


原因是未抛出的安全异常:在采用@AureliusProchazka 的建议尝试 AudioKit 4.9.3 源代码分发中的示例后,看到示例应用程序运行正常,我注意到它在初始化时提示允许访问麦克风。我的应用程序,其中 AudioKit 不工作,没有提示。谷歌搜索,我发现问题是,从 macOS 10.14 开始,存在设备访问安全性(类似于 iOS 限制应用程序访问位置的功能)。

要通过安全检查,任何使用麦克风的 macOS 应用程序必须 NSMicrophoneUsageDescription 属性 设置 info.plist。 属性 触发 OS 以提示用户允许使用设备(麦克风)。没有那个 属性,将 没有提示 并且 AudioKit 将 静默失败

关于构建 AudioKit 示例代码的注意事项:构建 MicrophoneAnalysis 示例,完整 AudioKit 源代码分发的一部分:它不是足以简单地单击 .xcodeproj 文件或从菜单中打开它,就像许多在线项目一样。

还是得手动复制framework文件到XCode工程中,再添加到工程中,解决了import AudioKit语句的问题示例代码未找到 'AudioKit module'.

我指出这一点是因为,如果您检查 AudioKit 示例 XCode 项目...在打开 .xcodeproj 后,您会看到框架库出现在目标的“框架、库”下的常规设置中和嵌入内容”部分。在项目文件中,AudioKit 框架出现在 Frameworks 组文件夹中,图标看起来像包(例如,相关框架似乎存在于项目中!)。这有点误导。它们是占位符或损坏的符号链接。一旦您将框架包文件实际添加到项目中(从内置的 AudioKit 源代码分发),占位符就会消失并被替换为 AudioKit.frameworkAudioKitUI.framework 对包含包含头文件的子文件夹的文件夹进行分组。