次の方法で共有


AEC システム フィルター

AEC システム フィルター (Aec.sys) は、ソフトウェアで音響エコー キャンセル (AEC) アルゴリズムとノイズ抑制 (NS) アルゴリズムを実装します。 このフィルターは、Windows XP 以降の標準オペレーティング システム コンポーネントです。 DirectSoundCapture アプリケーションで AEC システム フィルターの使用を有効にする方法については、Microsoft Windows SDK のドキュメントを参照してください。

AEC システム フィルターによって課される制約

AEC システム フィルターに実装されているキャプチャ効果を組み込んだオーディオ フィルター グラフには、次の制限があります。

  • AEC システム フィルターは、PCM データ形式を処理するピンにのみ接続できます。

  • ビット深度は、キャプチャ ストリームの場合は 16 ビット、レンダー ストリームの場合は 8 ビットまたは 16 ビットである必要があります。

  • AEC システム フィルターは、16 kHz ですべての内部処理を実行します。 入力ストリームと出力ストリームは、必要に応じてソース レートで変換されます。

  • Windows XP SP1、Windows Server 2003 以降では、AEC システム フィルターのキャプチャ アウト ピンとレンダリングイン ピン (次の図を参照) は同じサンプル レートである必要がありますが、キャプチャイン ピンとレンダリングアウト ピンのサンプル レートは、他のピンとは別に選択できます。 キャプチャイン ピンのサンプル レートは、(優先順に) 16 kHz、48 kHz、44.1 kHz、または 8 kHz にすることができます。 (優先順序は、処理時間とオーディオ品質に基づきます)。レンダリングアウト ピンのサンプル レートは、(優先順に) 16 kHz、48 kHz、または 44.1 kHz にすることができます。 レンダリングアウト ピンは、8 kHz のサンプル レートをサポートしないことに注意してください。

AEC システム フィルターのピンと接続を示す図。

  • AEC ノードと NS ノード ( 「Hardware-Accelerated キャプチャ効果の公開」の図を参照) は、モノフォニック ストリームのみを処理できます。 キャプチャ ストリームがマルチチャネル (2 チャンネル ステレオなど) の場合、最初のチャンネル以外のすべてのチャネルは無視され、破棄されます。 レンダリング側で処理できるのは、モノフォニック ストリームのみです。

  • Windows XP SP1、Windows Server 2003 以降では、この制限は存在しません。 AEC システム フィルターは、キャプチャ ストリームとレンダー ストリームのクロック間の不一致を正しく処理し、キャプチャとレンダリングに個別のデバイスを使用できます。

  • AEC システム フィルターを使用すると、 SysAudio システム ドライバー は、混合、サンプル レート変換、3D 空間化などのハードウェア アクセラレーションをオフにします。 ストリームのすべての混合は、 KMixer システム ドライバーによってソフトウェア エミュレーションで行われます。 この制限は、レンダリング デバイスによって再生されるすべてのオーディオが、AEC システム フィルターによってキャプチャ ストリームから取り消されるようにするために必要です。

  • グラフのキャプチャ側の AEC ノードまたは NS ノードの前、またはレンダリング側の AEC ノードまたは NS ノードの後に実行される信号処理は、線形時間不変である必要があります。 これらの場所のいずれかで非線形または時間変化の信号処理を実行すると、AEC がキャプチャ信号のエコーをキャンセルできなくなります。

  • AEC フィルタリングは、コンピューター内の AEC でフィルター処理されたチャネルからのエコーのみを取り消します。 AEC を通過しないチャネルを介して出力されるオーディオはエコーキャンセルされません。 AEC 以外のオーディオ チャネルのエコーは、コンピューターの横にあるオフィスのラジオで再生されているオーディオのエコーと機能的に同等です。 AEC には、無線または非 AEC チャネルからのエコーを取り消す (および影響を及ぼす) 方法はありません。

上記の要件は、Aec.sysに実装されているキャプチャ効果を組み込むすべてのカーネル ストリーミング オーディオ フィルター グラフに適用されます。 これらの制限は、AEC システム フィルターの設計と実装に関する基本的な前提を反映しています。 ストリーム形式の制約は、将来のバージョンの Windows で変更される可能性があります。

AEC システム フィルターを使用する製品設計では、上記の制約を考慮する必要があります。 次の質問と回答は、これらの制約が AEC フィルタリング動作にどのように影響するかを示しています。

Q: ステレオ レンダリング用の DirectSound バッファーを作成しましたが、AEC を使用している場合は両方のチャンネルが同じように聞こえます。 なぜですか?

A: AEC はモノラル ストリームでのみ機能するため、KMixer はこの制約を満たすためにステレオ ストリームをモノラルに戻します。

Q: AEC を使用すると、44 kHz の 16 ビット オーディオが 16 kHz のように聞こえるのはなぜですか。

A: AEC システム フィルターは 16 kHz ですべての内部処理を実行するためです。

Q: AEC を使用してハードウェアアクセラレータの DirectSound バッファーを取得できないのはなぜですか?

A: AEC が有効になっていると、SysAudio によってハードウェアアクセラレータによるミキシングがオフになるためです。

