シンセサイザー ミニポート ドライバーの概要
DirectMusic のサポートにはシンセとシンクの両方が必要です。 それぞれのデフォルトの実装は、DirectMusic で提供されます。 ユーザーモードの Microsoft ソフトウェア シンセサイザーがデフォルトのシンセとして提供され、DirectSound がデフォルトのウェーブ シンクです。 これらは完全なハードウェア エミュレーションを提供しますが、通常はカーネル モード ソフトウェアまたはハードウェア実装を使用してさらなるパフォーマンスの向上を実現できます。
ハードウェアのサポートを実装している場合、唯一の選択肢はカーネル モード ドライバーを作成することです。 カーネル モードでは、ウェーブ シンクは PortCls の DMus ポート ドライバーによって提供され、カスタム実装のために置き換える必要はありません (ユーザー モードで行われることもあります)。
カーネル モードの DirectMusic ドライバーの場合、最も重要なヘッダー ファイルは dmusicks.h です。 これには、ミニポート ドライバーを実装するために必要な主要なカーネル モード インターフェイスが含まれています。 これらのインターフェイスは次のとおりです。
これらのインターフェイスの最後の 3 つは PortCls.sys に実装されています。
その他の 2 つの重要なヘッダー ファイルは、DirectMusic プロパティ項目を含む dmusprop.h と、メイン IRP 構造 DMUS_EVENTHEADER を含む dmusbuff.h です。
次の図は、IHV アダプター ドライバーと残りの DirectMusic システムの関係を示しています。
最上位レベルでは、ドライバーは DirectMusic ポート ドライバー (IDirectMusicPort インターフェイス インスタンス) を介して公開されます。 これは、アプリケーションが DirectMusic と通信する方法です。 このポート ドライバーは、DeviceIoControl 関数 (Microsoft Windows SDK ドキュメントを参照) を介して、標準のカーネル ストリーミング呼び出しを介してピン インスタンスに下向きに通信します。
上の図では、「ポート」という用語に 2 つの相反する意味があることに注意してください。 上記のユーザー モードでの DirectMusic API によるポートという用語の使用法と、カーネル モードの DMus ポート ドライバーを混同しないようにしてください。 これらの用語は、2 つの文脈では似ていますが、わずかに異なる意味を持ちます。 特に、図の上部にある IDirectMusicPort インターフェイスは、DMus ポート ドライバーが図の下半分に実装する単一のピン インスタンスの抽象化を示していることに注意してください。
各ミニポート ドライバー オブジェクトは、対応するポート ドライバー オブジェクトに接続されます。 ポート ドライバー オブジェクトは、ミニポート ドライバーに基本サービスを提供します。 デバイスの 1 つの開いたインスタンスにマップされる各ピン インスタンスには、形式変換、シーケンス処理、「スルー処理」などのサービスがあります (スルー処理の説明については、Windows SDK ドキュメントの IDirectMusicThru インターフェイスの説明を参照してください)。 ピンはターゲットまたはソースになることができ、複数のデータ形式と範囲をサポートできます。 各ピン インスタンスはターゲットまたはソースを指定し、サポートされるデータ形式と範囲を指定します。
ミニポート ドライバー オブジェクトは、IHV のアダプター ドライバーによって作成されます。 ドライバーのオープン インスタンスごとに 1 つのピン インスタンスとシーケンサーがありますが、ハードウェア (または読み込まれたカーネル ソフトウェア シンセサイザー) ごとにポートとミニポートのドライバーのペアは 1 つだけあります。 ミニポート ドライバーとの通信は、ミニポート ドライバーに渡されるイベント ストリームを通じて、またミニポート ドライバーによってサポートされるプロパティ項目によって行われます。
DirectMusic ミニポート ドライバー インターフェイス セクションでは、DirectMusic ミニポート ドライバーの実装の詳細を示します。