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)
Die Zuordnung zum richtigen DLS-Instrument ist implizit im Triplet von

<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)

Weitere Informationen

IAllocatorMXF::GetMessage

IMXF::P utMessage