java webrtc ns降噪_单独编译和使用webrtc音频降噪模块(附完整源码+测试音频文件)...
webrtc的音頻處理模塊分為降噪ns,回音消除aec,回聲控制acem,音頻增益agc,靜音檢測部分。另外webrtc已經(jīng)封裝好了一套音頻處理模塊APM,如果不是有特殊必要,使用者如果要用到回聲消除等較為復雜的模塊時,最好使用全部的音頻處理模塊二不要單獨編譯其中一部分以免浪費寶貴的時間。
但是音頻降噪部分較為簡單,用起來也就幾個函數(shù),除了需要傳入的音頻數(shù)據(jù)以外,需要調(diào)整的參數(shù)也就是音頻采樣率和降噪等級。另外這部分代碼采用純C語言語法編寫,可以跨平臺編譯。整個算法也不算特別復雜,運行起來占CPU也不是很多,可以上至i7 8核CPU的高配電腦,下至380Mhz的小嵌入式系統(tǒng)以及一切版本的移動端產(chǎn)品中編譯運行。另外效果也十分不錯,通過本文附帶的測試demo大家就可以感受一下。
降噪有兩部分代碼,一套是定點算法(noise_suppression_x.h),一套是浮點算法(noise_suppression.h)。相對來說浮點算法精度更高,但是耗系統(tǒng)資源更多,特別是浮點計算能力較弱的低端ARM CPU上。但是一般來說浮點和定點算法在實際效果上聽不出區(qū)別出來,估計是我沒遇到過必須必須要用浮點的情況。在使用上,浮點和定點也僅僅只是變量名和函數(shù)沒中多出了一個x。
音頻處理的時候webrtc一次僅能處理10ms數(shù)據(jù),小于10ms的數(shù)據(jù)不要傳入,因為即時是傳入小于10ms的數(shù)據(jù)最后傳入也是按照10ms的數(shù)據(jù)傳出,此時會出現(xiàn)問題。另外支持采樣率也只有8K,16K,32K三種,不論是降噪模塊,或者是回聲消除增益等等均是如此。對于8000采樣率,16bit的音頻數(shù)據(jù),10ms的時間采樣點就是80個,一個采樣點16bit也就是兩個字節(jié),那么需要傳入WebRtcNsx_Process的數(shù)據(jù)就是160字節(jié)。對于8000和16000采樣率的音頻數(shù)據(jù)在使用時可以不管高頻部分,只需要傳入低頻數(shù)據(jù)即可,但是對于32K采樣率的數(shù)據(jù)就必須通過濾波接口將數(shù)據(jù)分為高頻和低頻傳入,傳入降噪后再組合成音頻數(shù)據(jù)。大于32K的音頻文件就必須要通過重采樣接口降頻到對應的采樣率再處理,在demo源碼里面有對應的接口使用者可以去查。
降噪的開源代碼包括定點降噪,浮點降噪,音頻重采樣,濾波接口,摳出來后修改了頭文件包含位置使其都在同一目錄下,如果是xcode下編譯可能會有once函數(shù)編譯不過的問題,此時修改一個宏即可,為了盡量避免修改問題就不改動這部分了。
示例代碼給了32K采樣率的測試demo,也有8K采樣率實現(xiàn)。16K采樣率只需要將8K內(nèi)部的數(shù)據(jù)大小由80改成160即可,PCM音頻文件可以由Audacity軟件通過文件--導入--原始數(shù)據(jù),選擇好bit位數(shù),聲道,采樣率即可顯示波形,播放。
總結
以上是生活随笔為你收集整理的java webrtc ns降噪_单独编译和使用webrtc音频降噪模块(附完整源码+测试音频文件)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 有关python方面的论文_一篇文章可以
- 下一篇: java hprof_java 性能之