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) sizeof 可以是 8,而不是 64 位版本的 Windows 上的 4。
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 小於或等於 (PBYTE) ,則會使用此 uData 成員。
uData.pbData
包含事件數據 cbEvent 位元組的緩衝區指標。 事件數據通常是MIDI狀態和數據位元組。 如果 uFlags 設定為 DMUS_KEF_EVENT_COMPLETE,且 cbEvent 大於 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 Transport。
在MIDI擷取的情況下,DMUS_KERNEL_EVENT結構可以封裝成單一、多個或片段MIDI訊息。 除非是單一完整的MIDI訊息, 否則usFlags 成員應該設定為 DMUS_KEF_EVENT_INCOMPLETE。 此結構也包含:
- 相對於主時鐘的時間戳, (ullPresTime100Ns)
- 擴充信道資訊 (usChannelGroup)
<針腳、 channel_group、 通道>
簡報時間不會在狀態KSSTATE_PAUSE和KSSTATE_STOP期間前進,而且會在KSSTATE_STOP期間重設。 如需詳細資訊,請參閱 KS 時鐘。
規格需求
需求 | 值 |
---|---|
標頭 | dmusicks.h (包含 Dmusicks.h) |