こんにちは、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など)を使用することはできません(既存のプロジェクトに取り組んでいるため)。
できるだけ早く助けてください。
どうもありがとうございました。