共用方式為


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 檔)。 請記住, 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)
對應至正確的 DLS 檢測在 的三重中是隱含的

< pinchannel_group通道>

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

需求

要求 價值
標題 dmusicks.h (包括 Dmusicks.h)

另請參閱

IAllocatorMXF::GetMessage

IMXF::P utMessage