2013-10-30 114 views
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,如果我們不做任何噪音抑制?

最後,在兩個不同的線程中調用這兩個方法有什麼問題嗎?我們的遠程音頻接收器代碼位於一個線程中,我們的麥克風監聽器代碼位於另一個線程中。

非常感謝您的幫助。

回答

0

我已經發布了github上的project,它會告訴你如何調用這些函數。

nearendClean確實可以設置爲NULL,並且我總是將它設置爲NULL,cus'我的NS在AECM處理之後。

Holp I help :)

+0

謝謝。你的代碼很有幫助。問候。 – Peter

+0

嗨,billhoo。我執行了你的例子,它的輸出是一個新文件。但是當我播放它時,沒有任何聲音(甚至是輸入文件中的人聲)。你可以幫我嗎?謝謝。 – Spinning

+0

@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

相關問題