次の方法で共有


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 では、(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 に設定され、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)
正しい DLS インストルメントへのマッピングは、次のトリプレットで暗黙的に行われます。

< ピンchannel_groupチャンネル>

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

必要条件

要件 価値
ヘッダー dmusicks.h (Dmusicks.h を含む)

関連項目

IAllocatorMXF::GetMessage

IMXF::P utMessage