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