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 檔)。 請記住, 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 的這個成員。
備註
WDM 音訊驅動程式會使用DMUS_KERNEL_EVENT結構,以提供 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) |