私は Windows Phone 8 用の VoIP アプリケーションに取り組んでおり、スピーカーフォンの使用時に生成されるエコーをキャンセルしたいと考えています。Speex が提供する AEC モジュールをアプリケーションに統合しようとしましたが、役に立ちませんでした。私のアプリケーションは正常に動作しますが、エコーは持続します。私のコードは MS Chatterbox VoIP アプリケーションに基づいており、キャプチャとレンダリングに WASAPI を使用しています。これは関連するセクションの形式です (既に存在し機能しているものと新しいものを示すようにしました):
初期化:
// I've tried tail lengths between 100-500ms (800-4000 samples @ 8KHz)
echoState = speex_echo_state_init (80, 800)
speex_echo_ctl(echoState, SPEEX_ECHO_SET_SAMPLING_RATE, 8000);
レンダリング (10 ミリ秒ごとに実行):
Read 10ms (80 samples) data from network (8KHz, 16 bit, mono)
NEW - speex_echo_playback(echoState, networkData)
Upsample data to 48KHz
Render data
キャプチャ (10 ミリ秒ごとに実行):
Capture 10ms of data (48KHz, 16 bit, mono)
Downsample to 8KHz
NEW - speex_echo_capture(echoState, downsampledData, echoCancelledData)
Send echoCancelledData to network
Speex のドキュメントを読み、このサイトのいくつかの投稿 (Wp8 の質問に対する Speex の多くはありませんが、Android に対するいくつかの Speex) を見た後、私はこれが彼らの適切な実装である、またはそれに近いという印象を受けました。 API。では、なぜ機能しないのでしょうか。
前もって感謝します