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.abData 中或 uData.pbData 指向的缓冲区中的消息。 前者包括所有短消息,并且可能包含非常简短的 SysEx 消息, (请参阅Microsoft Windows SDK文档) 。 请记住, (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 小于或等于 size of (PBYTE) ,则使用此 uData 成员。

uData.pbData

指向包含 事件数据的 cbEvent 字节的缓冲区的指针。 事件数据通常是 MIDI 状态和数据字节。 如果 uFlags 设置为 DMUS_KEF_EVENT_COMPLETE 且 cbEvent 大于 size of (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 消息一起打包。 usFlags 成员应设置为 DMUS_KEF_EVENT_INCOMPLETE,除非它是单个完整的 MIDI 消息。 此结构还包含:

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

<pinchannel_groupchannel>

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

要求

要求
Header dmusicks.h (包括 Dmusicks.h)

另请参阅

IAllocatorMXF::GetMessage

IMXF::P utMessage