Q: AEC システム フィルターは、古いサウンド ブラスター 16 カードで動作しますか?

A: はい。 Sound Blaster16 カードは 16 ビットのレンダリングとキャプチャ ストリームを同時に管理することはできませんが、8 ビット レンダリング ストリームと 16 ビット キャプチャ ストリームを同時に管理できます。これは、AEC システム フィルターのレンダリングアウトピンとキャプチャイン ピンがサポートする組み合わせです。 新しいオーディオ カードは、レンダリングとキャプチャの両方で少なくとも 16 ビットのビット深度をサポートするように設計する必要があります。

AEC ピンのデータ形式の概要

AEC システム フィルターを有効にする DirectSound アプリケーションは、KMixer がサポートする任意のサンプル レートまたはサンプル サイズの DirectSound バッファーを選択できます。 KMixer は、AEC システム フィルターに入る前に、アプリケーションのレンダリング バッファーから 16 kHz モノラル 16 ビット形式にデータを変換します。 同様に、KMixer は、DirectSoundCapture アプリケーションのキャプチャ バッファー宛てのデータを、AEC システム フィルターを終了した後、16 kHz モノラル 16 ビット形式に変換できます。 ただし、グラフで実行される処理量を最小限に抑え、最高のオーディオ品質を実現するには、アプリケーションでレンダリング バッファーとキャプチャ バッファーの両方に 16 kHz モノラル 16 ビット形式を使用する必要があります。

オーディオ ハードウェアを AEC システム フィルターで動作させるには、ハードウェア レンダリング ピンで AEC レンダリング ピンでサポートされているサンプル レートの少なくとも 1 つをサポートする必要があります。ハードウェア キャプチャ ピンは、AEC キャプチャイン ピンでサポートされているサンプル レートのいずれかをサポートする必要があります。 最高の AEC パフォーマンスを実現するには、ハードウェアでサポートされるより高いレートに加えて、16 kHz のサンプル レートをサポートする必要があります。 16 kHz レートをサポートすることで、ハードウェアは AEC システム フィルターで行う必要がある処理量を減らし、サンプル レート変換を行う必要がなくなります。

AEC システム フィルターのレンダーイン ピンは、KMixer の出力ピンに接続します。 KMixer は、入力ストリームをレンダーイン ピンで必要な形式に変換するために必要な変換を実行します。 レンダーイン ピンは、次の 2 つのデータ形式のみをサポートします。

  • サンプル サイズが 16 ビットの 16 kHz モノラル PCM フォーマット

  • サンプル サイズが 8 ビットの 16 kHz モノラル PCM フォーマット

キャプチャアウト ピンは、次の 1 つの形式のみをサポートします。

  • サンプル サイズが 16 ビットの 16 kHz モノラル PCM フォーマット

DirectSoundCapture アプリケーションのバッファー形式が 16 kHz モノラル 16 ビット PCM の場合、AEC キャプチャアウト ピンは KMixer をバイパスし、DSound.DLLに直接接続できます (前の図を参照)。 それ以外の場合、AEC キャプチャアウト ピンは KMixer に接続し、16 kHz モノラル 16 ビット PCM ストリームをピンからアプリケーションのキャプチャ バッファーで使用される任意の形式に変換します。

AEC レンダリング アウト ピンは、次のいずれかの形式を処理できます。

  • 16 kHz 16 ビット PCM (2 チャンネル(ステレオ)

  • 2 チャンネルの 16 kHz 8 ビット PCM

  • 2 チャンネルの 48 kHz 16 ビット PCM

  • 2 チャンネルの 48 kHz 8 ビット PCM

  • 2 チャンネルの 44.1 kHz 16 ビット PCM

  • 2 チャンネルの 44.1 kHz 8 ビット PCM

レンダリングアウト ピンは、AEC ノードから出力ストリームの両方のチャネルに 1 つのチャネルをコピーすることで、ステレオ ストリームを生成します。

キャプチャイン ピンは、次のいずれかの形式を処理できます。

  • 任意の数のチャネルを持つ 16 kHz 16 ビット PCM

  • 任意の数のチャネルを持つ 48 kHz 16 ビット PCM

  • 任意の数のチャネルを持つ 44.1 kHz 16 ビット PCM

  • 任意の数のチャネルを持つ 8 kHz 16 ビット PCM

キャプチャイン ピンでは、最初のチャネルのみが使用され、他のチャネルは無視 (および破棄) されます。

AEC システム フィルターのすべてのピンは、次の表に示すデータ形式のパラメーター値を使用します。

KSDATARANGE メンバー パラメーター値

MajorFormat

KSDATAFORMAT_TYPE_AUDIO

SubFormat

KSDATAFORMAT_SUBTYPE_PCM

スペシファイア

KSDATAFORMAT_SPECIFIER_WAVEFORMATEX

MajorFormatSubFormat、および Specifier メンバーの詳細については、「KSDATARANGE」を参照してください。 これら 3 つのパラメーター値を使用する KSDATARANGE_AUDIO データ範囲記述子の例については、「 PCM Stream Data Range」を参照してください。