3

こんにちは、Android アプリケーションに VOIP 機能を追加しようとしています。これには、アコースティック エコー キャンセレーションが必要です。
AcousticEchoCanceler hereの公式ドキュメントを見ました。
アコースティック エコー キャンセレーションに次のコードを使用しています。

if(AcousticEchoCanceler.isAvailable()) {
            echoCanceler = AcousticEchoCanceler.create(mAudioRecord.getAudioSessionId());
            echoCanceler.setEnabled(true);
        }

しかし、これはまったく役に立たないようです。isAvailable() は true を返し、echoCanceler オブジェクトが作成されます。echoCanceler.getEnabled() をクエリすると、true も返されます。

AudioRecord と AudioTrack を使用してサンプル アプリを作成しても、これは機能しません。たくさんの反響が聞こえました。
AudioRecord のソースを次のように設定した場合:

android.media.MediaRecorder.AudioSource.VOICE_COMMUNICATION

Nexus 5 (Android バージョン 5 および 6 の場合) の場合、エコーがキャンセルされることがわかります。
(ソースをVOICE_COMMUNICATIONに設定した場合、AcousticEchoCancelerは使用していません)ただし、同じAndroidバージョンでは、同じ方法はSamsung Galaxy S4およびSamsung Note 4などのデバイスでは機能しません。
エコーキャンセルライブラリ(libspeexdspなど)を使用することはできません(既存のプロジェクトに取り組んでいるため)。
できるだけ早く助けてください。
どうもありがとうございました。

4

1 に答える 1

0

オーディオモードがに設定されていることを確認してくださいMODE_IN_COMMUNICATION

于 2016-08-08T18:03:27.543 に答える