麦克风和扬声器反馈

时间:2011-09-20 18:03:58

标签: iphone ios ipad core-audio

我有一个使用Core Audio Audio Units的iPad应用程序(调音器)。它从麦克风中读取信号并对其进行处理。它不会将声音回应到扬声器。

不幸的是,在不同的时间,信号实际上会反馈并从扬声器中传出 - 响亮且有点相位。我没有从麦克风到扬声器的任何连接 - 但它产生了麦克风以某种方式“开启”的错觉。它不是一个直接的信号 - 它会被切断并要求你在它发生之前发出一些响亮的声音。

我担心这与重载cpu或其他东西有关。我不认为回调落后了。如果我将调试语句放入回调函数中,那么当我关闭音频单元时它们似乎会停止...这会带来另一个奇怪的现象。在某些时候,即使音频单元已经停止,从麦克风到扬声器的反馈也会继续发生,因此在不断的噪音停止之前,应用程序必须关闭并从后台处理队列中删除。

奇怪的是,这并不是每次都发生在每个测试人员身上,但确实经常发生这种情况,以引起轰动。

1 个答案:

答案 0 :(得分:3)

如果您的RemoteIO回调太慢和/或您的应用程序崩溃并停止处理音频回调,RemoteIO音频缓冲区可能会被回收,这可能会导致一些旧的播放缓冲区,甚至可能导致记录缓冲区结束在下溢的音频通道中重复或重复。测试这种方法的一种方法是在回调中注释掉所有处理代码(以及调试打印,这也可能太慢),看看这是否能解决您的“反馈”问题。

尝试在RemoteIO记录和播放回调中仅执行简单的缓冲区副本和/或其他低开销快速处理。不要在远程回调中处理数据,而是在回调之外进行握手,计划或排队工作。

如果你的应用程序能够以某种方式检测到它无法跟上,它应该停止RemoteIO音频设备(AudioOutputUnitStop)。

在退出每个记录回调之前,还要尝试将每个记录缓冲区的数据归零。据报道,这可能有助于修复一些非常旧版本的iPhoneOS中的错误。