キャプチャー バッファーのエフェクト
Microsoft Windows XP では、カーネルモードの実装として、次の 2 つのキャプチャー バッファー エフェクトを利用できます。
- アコーステック エコー キャンセレーション (AEC)
- ノイズ抑制
レンダリング バッファーで使用されるような DMO の他のエフェクトはサポートされていません。
DirectSoundFullDuplexCreate8 関数と IDirectSoundCapture8::CreateCaptureBuffer メソッドは、どちらも、目的のエフェクトを記述する DSCEFFECTDESC 構造体の配列を指す DSCBUFFERDESC 構造体をパラメーターとして使用します。ただし、Microsoft の実装を使用するには、DirectSoundFullDuplexCreate8 を使用してキャプチャー バッファーを作成する必要があります。また、この関数で作成されたセカンダリ サウンド バッファーも再生する必要があります。これを再生するまで、エフェクトは適用されません。
各 DSCEFFECTDESC 構造体の dwFlags メンバーには、DSCFX_LOCHARDWARE または DSCFX_LOCSOFTWARE を指定する必要があります。一般には、DSCFX_LOCSOFTWARE を指定します。指定した場所でエフェクトを利用できない場合、バッファーの作成は失敗します。
エフェクトは、DSCEFFECTDESC 構造体の guidDSCFXClass メンバーで指定します。Microsoft のソフトウェアでの実装を取得するには、guidDSCFXInstance メンバーに DSCFX_MS_AEC または DSCFX_MS_NS を指定します。ハードウェアまたはソフトウェアで利用可能な別の実装を使用するには、製造元からクラスおよびインスタンスの GUID を取得します。
バッファーが作成されたら、IDirectSoundCaptureBuffer8::GetFXStatus メソッドを使用して、エフェクトに関する情報を取得できます。
アコーステック エコー キャンセレーション (AEC) は、主に、サイト間のボイス コミュニケーションを使用するアプリケーションで利用されます。サイト A のマイクロフォンから送られる信号は、サイト B のスピーカーから出力され、サイト B のマイクロフォンで拾われます。AEC がない場合、信号はサイト A に送り返され、エコーとなってキーンというハウリングが発生する可能性があります。AEC は、着信信号をサイトごとに監視し、室内環境を考慮しながら調整して送信信号から排除することで、この問題を解決します。さらに、コンピューターで再生されている音楽などのローカル サウンドも除去して、ネットワークを介して送信されるボイス信号を干渉しないようにします。
AEC は、オペレーティング システムのカーネル レベルで実装され、グローバルに影響します。AEC には、以下の制約があります。
- AEC は、一度に 1 つのキャプチャー バッファーでしか使用できません。
- 別のアプリケーションがオーディオをキャプチャーまたは再生している場合、AEC は開始できません。AEC がすでに開始されている場合、他のアプリケーションは AEC を使用せずにオーディオをキャプチャーすることはできません。
- 入力フォーマットまたは出力フォーマットに関係なく、カーネル ミキサーは 16 ビットのモノラル フォーマットでサウンドを処理します。その結果、サウンドの品質が低下する場合があります。プロセッサの使用を最小限に抑えるには、16 ビット モノラル フォーマットでサウンドをキャプチャーします。
- AEC の使用中は、デバイス上のすべての DirectSound ハードウェア アクセラレーションが無効になるため、同じデバイスを共有する他のアプリケーションのユーザー エクスペリエンスに影響が生じます。
- AEC のパラメーターの変更は、実行中のすべてのアプリケーションに影響します。
- サウンド カードとサウンド ドライバーの組み合わせによっては、AEC が機能しない場合があります。アプリケーションには、ユーザーが AEC をオフにできるオプションを常に用意しておく必要があります。
- Windows XP SP1 より前のオペレーティング システムでは、AEC は USB スピーカーでは機能しません。また、クロックが異なる別のデバイスからオーディオ キャプチャーとレンダリング機能が提供されているマシンでも、AEC は機能しません。
- 音響環境が変化した場合、適応型フィルターの調整に 2 秒以上かかる可能性があります。
- 元の信号から 128 ミリ秒以上経過した後に発生する後期残響は、送信信号から除去されません。
このエフェクトが格納されたキャプチャー バッファーの AEC パラメーターを設定および取得するには、IDirectSoundCaptureFXAec8 インターフェイスを使用します。送信信号に新しいデータが含まれていないときに完全な無音状態を防ぐ方法として、ノイズ充填機能を有効にすることもできます。
ノイズ抑制は、AEC が有効になっている場合のみ適用できます。ノイズ抑制キャプチャー エフェクトは、ファンの音などの常に発生している背景ノイズを除去します。パラメーターを設定および取得するには、IDirectSoundCaptureFXNoiseSuppress8 インターフェイスを使用します。
このエフェクトのインターフェイスは、IDirectSoundCaptureBuffer8::GetObjectInPath を使用して、キャプチャー バッファー オブジェクトから取得します。