Freigeben über


DMUS_KERNEL_EVENT Struktur (dmusicks.h)

Die DMUS_KERNEL_EVENT-Struktur wird verwendet, um Zeitstempel-Musikereignisse zu verpacken.

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;

Angehörige

bReserved

Miniporttreiber sollten dieses Mitglied nicht ändern. Reserviert für die zukünftige Verwendung. Nicht verwenden.

cbStruct

Miniporttreiber sollten dieses Mitglied nicht ändern. Dieses Element gibt die Größe der DMUS_KERNEL_EVENT Struktur selbst an und kann sich in Zukunft ändern.

cbEvent

Gibt die nicht abgerundete 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 stammt. 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 schließt. Ein Paket kapselt eine Liste von Ereignissen, die atomisch behandelt werden sollen. Dieses Element ist ein Bitfeld, das auf das bitweise ODER 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. Der frühere umfasst alle Kurznachrichten und möglicherweise auch sehr kurze SysEx-Nachrichten (siehe Microsoft Windows SDK-Dokumentation). Beachten Sie, dass Größe von(PBYTE) 8 anstelle von 4 unter 64-Bit-Versionen von Windows 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 Kennzeichen gibt an, dass die Nachricht über dieses Ereignis hinausgeht. Während der MIDI-Aufnahme kann der Miniporttreiber "uncooked" 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 uData.pPackageEvt Feld enthält einen Zeiger auf eine Kette von Ereignissen, die atomisch behandelt werden sollen.

ullPresTime100ns

Gibt die Präsentationszeit für dieses Ereignis an. Dieser 64-Bit-Wert wird in 100-Nanosekundeneinheiten ausgedrückt. Die Masteruhr sollte verwendet werden, um diese Präsentationszeit auszuwerten.

ullBytePosition

8 16

pNextEvt

Zeigen Sie auf das nächste Ereignis in der Liste, oder NULL-, wenn kein Ereignis folgt. Dies erleichtert das Übergeben von Ketten mit identisch zeitstempelten Nachrichten an den Miniporttreiber. Darüber hinaus kann Hardware, die eine eigene Mischung durchführt, Gruppen von Nachrichten 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. Dieses Element von uData- wird verwendet, wenn cbEvent- kleiner oder gleich Größe von(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 festgelegt ist und cbEvent- größer als Größe von(PBYTE) ist.

uData.pPackageEvt

Zeiger auf eine Ereigniskette, die sich in Form einer verknüpften Liste von DMUS_KERNEL_EVENT Strukturen befindet. Die Ereignisdaten bestehen in der Regel aus MIDI-Status und Datenbytes. Die Ereignisse in der Liste sollen zusammen behandelt werden. Dieses Element von uData- wird verwendet, wenn uFlags- auf DMUS_KEF_PACKAGE_EVENT festgelegt ist.

Bemerkungen

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, um die erfassten Daten aufzunehmen. Beim Rendern eines MIDI-Datenstroms ruft der Porttreiber die IMXF::P utMessage- Methode auf, um DMUS_KERNEL_EVENT Strukturen zu verwerfen, sobald das Lesen beendet ist. Weitere Informationen finden Sie unter MIDI Transport.

Im Falle der MIDI-Aufnahme kann die DMUS_KERNEL_EVENT Struktur mit einzelnen, mehreren oder fragmentären MIDI-Nachrichten verpackt werden. Die usFlags Mitglied 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 auch Folgendes:

  • Zeitstempel relativ zur Masteruhr (ullPresTime100Ns)
  • Erweiterte Kanalinformationen (usChannelGroup)
Zuordnung zum richtigen DLS-Instrument ist im Triplet von

< , channel_group, Kanal>

Die Präsentationszeit wird während der KSSTATE_PAUSE und KSSTATE_STOP nicht vorangestellt und wird während KSSTATE_STOP zurückgesetzt. Weitere Informationen finden Sie unter KS Clocks.

Anforderungen

Anforderung Wert
Header- dmusicks.h (include Dmusicks.h)

Siehe auch

IAllocatorMXF::GetMessage

IMXF::P utMessage-