DMUS_KERNEL_EVENT-Struktur (dmusicks.h)
Die DMUS_KERNEL_EVENT-Struktur wird verwendet, um Zeitstempel-Musikereignisse zu packen.
Syntax
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;
Member
bReserved
Miniport-Treiber sollten dieses Element nicht ändern. Für die zukünftige Verwendung reserviert. Nicht verwenden.
cbStruct
Miniport-Treiber sollten dieses Element nicht ändern. Dieses Element gibt die Größe der DMUS_KERNEL_EVENT-Struktur selbst an und kann sich in Zukunft ändern.
cbEvent
Gibt die ungerundete Anzahl von Ereignisbytes an, auf die von uData verwiesen wird.
usChannelGroup
Gibt an, welche Kanalgruppe (Gruppe von 16 MIDI-Kanälen) dieses Ereignis empfängt oder ursprünglich hat. Dies ist nur innerhalb des ZIEL-MIDI-Geräts (Miniporttreiber) eindeutig.
usFlags
Gibt an, ob ein Ereignis ein Paket ist und ob dieses Ereignis die Nachricht beendet. Ein Paket kapselt eine Liste von Ereignissen, die atomar behandelt werden sollen. Dieses Element ist ein Bitfeld, das auf das bitweise OR eines oder mehrerer der folgenden Flagbits festgelegt werden kann:
DMUS_KEF_EVENT_COMPLETE (null)
Gibt Nachrichten an, in denen die gesamte Nachricht entweder in uData.abData oder im Puffer enthalten ist, auf den uData.pbData verweist. Erstere enthält alle Kurznachrichten und möglicherweise auch sehr kurze SysEx-Nachrichten (siehe Microsoft Windows SDK Dokumentation). Beachten Sie, dass sizeof (PBYTE) in 64-Bit-Versionen von Windows 8 statt 4 sein kann.
DMUS_KEF_EVENT_INCOMPLETE
Gibt an, dass es sich bei diesem Ereignis um ein unvollständiges Paket oder eine sysEx-Nachricht handelt (siehe Windows SDK-Dokumentation). Dieses Flag gibt an, dass die Nachricht über dieses Ereignis hinaus fortgesetzt wird. Während der MIDI-Aufnahme kann der Miniporttreiber "ungecookte" MIDI-Ereignisse (unformatierte MIDI-Eingabedaten) an die Aufnahmesenke senden, indem er dieses Flag angibt.
DMUS_KEF_PACKAGE_EVENT
Gibt an, dass es sich bei diesem Ereignis um ein Paket handelt. Das Feld uData.pPackageEvt enthält einen Zeiger auf eine Kette von Ereignissen, die atomar behandelt werden sollen.
ullPresTime100ns
Gibt die Präsentationszeit für dieses Ereignis an. Dieser 64-Bit-Wert wird in 100-Nanosekundeneinheiten ausgedrückt. Die master Uhr sollte verwendet werden, um diese Präsentationszeit auszuwerten.
ullBytePosition
8 16
pNextEvt
Zeiger auf das nächste Ereignis in der Liste oder NULL , wenn kein Ereignis folgt. Dies erleichtert das Übergeben von Ketten identisch zeitgeprägter Nachrichten an den Miniporttreiber. Darüber hinaus kann Hardware, die eine eigene Mischung durchführt, Nachrichtengruppen gleichzeitig empfangen oder übertragen.
uData
uData.abData[sizeof(PBYTE)]
Ein Bytearray, das cbEvent-Bytes von Ereignisdaten enthält. Die Ereignisdaten sind in der Regel MIDI-status und Datenbytes. Dieser Member von uData wird verwendet, wenn cbEvent kleiner oder gleich sizeof(PBYTE) ist.
uData.pbData
Zeiger auf einen Puffer, der cbEvent-Bytes von Ereignisdaten enthält. Die Ereignisdaten sind in der Regel MIDI-status und Datenbytes. Dieses Element von uData wird verwendet, wenn uFlags auf DMUS_KEF_EVENT_COMPLETE und cbEvent größer als sizeof(PBYTE) ist.
uData.pPackageEvt
Zeiger auf eine Kette von Ereignissen, die in Form einer verknüpften Liste von DMUS_KERNEL_EVENT Strukturen vorliegt. Die Ereignisdaten bestehen in der Regel aus MIDI-status und Datenbytes. Die Ereignisse in der Liste müssen gemeinsam behandelt werden. Dieses Element von uData wird verwendet, wenn uFlags auf DMUS_KEF_PACKAGE_EVENT festgelegt ist.
Hinweise
Die DMUS_KERNEL_EVENT-Struktur wird von WDM-Audiotreibern verwendet, die Kernelstreamingunterstützung für DirectMusic bereitstellen.
Beim Erfassen eines MIDI-Streams ruft der DMus-Porttreiber die IAllocatorMXF::GetMessage-Methode auf, um DMUS_KERNEL_EVENT Strukturen abzurufen, die die erfassten Daten enthalten. Beim Rendern eines MIDI-Datenstroms ruft der Porttreiber die IMXF::P utMessage-Methode auf, um DMUS_KERNEL_EVENT Strukturen zu verwerfen, sobald er sie gelesen hat. Weitere Informationen finden Sie unter MIDI-Transport.
Bei der MIDI-Aufnahme kann die DMUS_KERNEL_EVENT Struktur mit einzelnen, mehreren oder fragmentären MIDI-Nachrichten verpackt werden. Das usFlags-Element sollte auf DMUS_KEF_EVENT_INCOMPLETE festgelegt werden, es sei denn, es handelt sich um eine einzelne vollständige MIDI-Nachricht. Diese Struktur enthält außerdem Folgendes:
- Ein Zeitstempel relativ zur master Uhr (ullPresTime100Ns)
- Erweiterte Kanalinformationen (usChannelGroup)
<Anheften, channel_group, Kanal>
Die Präsentationszeit wird während der Zustände KSSTATE_PAUSE und KSSTATE_STOP nicht vorangestellt und wird während der KSSTATE_STOP zurückgesetzt. Weitere Informationen finden Sie unter KS-Uhren.
Anforderungen
Anforderung | Wert |
---|---|
Header | dmusicks.h (einschließlich Dmusicks.h) |