iphone应用程序中的音频反馈问题

时间:2013-02-23 22:10:15

标签: iphone audio audio-recording

iphone有一个实时音频应用程序,可以添加一些效果(混响,延迟等)来输入声音并播放。 所以我有一个经典的放大audio loop issue。你可能对此很熟悉。当麦克风靠近扬声器时,它经常发生(来自输入的声音被放大,熄灭,重新进入,等等)。

听听如何解决这个问题会很棒。

(我已经尝试过:

  1. 限制最大音量以防止反馈增长。
  2. 使用过滤器来限制某些频率。
  3. 从新输入信号中减去先前的输出信号(我认为这是最好的方法,但这并不完美。即使时机很好(我想是这样),这种方法也会破坏声音太多)
  4. 感谢。

3 个答案:

答案 0 :(得分:5)

你的3号和2号组合可能是最好的。查找自适应声学回声消除。

使用nLMS的AEC非常容易实现,但需要一点CPU。如果您使用较低的采样率,它可能会起作用,具体取决于您的回声的毫秒数。

有一个使用FFT进行自适应的快速版本。它不能很快适应,但在没有长回声尾的移动应用程序上可能会很好。

AEC的工作方式是它收敛于扬声器和麦克风之间回声路径的声学模型,然后使用该模型从麦克风输入中减去输出回声。它知道发生了什么,它通过模型得出它并获得关于回声将是什么的猜测,然后从输入中移除该回声。随着时间的推移,模​​型变得更好,回声更小。

答案 1 :(得分:1)

您可能已经知道这一点,但为了安全起见 - 确保您将输出路由到正确的扬声器。正如您在设置“播放和录制”音频会话类别时所说的那样in the docs,默认输出是顶部发言者(您在通话期间放心的那个)。底部还有另一个扬声器,因为它离麦克风更近一些,它会产生更多的反馈。如果您设置“播放和录制”类别,通常需要手动覆盖以路由到错误的(底部)扬声器,但我想我会提到它确定。

答案 2 :(得分:0)

帮助其他人尝试解决此问题:AEC加上高通,低通滤镜的组合。

http://speex.org,这是AEC的一部分。 High-passlow-pass过滤器非常易于实施。 (有关LP,HP过滤器实现,请参阅Apple AccelerometerGraph示例)