カーネル ストリーミング トポロジからオーディオ ミキサー API への変換
ミキサー API は、オーディオミキサー デバイスに関する情報を取得するために使用される Windows マルチメディア関数のセットです。 ミキサー API は、オーディオミキサー ラインをソース ラインと宛先ラインとして分類します。 ソース ラインは、オーディオ カード (CD、マイク、ラインイン、ウェーブなど) への入力です。 宛先ラインは、カードからの出力です (スピーカー、ヘッドフォン、電話回線、ウェーブインなど)。 ソース ラインを有効にするには、ソースから宛先への一意のパスが必要です。 1 つのソース ラインが複数の宛先にマップされる場合がありますが、ソース ラインを宛先ラインに接続できるパスは 1 つ以下です。 ミキサー API の詳細については、Microsoft Windows SDK ドキュメントをご覧ください。
オーディオ アダプターの WDM ドライバーは、ハードウェアとそれらのパスで使用できる関数を通じてデータ パスを表す KS フィルター トポロジを公開します。 WDMAud システム ドライバー (Wdmaud.sys および Wdmaud.drv ファイル内) では、KS フィルター トポロジを解釈し、ミキサー API を介して公開される対応するソースと宛先のミキサー ラインを生成する必要があります。 WDMAud は、ミキサー API 呼び出しも処理し、アダプター ドライバーによって管理されるフィルター ピンとノードの同等のプロパティ呼び出しに変換します。
KMixer システム ドライバー (Kmixer.sys) と SWMidi システム ドライバー (Swmidi.sys) は、カーネル オーディオ スタックの不可欠なコンポーネントです。 KMixer は、PCM オーディオ ストリーム用のシステム全体のオーディオ ミキシング、ビット深度変換、サンプル レート変換、チャネルからスピーカーへの構成 (スーパーミックス) 変換を提供します。 SWMidi は、MIDI ストリームの高品質なソフトウェア合成を提供します。 システム オーディオ ドライバー SysAudio (Sysaudio.sys: SysAudio システム ドライバーを参照) は、KMixer と SWMidi の機能とインストールされているオーディオ アダプター ドライバーを組み合わせて、機能的に強化された仮想オーディオ デバイスを形成します。
WDMAud は、オーディオ スタックの KS 部分とレガシ (WinMM システム コンポーネントを参照) 部分の間のインターフェイスを管理します。 WDMAud は、SysAudio 仮想化フィルターのピンを、SndVol32 などのアプリケーションに表示される従来のミキサー ラインに変換します。 KS トポロジからミキサー ラインへの変換は、次のように実行されます。
KS トポロジのソース ピン (KSPIN_DATAFLOW_OUT) は、宛先ミキサー ライン (MIXERLINE_COMPONENTTYPE_DST_XXX) として公開されます。
KS トポロジのシンク ピン (KSPIN_DATAFLOW_IN) は、ソース ミキサー ライン (MIXERLINE_COMPONENTTYPE_SRC_XXX) として公開されます。
WDMAud は、フィルター グラフの終点にあるソース ピンから始まる KS フィルター グラフをウォークし、シンク ピンに到達するまでデータ フローとは反対の方向にグラフを走査します。
走査中に検出された各 KS ノードでサポートされているプロパティは、ソース ミキサー ライン上のコントロールとして公開されます。
上記の最初の 2 項目では、KS ソース ピンとシンク ピンを宛先ラインとソース ミキサー ラインにマッピングすると、用語の違いにより混乱する可能性があります。 KS では、デバイスはシンク (入力) ピンとソース (出力) ピンを持つフィルターにラップされます。 "シンク" と "ソース" という用語は、フィルターではなく、2 つのフィルター間の (通常はバッファーに格納される) 接続を指します。
アップストリーム フィルターのソース ピンは、接続に入るデータ ストリームのソースです。
データ ストリームは、ダウンストリーム フィルターのシンク ピンを介して接続を終了します。
これに対し、ミキサーラインの用語はデバイス中心です。
ソース ミキサー ラインは、デバイスに入るストリームのソースです。
宛先ミキサー ラインは、デバイスを終了するストリームの宛先です。
また、KS の用語は、KS フィルターのピンに割り当てるストリームフローの方向にやや一貫性がありません。 ピン記述子は、KSPIN_DATAFLOW 列挙値を使用して方向を指定します。
シンク ピンを介してフィルターに入るストリームには、KSPIN_DATAFLOW_IN の方向があります。
ソース ピンを介してフィルターを終了するストリームには、KSPIN_DATAFLOW_OUT の方向があります。
"イン" と "アウト" の方向は明確にフィルター中心であり、"シンク" と "ソース" という用語は接続中心です。
WDMAud で使用されるトポロジ解析アルゴリズムの詳細については、「WDMAud トポロジ解析」をご覧ください。
このセクションには以下も含まれます。