2013-02-23 57 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示例)