具有声音识别功能的 RemoteIO 故障

问题描述

我的应用正在使用 RemoteIO 录制音频。它不做任何播放。 RemoteIO 似乎与 iOS14 中的新声音识别功能广泛兼容,但我在首次启用声音识别时看到了一个小故障。

如果我的应用程序已启动并初始化 RemoteIO,然后打开声音识别(例如通过控制中心),则此后不会调用 RemoteIO 输入回调,直到我拆除音频单元并将其重新设置。所以类似于以下内容

  • 启动应用
  • RemoteIO 已初始化并正常工作,可以记录
  • 通过设置或控制中心小部件开启声音识别
  • 使用已设置的 RemoteIO 开始录制
  • 不再调用录音回调
  • 虽然没有看到输入回调,但 kAudioOutputUnitProperty_IsRunning 报告为 true,所以音频单元认为它是活动的
  • 拆除音频单元
  • 重新设置音频单元
  • 录音作品
  • 缓冲区大小发生了变化,反映了对声音识别功能的音频会话的一些影响

我还注意到,当启用声音识别时,我会快速连续地看到几个(通常是 3 个)AVAudioSession.routeChangeNotifications。在设置 RemoteIO 时禁用声音识别时,我看不到此问题。我正在分配自己的缓冲区,因此它们的大小没有问题。

这里会发生什么?我没有正确处理路线变化吗?似乎没有一个可靠的事件序列可以让我知道何时重置音频单元。


在这里找到的唯一解决方法是入侵一个计时器,该计时器在开始录制后不久检查回调活动,如果没有看到回调活动,则重置音频单元。总比没有好,但不是超级可靠。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...