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


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

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

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

 

但是音頻降噪部分較為簡單,用起來也就幾個函數,除了需要傳入的音頻數據以外,需要調整的參數也就是音頻采樣率和降噪等級。另外這部分代碼采用純C語言語法編寫,可以跨平台編譯。整個算法也不算特別復雜,運行起來占CPU也不是很多,可以上至i7 8核CPU的高配電腦,下至380Mhz的小嵌入式系統以及一切版本的移動端產品中編譯運行。另外效果也十分不錯,通過本文附帶的測試demo大家就可以感受一下。

降噪有兩部分代碼,一套是定點算法(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源碼里面有對應的接口使用者可以去查。

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

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

 

源碼下載:WebRtcAudioTest.rar

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM