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.abDatauData.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)
對應至正確的 DLS 檢測在 的三倍中是隱含的

<針腳channel_group通道>

簡報時間不會在狀態KSSTATE_PAUSE和KSSTATE_STOP期間前進,而且會在KSSTATE_STOP期間重設。 如需詳細資訊,請參閱 KS 時鐘

規格需求

需求
標頭 dmusicks.h (包含 Dmusicks.h)

另請參閱

IAllocatorMXF::GetMessage

IMXF::P utMessage