8

Android デバイスに組み込まれているアコースティック エコー キャンセレーションの使用方法を知っている人はいますか? これはシリコンのどこかにあり、GSM/CDMA スピーカーフォン コールに使用されます。私たちは、独自のアプリケーションを作成するのではなく、VoIP アプリケーションに利用したいと考えています。

ベン

4

4 に答える 4

5

最終的に、Arm5 (WM8650) プロセッサ (Android 2.2) でエコー キャンセルを機能させることができました。以下は私が取った手順です。

  1. Speex を JNI でラップし、PCM フレームをエンコーダーに送信する前にエコー処理ルーチンを呼び出しました。Speexの設定を試してもエコーはキャンセルされませんでした。

  2. Speex は再生フレームとエコー フレームの間の遅延に非常に敏感であるため、キューを実装し、AudioTrack に送信されるすべてのパケットをキューに入れました。キューのサイズは、内部 AudioTrack バッファーのサイズとほぼ同じにする必要があります。この方法では、AudioTrack がパケットを内部バッファからサウンド カードに送信するのとほぼ同時に、パケットが echo_playback に送信されます。このアプローチで遅延は解消されましたが、エコーはまだキャンセルされませんでした

  3. WebRtc エコー キャンセル部分を JNI でラップし、パケットをエンコーダーに送信する前にそのメソッドを呼び出しました。エコーはまだ存在していましたが、ライブラリは明らかにそれをキャンセルしようとしていました.

  4. P2 で説明したバッファー手法を適用したところ、ようやく機能し始めました。ただし、遅延はデバイスごとに調整する必要があります。また、WebRtc にはエコー キャンセレーションのモバイル バージョンとフル バージョンがあることにも注意してください。フルバージョンではプロセッサが大幅に遅くなるため、おそらく ARM7 でのみ実行する必要があります。モバイル版は動作しますが、品質が低下します

これが誰かを助けることを願っています。

于 2011-08-19T16:59:15.730 に答える
0

私は同じ場所に行って、Speex AECをAndroidに正常に移植し、2つの異なるAndroidVoIPクライアントで使用しました。スピーカーフォンを最大音量で使用すると、エコーのほとんどがキャンセルされます。さまざまなデバイスでテストされています。Speexの公式ドキュメントとグーグルで十分に機能するはずです。

于 2011-03-09T14:16:53.280 に答える
0

API レベル 11 以降、MediaRecorder.AudioSource に新しい値があり、それは VOICE_COMMUNICATION です。Android のドキュメントに次のように書かれています。「VoIP などの音声通信用に調整されたマイク オーディオ ソース。たとえば、エコー キャンセレーションや自動ゲイン コントロールが利用できる場合はそれを利用します。それ以外の場合、音声処理が適用されていない場合は DEFAULT のように動作します。」私はこれを試しましたが、うまくいきませんでした。問題は、私が使用していたデバイス、Sony Tablet S にある可能性があります。ただし、試してみる価値はあります。

于 2011-11-23T20:45:07.983 に答える