2010-02-05 281 views
0

我正在尋找解決方案來調整我的VoIP應用程序中麥克風的電平。我可以獲得一定程度的聲音,但也希望在實時過低或過高時調整麥克風的「音量」。喜歡在Skype ...麥克風自動電平

它看起來很容易ex facte,但我認爲算法應該是有點聰明,然後只是在音量超過上限/下限時調高音量。

我在Win平臺上使用.Net 2.0。是否有任何準備好的.Net庫,甚至C庫(所以我可以移植它),甚至只是描述這些方法/算法?我試圖谷歌,但沒有運氣。

謝謝!

回答

0

這有兩個部分。

首先,您需要開始從麥克風捕捉音頻並測量其信號強度。如果有人正在對麥克風講話進行校準,則可以簡單地在前幾秒鐘查找最高峯值。如果它低於-6dB(比如說),提高增益一點,如果它高於-3dB,則減少一點。重點是您需要高信噪比,但無論如何您都希望避免因信號太大而導致削波或失真。

第二部分是計算混音器API返回的混音器控件中的哪一個控制麥克風增益。事實證明這比它應該更難,特別是如果你希望它能夠與所有聲卡以及XP和Vista/Win 7一起工作,請參閱this question以獲得一些建議的解決方案。

您可以使用NAudio這兩個部件。它有waveIn和mixer API的包裝器。

0

這個常用的名字是AGC (Automatic Gain Control),它並不像聽起來那麼容易。在基本的AGC方案中,您有一個快速的「攻擊」,這意味着當輸入電平增加時,可以非常快速地減小增益,然後在輸入電平下降時使用較大的時間常數來更慢地增加增益。

+0

嗨保羅,謝謝你的回覆。是的,AGC。我在這裏問完全是因爲我不認爲它可以在2行代碼中實現。 找到一個.Net解決方案或者甚至是這樣的算法的詳細描述將是完美的。 – 2010-02-05 16:02:39

+0

自動增益控制在您錄製它之後的信號*上工作,這很好,但在錄製之前首先要設置合適的麥克風增益也非常重要。否則,您的信噪比或失真和削波都會很差,這兩個問題都無法由AGC解決。 – 2010-11-24 09:29:47

+0

@Mark Heath:AGC也可以應用於硬件 - 大多數音頻接口在AD轉換器輸入之前有一個可編程的模擬增益級 - 這使得AGC可以通過軟件控制,但以硬件方式應用,避免了削波問題和SNR,你提到 – 2010-11-24 10:06:09

0

試試這個一開始:Get and set the wave sound volume

它使用Windows API在C#中通過的P/Invoke。

+0

嗨,謝謝你的回覆。我在任何時候捕獲當前信號值都沒有問題。問題是 - 如何根據當前和過去的麥克風電平的現有信息調整麥克風的增益/音量,以將聲音的音量保持在理想的範圍內?這是一個重點。 – 2010-02-05 18:35:13