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

指定事件是否为包,以及此事件是否结束消息。 包封装应以原子方式处理的事件列表。 此成员是可设置为以下一个或多个标志位的按位 OR 的位字段:

DMUS_KEF_EVENT_COMPLETE (零)

指定整个消息包含在 uData.abDatauData.pbData 指向的缓冲区中的消息。 前者包括所有短消息,并可能包含非常简短的 SysEx 消息(请参阅 windows SDK 文档Microsoft)。 请记住, sizeof(PBYTE)可以是 8,而不是 4 在 64 位版本的 Windows 上。

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 状态和数据字节。 如果 cbEvent 小于或等于 sizeof(PBYTE),则使用 uData 的此成员。

uData.pbData

指向包含 事件数据的 cbEvent 字节的缓冲区的指针。 事件数据通常是 MIDI 状态和数据字节。 如果将 uFlags 设置为 DMUS_KEF_EVENT_COMPLETE,cbEvent 大于 sizeof(PBYTE),则使用此 uData 成员。

uData.pPackageEvt

指向事件链的指针,该链采用DMUS_KERNEL_EVENT结构链接列表的形式。 事件数据通常由 MIDI 状态和数据字节组成。 列表中的事件将一起处理。 如果 uFlags 设置为DMUS_KEF_PACKAGE_EVENT,则使用此 uData 成员。

注解

DMUS_KERNEL_EVENT结构由 WDM 音频驱动程序使用,这些驱动程序为 DirectMusic 提供内核流式处理支持。

捕获 MIDI 流时,DMus 端口驱动程序调用 IAllocatorMXF::GetMessage 方法来检索DMUS_KERNEL_EVENT结构来保存捕获的数据。 在呈现 MIDI 流时,端口驱动程序调用 IMXF::P utMessage 方法,以在读取它们后放弃DMUS_KERNEL_EVENT结构。 有关详细信息,请参阅 MIDI 传输

对于 MIDI 捕获,DMUS_KERNEL_EVENT结构可以打包为单个、多个或碎片 MIDI 消息。 除非它是单个完整的 MIDI 消息,否则 usFlags 成员应设置为DMUS_KEF_EVENT_INCOMPLETE。 此结构还包含:

  • 相对于主时钟的时间戳(ullPresTime100N)
  • 扩展通道信息 (usChannelGroup)
映射到正确的 DLS 检测在三重中是隐式的

< pinchannel_group通道>

演示时间不会在状态KSSTATE_PAUSE和KSSTATE_STOP期间提前,并在KSSTATE_STOP期间重置。 有关详细信息,请参阅 KS 时钟

要求

要求 价值
标头 dmusicks.h (包括 Dmusicks.h)

另请参阅

IAllocatorMXF::GetMessage

IMXF::P utMessage