2012-12-13 34 views
1

即時播放的應用程序可將設備麥克風的聲音輸出實時播放至設備耳機。當聲音太大時,應用程序需要自動降低聲音級別,並在放大聲音時放大聲音級別太低。自動音量控制用於播放大聲音

AudioTrack track = null; 
    track.setStereoVolume(2.0f, 2.0f); 

setStereoVolume()可以改變音量水平。我可以從原始PCM值和inc/dec音頻音量中檢查最大幅度,而無需動態使用FFT。這是正確的方法嗎?爲避免使用時出現的延遲setStreoVolume()當聲音太大時,我可以不將緩衝區值分成一半當它太安靜時,將它們乘以2。

回答

2

在某些點處將樣本減半/加倍可能會在輸出信號中引起非常明顯的下降/尖峯。您要的是Dynamic Range Compressor。手機相當有可能在平臺上運行。但是,如果您對其性能不滿意,可以添加自己的軟件DRC。基本思想是當信號達到一定的閾值時逐漸衰減信號。由於這會降低最大信號電平(衰減大聲部分),因此您可以添加所謂的化妝增益,這會增加整體信號電平(從而使安靜部分變得更響)。

+0

哇感謝您向我展示正確的道路。你知道任何可以做DRC的java/android DSP庫嗎?我找不到任何。 –

+1

我從來沒有使用過任何免費的實現,即使我們從平臺供應商那裏獲得的實現,我也沒有真正參與實際的調整。 「動態範圍壓縮java」的搜索結果在第一個搜索結果中給出了一些java代碼 - 無論代碼是否有用並且具有許可證許可我都不知道。 – Michael