iphone有一个实时音频应用程序,可以添加一些效果(混响,延迟等)来输入声音并播放。 所以我有一个经典的放大audio loop issue。你可能对此很熟悉。当麦克风靠近扬声器时,它经常发生(来自输入的声音被放大,熄灭,重新进入,等等)。
听听如何解决这个问题会很棒。
(我已经尝试过:
感谢。
答案 0 :(得分:5)
你的3号和2号组合可能是最好的。查找自适应声学回声消除。
使用nLMS的AEC非常容易实现,但需要一点CPU。如果您使用较低的采样率,它可能会起作用,具体取决于您的回声的毫秒数。
有一个使用FFT进行自适应的快速版本。它不能很快适应,但在没有长回声尾的移动应用程序上可能会很好。
AEC的工作方式是它收敛于扬声器和麦克风之间回声路径的声学模型,然后使用该模型从麦克风输入中减去输出回声。它知道发生了什么,它通过模型得出它并获得关于回声将是什么的猜测,然后从输入中移除该回声。随着时间的推移,模型变得更好,回声更小。
答案 1 :(得分:1)
您可能已经知道这一点,但为了安全起见 - 确保您将输出路由到正确的扬声器。正如您在设置“播放和录制”音频会话类别时所说的那样in the docs,默认输出是顶部发言者(您在通话期间放心的那个)。底部还有另一个扬声器,因为它离麦克风更近一些,它会产生更多的反馈。如果您设置“播放和录制”类别,通常需要手动覆盖以路由到错误的(底部)扬声器,但我想我会提到它确定。
答案 2 :(得分:0)
帮助其他人尝试解决此问题:AEC加上高通,低通滤镜的组合。
http://speex.org,这是AEC的一部分。 High-pass,low-pass过滤器非常易于实施。 (有关LP,HP过滤器实现,请参阅Apple AccelerometerGraph示例)