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) (扩展频道信息
<pin、 channel_group、 channel>
在状态KSSTATE_PAUSE和KSSTATE_STOP期间,演示时间不会提前,并在KSSTATE_STOP期间重置。 有关详细信息,请参阅 KS 时钟。
要求
要求 | 值 |
---|---|
Header | dmusicks.h (包括 Dmusicks.h) |