2 つの WebRtcAecm 関数を適切に使用する方法を理解しようとしています。モバイルでのエコー キャンセレーションに使用される主な機能は 2 つあるようです。
最初のものは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 にするべきではありませんか?
最後に、これら 2 つのメソッドを 2 つの異なるスレッドで呼び出すことに問題はありますか? リモート オーディオ レシーバーのコードは 1 つのスレッドにあり、マイク リスナーのコードは別のスレッドにあります。
よろしくお願いいたします。