1

エコーをキャンセルしようとしていますが、非常に単純な例を使用してもキャンセルできませんでした。フレームサイズ 160 タイル長 100

audioRecord.read(mic,0,mic.length);
audioData = speex.encode(mic,0,mic.length);
speakerData=speex.decode(audioData);
audioTrack.write(speakerData, 0, speakerData.length);
speex.DoAEC(mic,speakerData,outref);
fos.write(outref);

上記のコード例でエコーがキャンセルされなかったのはなぜですか? ファイルを再生すると、エコーは削除されませんでした。

また、次の簡単な例は機能しませんでしたが、まだエコーがあります。

    short[] buf=new short[160];
audioRecord.read(buf,0,buf.length);
if(sData==null){
sData=buf;
}
short[] outref=new short[160];

speex.cancelecho(buf,sData,outref);
audioTrack.write(outref, 0, outref.length);
sData=buf;
4

1 に答える 1

0

AEC が機能するための要件 (すべて Speex のドキュメントに記載されています) を理解し、それを達成するためにフローをデバッグする方法を理解する必要があります。

ここで私の答えからより多くのポインタを得ることができます: Android Speex エコー キャンセルの問題

また、Speex AEC のループバック サンプルを実行するプロジェクトがあります。ビデオ カバレッジは次のとおりです: http://www.youtube.com/watch?v=e1-HwidHMy0

これはプロジェクト全体なので、答えを絞り込もうとしても意味がありませんが、私が示した指針はあなたに出発点を与えるはずです - そしてビデオはそれが可能であることを証明しています.

于 2012-05-25T22:55:49.667 に答える