2

有一个适用于 iphone 的实时音频应用程序,可为输入声音添加一些效果(混响、延迟等)并进行播放。所以我遇到了一个经典的放大音频循环问题。您可能对此很熟悉。当您将麦克风靠近扬声器时,通常会发生这种情况(来自输入的声音被放大、消失、重新进入等等)。

很高兴听到如何解决此问题的任何想法。

(我已经尝试过:

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

谢谢。

4

3 回答 3

5

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

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

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

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

于 2013-02-24T13:33:57.703 回答
1

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

于 2013-03-07T10:13:16.663 回答
0

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

http://speex.org,它的 AEC 部分完成了这项工作。高通低通滤波器很容易实现。(请参阅 Apple AccelerometerGraph 示例以了解 LP、HP 滤波器实现)

于 2013-03-09T14:24:33.277 回答