有一个适用于 iphone 的实时音频应用程序,可为输入声音添加一些效果(混响、延迟等)并进行播放。所以我遇到了一个经典的放大音频循环问题。您可能对此很熟悉。当您将麦克风靠近扬声器时,通常会发生这种情况(来自输入的声音被放大、消失、重新进入等等)。
很高兴听到如何解决此问题的任何想法。
(我已经尝试过:
- 限制最大音量以防止反馈增加。
- 使用过滤器来限制某些频率。
- 从新的输入信号中减去以前的输出信号(我认为这是最好的方法,但这并不完美。即使时机很好(我认为是这样)这种方法会过多地破坏声音)
谢谢。
有一个适用于 iphone 的实时音频应用程序,可为输入声音添加一些效果(混响、延迟等)并进行播放。所以我遇到了一个经典的放大音频循环问题。您可能对此很熟悉。当您将麦克风靠近扬声器时,通常会发生这种情况(来自输入的声音被放大、消失、重新进入等等)。
很高兴听到如何解决此问题的任何想法。
(我已经尝试过:
谢谢。
你的 3 号和 2 号加起来可能是最好的。查找自适应声学回声消除。
使用 nLMS 的 AEC 很容易实现,但会占用一些 CPU。如果您使用较低的采样率,它可能会起作用,具体取决于您的回声的毫秒数。
有一个使用 FFT 进行适应的快速版本。它不会很快适应,但在没有长回声尾巴的移动应用程序上可能会很好。
AEC 的工作方式是将扬声器和麦克风之间的回声路径收敛到声学模型上,然后使用该模型从麦克风输入中减去输出回声。它知道会发生什么,将其放入模型中并猜测回声将是什么,然后从输入中删除该回声。随着时间的推移,模型变得更好,回波更小。
您可能已经知道这一点,但为了安全起见 - 确保您将输出路由到正确的扬声器。正如您在文档中所说的那样,当您设置“播放和录制”音频会话类别时,默认输出是顶部扬声器(您在通话期间将耳朵放在上面的那个)。底部还有另一个扬声器,由于它离麦克风更近,它会产生更多的反馈。如果您设置“播放和录制”类别,通常需要手动覆盖以路由到错误的(底部)扬声器,但我想我会提到它以确保。
为了帮助其他试图解决这个问题的人:AEC 加上高通、低通滤波器的组合。
http://speex.org,它的 AEC 部分完成了这项工作。高通、低通滤波器很容易实现。(请参阅 Apple AccelerometerGraph 示例以了解 LP、HP 滤波器实现)