次の方法で共有


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 のメンバーは、cbEventsizeof(PBYTE) 以下の場合に使用されます。

uData.pbData

cbEvent バイトのイベント データを含むバッファーへのポインター。 イベント データは通常、MIDI ステータスとデータ バイトです。 uData のこのメンバーは、uFlags が DMUS_KEF_EVENT_COMPLETE に設定され、cbEventsizeof(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)
正しい DLS インストルメントへのマッピングは、 のトリプレットで暗黙的に行われます。

<pinchannel_groupチャネル>

KSSTATE_PAUSE状態とKSSTATE_STOP中はプレゼンテーション時間が進まず、KSSTATE_STOP中にリセットされます。 詳細については、「 KS クロック」を参照してください。

要件

要件
Header dmusicks.h (Dmusicks.h を含む)

こちらもご覧ください

IAllocatorMXF::GetMessage

IMXF::P utMessage