次の方法で共有


トポロジ ミニポート ドライバー

トポロジ ミニポート ドライバーは、オーディオ アダプターのミキサー回路内のさまざまなハードウェア コントロール (ボリュームやミュートなど) を管理します。 このドライバーは、ミキサー トポロジ内のノードとしてコントロールを列挙し、クライアントがノード間の相互接続を検出し、各ノードでコントロール パラメーターをクエリおよび設定できるようにします。

SysAudio システム ドライバーは、オーディオ フィルター グラフを構築するときにアダプターのトポロジを調べます。 ミキサー API (Microsoft Windows SDK ドキュメントの Windows マルチメディア セクションで説明されています) は、トポロジ ノードをミキサー ライン コントロールとして表し、それらを SndVol32 などのユーザー モード アプリケーションに公開します。 詳細情報は、SysTray および SndVol32を参照してください。

トポロジ ミニポート ドライバーは、ポート ドライバーがミニポート ドライバーを初期化するために使用するトポロジー ミニポート インターフェイスを実装する必要があります。 ミニポート インターフェイスIMiniportTopology は、IMiniport インターフェイスのメソッドを継承します。追加のメソッドは提供されません。 オーディオ アダプター ドライバーは、ミニポート オブジェクトの IMiniportTopology インターフェイスをポート オブジェクトの IPortTopology インターフェイスにバインドすることによって、トポロジ フィルターを形成します。

通常、トポロジ フィルタはアダプタのトポロジ ノードの大部分を包含しますが、アダプタ内の他のデバイスには追加のトポロジ ノードが含まれる場合があります。 たとえば、波形フィルターとして表される波形デバイスには、DAC (KSNODETYPE_DAC) ノードと ADC (KSNODETYPE_ADC) ノードが含まれる場合があります。

トポロジ ノードの制御パラメータのクエリと設定は、プロパティ リクエストを通じて実行されます。 各ノード タイプは、特定のプロパティまたはプロパティのセットに関連付けられます。 ノードは 1 つの制御値のみをサポートする場合があります。 たとえば、ボリューム ノード (KSNODETYPE_VOLUME) には、現在のボリューム設定を示す値があります。 他のノードは複数の制御値をサポートする場合があります。 たとえば、3D ノード (KSNODETYPE_3D_EFFECTS) は、多数の 3D バッファーおよび 3D リスナー プロパティをサポートします。 一方、合計ノード (KSNODETYPE_SUM) には制御値がありません。

トポロジ ミニポート ドライバーは、接続記述子 (PCCONNECTION_DESCRIPTOR) を使用して、2 つのトポロジ ノード間の接続を記述します。 各接続は方向指定されており、送信元ノードと送信先ノードの両方を指定します。 ノードには複数のピンがあり、1 つのピンによって実行される機能が他のピンの機能とは異なる場合があります。 あるピンを別のピンと区別するために、ミニポート ドライバーはノード上のピンに番号を付けます。 これらのピン番号は接続記述子に表示されます。 たとえば、状態変数フィルターには 3 つの出力ピン (高周波数、中周波数、低周波数に 1 つずつ) があり、1、2、3 という番号が付けられている場合があります。 ピンの番号付けにより、ミニポート ドライバーのクライアントは、どの接続がどのピンに関連付けられているかを判断できます。

接続記述子は、識別ノード識別子PCFILTER_NODE を使用して、フィルター上のピンとフィルター内のノード上のピンを区別します。 オーディオ アダプター内のオーディオ レンダリングおよびキャプチャ デバイスへのミキサー回路の各配線接続は、トポロジ フィルター上のピンとして表されます。 他のトポロジ フィルター ピンは、アダプター カードのライン出力ジャックなどの外部物理接続を表します。 トポロジ フィルターのピンは、アダプター ハードウェアの物理的な配線接続を表します。 したがって、ピンは接続が確立されるかどうかを明示的に制御できず、その接続上のデータ フローを管理するために使用することもできません。

単一の接続記述子で、トポロジ内の任意の 2 つのピン タイプ間の接続を記述することができます。 接続の両側のピンは、両方ともフィルタ上のピンまたはフィルタ内のノード上のピンにすることも、接続の一方の側にフィルタ ピンを持ち、もう一方の側にノード ピンを持つこともできます。 ミニポート ドライバーは、そのトポロジを接続記述子の配列として指定します。 1 つのピンに複数の接続を持つことができます。これは、同じピンが配列内の複数の接続記述子に現れる可能性があることを意味します。

クライアントがミニポート ドライバーから取得するトポロジ記述は、クライアントにとって未知のノード タイプを解釈する方法の無制限の検出をサポートするように設計されていません。 ノードのピン番号付けだけでは、ピンの機能を発見するために必要な情報をクライアントに提供することはできません。 ミニポート ドライバーは (GUID によって) ノードのタイプを識別しますが、ノード タイプまたはノード タイプでサポートされるピンを記述するための標準化されたパラメーターのリストは提供しません。

たとえば、クライアントが自身を識別するためにノード タイプ GUID KSNODETYPE_VOLUME を使用するノードを列挙する場合、クライアントは、ボリューム ノードを処理するための規則を知っている場合にのみ、そのノードを利用できます。 慣例により、たとえば、ボリューム ノードは KSPROPERTY_AUDIO_VOLUMELEVEL プロパティをサポートし、ノード ピン番号 0 と 1 を出力 (ソース) ピンと入力 (シンク) ピンにそれぞれ割り当てます。 さらに、ボリューム ノードを制御できるクライアントは通常、探索を比較的少数のノード タイプ (ボリューム ノードやミュート ノードなど) に限定する指定検索を実行します。 クライアントは通常、ボリューム ノード (ミキサー ラインなど) を含む可能性のあるフィルター グラフの部分のみを探索します。

ミニポート インターフェイスは、ミニポート ドライバーからポート ドライバーへの未承諾の制御値変更の配信をサポートします。 この機能は、ユーザーが物理的に操作できるコントロール ノブ、スライダー、またはスイッチを備えたデバイスに対応します。 ユーザーがノードの制御値を変更するたびに、ハードウェア割り込みによって、ハードウェア イベントが発生したことがポート ドライバーに通知されます。