2013-02-23 37 views
2

iPhone有一个实时音频应用程序,它添加了一些效果(混响,延迟等)来输入声音并播放它。 所以我有一个经典的放大audio loop issue。你可能对此很熟悉。当您将麦克风靠近扬声器(输入声音被放大,消失,重新进入等等)时,通常会发生这种情况。iPhone应用程序中的音频反馈问题

很高兴听到任何想法如何解决这个问题。

(我已经尝试过:。

  1. 限制最大音量,以防止越来越多的反馈
  2. 使用过滤器,限制某些频率的新的输入信号
  3. 减法先前输出信号(此信号我认为,是最好的方式,但是这是不完美的。即使时机是不错的(我是这么认为的)这种方法破坏了声音太大)

感谢。

回答

5

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

使用nLMS的AEC很容易实现,但需要一点CPU。如果您使用较低的采样率,这取决于您的回声有多长时间,这可能会奏效。

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

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

+0

谢谢,我们将查找它。 – krafter 2013-02-25 14:09:17

+0

是的。 AEC +低通,高通滤波器的组合是最好的选择。 – krafter 2013-03-09 14:13:43

1

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

+0

值得一提的是,谢谢。顶级扬声器可以解决这个问题,但它太安静了,所以我必须使用最底层的扬声器。 – krafter 2013-03-08 20:14:16

0

为了帮助其他人尝试解决这个问题:AEC加上高通低通滤波器的组合。

http://speex.org,这是AEC部分做的工作。 High-passlow-pass过滤器很容易实现。 (请参阅LP,HP滤波器实现的Apple AccelerometerGraph示例)