0
我想了解如何正確使用兩個WebRtcAecm函數。看起來有兩個主要功能用於移動回聲消除。使用WebRtcAecm函數的正確方法
第一個是WebRtcAecm_BufferFarend
:
int32_t WebRtcAecm_BufferFarend(void* aecmInst,
const int16_t* farend,
int16_t nrOfSamples);
我想這是我們在通過我們從遠端接收的音頻數據。當我們繼續接收音頻數據包時,我們是否繼續調用此方法?另外,該函數是否會複製傳入的緩衝區,以便我們可以爲下一個數據包重用相同的緩衝區?
的另一個功能是WebRtcAecm_Process
:
int32_t WebRtcAecm_Process(void* aecmInst,
const int16_t* nearendNoisy,
const int16_t* nearendClean,
int16_t* out,
int16_t nrOfSamples,
int16_t msInSndCardBuf);
在互聯網上的代碼片段,我看到了正被用於nearendNoisy和nearendClean相同的指針。不應該nearendClean參數爲null,如果我們不做任何噪音抑制?
最後,在兩個不同的線程中調用這兩個方法有什麼問題嗎?我們的遠程音頻接收器代碼位於一個線程中,我們的麥克風監聽器代碼位於另一個線程中。
非常感謝您的幫助。
謝謝。你的代碼很有幫助。問候。 – Peter
嗨,billhoo。我執行了你的例子,它的輸出是一個新文件。但是當我播放它時,沒有任何聲音(甚至是輸入文件中的人聲)。你可以幫我嗎?謝謝。 – Spinning
@Spinning嗨,我將PCM音頻作爲近音和遠音信號,並將延遲設置爲10ms,因此理想輸出完全沒有聲音。順便說一句,經過很長時間來優化我的程序與AECM(甚至APM),我仍然無法讓它在100%完美的實時VoIP通話中工作。所以如果你想使用AECM,請準備好它的反饋。更多信息。可以在[google aecm issues]中找到(https://code.google.com/p/webrtc/issues/list?can=2&q=aecm&colspec=ID+Pri+Mstone+ReleaseBlock+Area+Status+Owner+Summary&x= mstone&y = owner&cells = tiles) – BillHoo