次の方法で共有


DirectMusic ミニポート ドライバー インターフェイス

DMus ミニポート ドライバー インターフェイスは、MIDI ミニポート ドライバー インターフェイスに基づいていますが、高度なシンセサイザーをサポートするために次の拡張機能を追加します。

  • インスタンスあたり 16 チャンネルを超える DLS のダウンロード数

  • ハードウェアでのノート イベントのシーケンス処理

DMus ミニポート ドライバー インターフェイスは、いくつかの点で MIDI ミニポート ドライバー インターフェイスとは異なります。 DMus ミニポート ドライバーは、IMiniportMidi ではなく、IMiniportDMus インターフェイスを実装します。 このインターフェイスは IMiniportMidi に似ていますが、IMiniportDMus::NewStream メソッドが、IMiniportMidiStream インターフェイスを実装するのではなく、IMXF (MIDI 変換フィルター) インターフェイスを作成して、DMus ポート ドライバーの IAllocatorMXF インターフェイスに接続します。 IAllocatorMXFIMXF が、標準の GetMessage 呼び出しと PutMessage 呼び出しをラップします (「IAllocatorMXF::GetMessage」と「IMXF::P utMessage」を参照)。 これらの呼び出しは、生の MIDI バイトではなく、パッケージ化されたイベントを処理します。

シンセサイザー用の DMus ミニポート ドライバーは、DirectMusic プロパティの一部またはすべてを実装することができます。 これらのプロパティを使用すると、システムでデバイスの DLS ダウンロードとチャンネル割り当てを管理することができます。 dmusprop.h ヘッダー ファイルは、DirectMusic 固有のプロパティ項目を定義します。 これらのプロパティの一覧については、「KSPROPSETID_Synth」および「KSPROPSETID_Synth_Dls」を参照してください。

DMus ミニポート ドライバーは、複数のピン インスタンスの作成を許可するように想定されています。 各ピン インスタンスは 1 つの仮想シンセサイザーとして機能し、他のピン インスタンスからは独立した一連のチャンネルと DLS ダウンロードを含んでいます。

オーディオ ドライバー プロパティ セットで説明されているシンセ プロパティの中には、ピン インスタンスに作用するものもあれば、グローバルなものもあります。 グローバル プロパティを処理するには、シンセサイザーのトポロジにシンセサイザー ノードが必要です。 各プロパティ項目の説明に、その項目がシンセサイザー ノードとピン インスタンスのどちらに送信されるかが示されます。 次の図に示すように、合成をサポートするハードウェアの各部分には、ポート ドライバー オブジェクトとミニポート ドライバー オブジェクトが存在します。

Diagram illustrating the relationship between port and miniport drivers for a DirectMusic synthesizer.

ポート ドライバー オブジェクトは、ミニポート ドライバー オブジェクトによって保持されている IPortDMus インターフェイスの 1 つのインスタンスを公開します。 ミニポート ドライバーは、ポート ドライバーによって保持されている IMiniportDMus インターフェイスの 1 つのインスタンスをエクスポートします。 インスタンス化されたピンごとに、ポート ドライバーは一致する IMXF インターフェイスを要求します。 システムとこのインスタンス間の通信は、ピンにアドレス指定されたプロパティ要求と、IMXF ストリーム インターフェイスとの間で送受信されるイベントの組み合わせです。

ミニポート ドライバーが作成されたときに、次の 2 つのオブジェクトをミニポート ドライバーに渡す必要があります。

  • Clock

  • アロケーター オブジェクト

クロックは、レンダーおよびキャプチャ操作に非常に重要です。 ミニポート ドライバーは、指定された時刻にノートをレンダリングする必要があります。ミニポート ドライバーは MIDI データの読み取り時に、カーネル イベントにタイム スタンプを設定できるように、時刻を把握していなければなりません 。 詳しくは、「待機時間クロック」を参照してください。

IAllocatorMXF インターフェイスを持つ アロケーター オブジェクトは、メモリを再利用するためのメモリ プールとして使用されます。 システム内のすべての MIDI メッセージは、この共通プールから割り当てられます。 アロケーター オブジェクトは、個々のメッセージを作成または破棄するために使用する必要があります。

このセクションには、次が含まれます。

MIDI トランスポート

遅延の時計

ミニポート ドライバー プロパティの項目要求

PortDMus を既定の DirectMusic ポート ドライバーとする

ご利用のシンセサイザーをレガシ デバイスとして公開