0

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 つのスレッドにあり、マイク リスナーのコードは別のスレッドにあります。

よろしくお願いいたします。

4

1 に答える 1

0

これらの関数を呼び出す方法を正確に示すプロジェクトを github に投稿しました。

nearendCleanは実際に NULL に設定できます。私は常に NULL に設定しています。私の NS は AECM 行列の後であるからです。

私が助けたホルプ:)

于 2013-10-30T09:52:30.500 に答える