次の方法で共有


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 のサンプル レートをサポートしないことに注意してください。

Diagram illustrating an AEC system filter's pins and connections.

  • AEC と NS ノード (ハードウェア 高速化キャプチャ効果の図を参照) は、モノラル ストリームのみを処理できます。 キャプチャ ストリームがマルチチャネル (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 システム フィルターは、以前の Sound Blaster 16 カードで動作しますか。

A:はい。 Sound Blaster16 カードでは、16 ビットのレンダリング ストリームとキャプチャ ストリームを同時に管理することはできませんが、AEC システム フィルターのレンダリングアウト ピンとキャプチャイン ピンでサポートされる組み合わせである 8 ビット のレンダリング ストリームと 16 ビット キャプチャ ストリームを同時に管理できます。 新しいオーディオ カードは、レンダリングとキャプチャの両方で少なくとも 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 形式

  • サンプル サイズが 16 ビットの 8 kHz モノラル PCM 形式

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

  • サンプル サイズが 16 ビットの 16 kHz モノラル PCM 形式

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

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

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

  • 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 ストリーム データ範囲」を参照してください。