我的应用正在使用 RemoteIO 录制音频。它不进行任何播放。RemoteIO 似乎与 iOS14 中的新声音识别功能广泛兼容,但我在首次启用声音识别时看到了一个小故障。
如果我的应用程序已启动并初始化 RemoteIO,然后打开声音识别(例如通过控制中心),则此后不会调用 RemoteIO 输入回调,直到我拆除音频单元并将其重新设置。所以类似于以下内容:
- 启动应用程序
- RemoteIO已初始化并正在工作,可以记录
- 通过设置或控制中心小部件打开声音识别
- 使用已设置的 RemoteIO 开始录制
- 录音回调不再被调用
- 虽然没有看到输入回调,但 kAudioOutputUnitProperty_IsRunning 报告为 true,因此音频单元认为它处于活动状态
- 拆下音频单元
- 重新设置音频单元
- 录音作品
- 缓冲区大小已更改,反映了对声音识别功能的音频会话的一些影响
我还注意到,当启用声音识别时,我看到几个(通常是 3 个)AVAudioSession.routeChangeNotifications 快速连续。在设置 RemoteIO 时禁用声音识别时,我看不到此问题。我正在分配我自己的缓冲区,所以它们的大小不是问题。
这里会发生什么?我没有正确处理路线变更吗?我似乎没有可靠的事件序列来了解何时重置音频单元。
我在这里找到的唯一解决方法是破解一个计时器,该计时器在开始录制后不久检查回调活动,如果没有看到回调活动,则重置音频单元。总比没有好,但不是超级可靠。