Webrtc 迴音消除 一
Webrtc的Aec模組除錯迴音消除已經快一個月了,今天有了一個小的突破,終於Demo可以成功消除迴音了!!!
步奏:
//*********************************************************************************//
1、首先下載webrtc原始碼提取Aec模組,編寫Android.mk或Makefile編譯不多說
//*********************************************************************************//
//*********************************************************************************//
2、編寫Demo程式單獨除錯Aec介面。
a:可以驗證介面
b:有了成功的Demo做樣板再往裝置移植不會出現茫然的除錯
//*********************************************************************************//
//*********************************************************************************//
3、Demo程式除錯成功,往真實裝置移植
a:要考慮真實裝置的speaker和mic資料延時(延時值是AEC的核心,移動端最重要的值就是這個aecdelay)
b:要考慮speaker和mic執行緒的同步
c:要考慮speaker和mic儲存佇列要對齊(這個佇列也是很有講究的,維護佇列長度是個除錯值,大於此維護長度幹嘛,小於此維護長幹嘛)
d:要考慮到資料型別轉換(char、float和short)
e:要考慮網路傳輸而來的speaker資料質量差的問題(這是一個很難得攻克點,需要新增佇列通過演算法排序speaker資料)
//*********************************************************************************//
下面記錄一下近期除錯的一些心得
//*********************************************************************************//
AEC函式描述:
//*********************************************************************************//
//儲存遠端資料即speak資料,也可以成為回聲的原始資料(far_frame)
EWebRtcAEC_BufferFarend(handleAec, far_frame, NN)
//*********************************************************************************//
//*********************************************************************************//
//回聲消除,near_frame為mic資料(double talk包含回聲和錄入聲音)aecout_frame為輸出資料
//near_frame中的迴音能量應該遠小於far_frame和錄入聲音的能量,才能正常消除。否則Aec無法精確判斷誰是迴音誰是錄入聲音,從而把錄入聲音一起消除
//aecdelay為speaker和mic的延遲時間
1、當裝置為固定硬體平臺aecdelay可以為固定值(比如我們的裝置端)
2、當裝置不固定,則aecdelay需要通過EWebRtcAEC_GetDelayMetrics計算(比如我們的客戶端在手機上,手機硬體平臺不固定)
EWebRtcAEC_Process(handleAec,near_frame,1, aecout_frame,NN,aecdelay,0);
//*********************************************************************************//
//*********************************************************************************//
//引數描述:median為平均值,std為方差,delay的取值主要來源於median
EWebRtcAEC_GetDelayMetrics(handleAecDelay,median,std,frac)
//*********************************************************************************//