DMUS_KERNEL_EVENT 構造体 (dmusicks.h)
DMUS_KERNEL_EVENT構造は、タイムスタンプ付きの音楽イベントをパッケージ化するために使用されます。
構文
typedef struct _DMUS_KERNEL_EVENT {
BYTE bReserved;
BYTE cbStruct;
USHORT cbEvent;
USHORT usChannelGroup;
USHORT usFlags;
REFERENCE_TIME ullPresTime100ns;
ULONGLONG ullBytePosition;
_DMUS_KERNEL_EVENT *pNextEvt;
union {
BYTE abData[sizeof(PBYTE)];
PBYTE pbData;
_DMUS_KERNEL_EVENT *pPackageEvt;
} uData;
} DMUS_KERNEL_EVENT, *PDMUS_KERNEL_EVENT;
メンバー
bReserved
ミニポート ドライバーは、このメンバーを変更しないでください。 将来利用するために予約されています。 使用しないでください。
cbStruct
ミニポート ドライバーは、このメンバーを変更しないでください。 このメンバーは、DMUS_KERNEL_EVENT構造体自体のサイズを指定し、将来変更される可能性があります。
cbEvent
uData によって参照されるイベント バイトのルーティングされていない数を指定します。
usChannelGroup
このイベントを受信または発生させたチャネル グループ (16 個の MIDI チャンネルのセット) を指定します。 これは、ターゲット MIDI デバイス (ミニポート ドライバー) 内でのみ一意です。
usFlags
イベントがパッケージであるかどうかを指定し、このイベントがメッセージを終了するかどうかを指定します。 パッケージは、アトミックに処理する必要があるイベントの一覧をカプセル化します。 このメンバーは、次のフラグ ビットの 1 つ以上のビットごとの OR に設定できるビットフィールドです。
DMUS_KEF_EVENT_COMPLETE (ゼロ)
メッセージ全体が uData.abData または uData.pbData によって指されるバッファーに含まれるメッセージを指定 します。 前者には短いメッセージがすべて含まれており、非常に短い SysEx メッセージが含まれる可能性があります (Microsoft Windows SDKドキュメントを参照)。 64 ビット バージョンの Windows では 、sizeof(PBYTE) は 4 ではなく 8 になることに注意してください。
DMUS_KEF_EVENT_INCOMPLETE
このイベントが不完全なパッケージまたは SysEx メッセージであることを指定します (Windows SDK のドキュメントを参照)。 このフラグは、メッセージがこのイベントを超えて継続することを指定します。 MIDI キャプチャ中、ミニポート ドライバーは、このフラグを指定することで、キャプチャ シンクに "未加工の" MIDI イベント (生の MIDI 入力データ) を送信できます。
DMUS_KEF_PACKAGE_EVENT
このイベントがパッケージであることを指定します。 uData.pPackageEvt フィールドには、アトミックに処理する必要があるイベントのチェーンへのポインターが含まれています。
ullPresTime100ns
このイベントのプレゼンテーション時間を指定します。 この 64 ビット値は、100 ナノ秒単位で表されます。 マスター クロックを使用して、このプレゼンテーション時間を評価する必要があります。
ullBytePosition
8 16
pNextEvt
リスト内の次のイベントへのポインター。後にイベントがない場合は NULL 。 これにより、同じタイムスタンプ付きメッセージのチェーンをミニポート ドライバーに渡すのが容易になります。 さらに、独自のミキシングを行うハードウェアは、一度にメッセージのグループを受信または送信できます。
uData
uData.abData[sizeof(PBYTE)]
イベント データの cbEvent バイトを含むバイト配列。 イベント データは通常、MIDI ステータスとデータ バイトです。 この uData のメンバーは、cbEvent が sizeof(PBYTE) 以下の場合に使用されます。
uData.pbData
cbEvent バイトのイベント データを含むバッファーへのポインター。 イベント データは通常、MIDI ステータスとデータ バイトです。 uData のこのメンバーは、uFlags が DMUS_KEF_EVENT_COMPLETE に設定され、cbEvent が sizeof(PBYTE) より大きい場合に使用されます。
uData.pPackageEvt
イベントのチェーンへのポインター。これは、DMUS_KERNEL_EVENT構造体のリンクされたリストの形式です。 イベント データは通常、MIDI ステータスとデータ バイトで構成されます。 リスト内のイベントは一緒に処理されます。 uFlags が DMUS_KEF_PACKAGE_EVENT に設定されている場合、uData のこのメンバーが使用されます。
注釈
DMUS_KERNEL_EVENT構造は、DirectMusic のカーネル ストリーミング サポートを提供する WDM オーディオ ドライバーによって使用されます。
MIDI ストリームのキャプチャ中、DMus ポート ドライバーは IAllocatorMXF::GetMessage メソッドを呼び出して、キャプチャされたデータを保持DMUS_KERNEL_EVENT構造体を取得します。 MIDI ストリームのレンダリング中、ポート ドライバーは IMXF::P utMessage メソッドを呼び出して、読み取りが完了したときにDMUS_KERNEL_EVENT構造体を破棄します。 詳細については、「 MIDI トランスポート」を参照してください。
MIDI キャプチャの場合、DMUS_KERNEL_EVENT構造は、単一、複数、またはフラグメント MIDI メッセージでパッケージ化できます。 usFlags メンバーは、1 つの完全な MIDI メッセージでない限り、DMUS_KEF_EVENT_INCOMPLETEに設定する必要があります。 この構造体には、次も含まれます。
- マスター クロックに対するタイム スタンプ (ullPresTime100Ns)
- 拡張チャネル情報 (usChannelGroup)
<pin、 channel_group、 チャネル>
KSSTATE_PAUSE状態とKSSTATE_STOP中はプレゼンテーション時間が進まず、KSSTATE_STOP中にリセットされます。 詳細については、「 KS クロック」を参照してください。
要件
要件 | 値 |
---|---|
Header | dmusicks.h (Dmusicks.h を含む) |