單獨編譯和使用webrtc音頻降噪模塊(附完整源碼+測試音頻文件)

單獨編譯和使用webrtc音頻增益模塊(附完整源碼+測試音頻文件)html

單獨編譯和使用webrtc音頻回聲消除模塊(附完整源碼+測試音頻文件)web

webrtc的音頻處理模塊分爲降噪ns,迴音消除aec,回聲控制acem,音頻增益agc,靜音檢測部分。另外webrtc已經封裝好了一套音頻處理模塊APM,若是不是有特殊必要,使用者若是要用到回聲消除等較爲複雜的模塊時,最好使用所有的音頻處理模塊二不要單獨編譯其中一部分以避免浪費寶貴的時間。算法

 

可是音頻降噪部分較爲簡單,用起來也就幾個函數,除了須要傳入的音頻數據之外,須要調整的參數也就是音頻採樣率和降噪等級。另外這部分代碼採用純C語言語法編寫,能夠跨平臺編譯。整個算法也不算特別複雜,運行起來佔CPU也不是不少,能夠上至i7 8核CPU的高配電腦,下至380Mhz的小嵌入式系統以及一切版本的移動端產品中編譯運行。另外效果也十分不錯,經過本文附帶的測試demo你們就能夠感覺一下。xcode

降噪有兩部分代碼,一套是定點算法(noise_suppression_x.h),一套是浮點算法(noise_suppression.h)。相對來講浮點算法精度更高,可是耗系統資源更多,特別是浮點計算能力較弱的低端ARM CPU上。可是通常來講浮點和定點算法在實際效果上聽不出區別出來,估計是我沒遇到過必須必需要用浮點的狀況。在使用上,浮點和定點也僅僅只是變量名和函數沒中多出了一個x。函數

音頻處理的時候webrtc一次僅能處理10ms數據,小於10ms的數據不要傳入,由於即時是傳入小於10ms的數據最後傳入也是按照10ms的數據傳出,此時會出現問題。另外支持採樣率也只有8K,16K,32K三種,不管是降噪模塊,或者是回聲消除增益等等均是如此。對於8000採樣率,16bit的音頻數據,10ms的時間採樣點就是80個,一個採樣點16bit也就是兩個字節,那麼須要傳入WebRtcNsx_Process的數據就是160字節。對於8000和16000採樣率的音頻數據在使用時能夠無論高頻部分,只須要傳入低頻數據便可,可是對於32K採樣率的數據就必須經過濾波接口將數據分爲高頻和低頻傳入,傳入降噪後再組合成音頻數據。大於32K的音頻文件就必需要經過重採樣接口降頻到對應的採樣率再處理,在demo源碼裏面有對應的接口使用者能夠去查。post

降噪的開源代碼包括定點降噪,浮點降噪,音頻重採樣,濾波接口,摳出來後修改了頭文件包含位置使其都在同一目錄下,若是是xcode下編譯可能會有once函數編譯不過的問題,此時修改一個宏便可,爲了儘可能避免修改問題就不改動這部分了。測試

示例代碼給了32K採樣率的測試demo,也有8K採樣率實現。16K採樣率只須要將8K內部的數據大小由80改爲160便可,PCM音頻文件能夠由Audacity軟件經過文件--導入--原始數據,選擇好bit位數,聲道,採樣率便可顯示波形,播放。spa

 

源碼下載:WebRtcAudioTest.rarcode

相關文章
相關標籤/搜索