DMUS_KERNEL_EVENT struttura (dmusicks.h)

La struttura DMUS_KERNEL_EVENT viene usata per creare eventi musicali con timestamp.

Sintassi

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;

Members

bReserved

I driver miniport non devono modificare questo membro. Riservato per utilizzi futuri. Non usare.

cbStruct

I driver miniport non devono modificare questo membro. Questo membro specifica le dimensioni della struttura DMUS_KERNEL_EVENT stessa e potrebbe cambiare in futuro.

cbEvent

Specifica il numero di byte di eventi non arrotondati a cui fa riferimento uData.

usChannelGroup

Specifica quale gruppo di canali (set di 16 canali MIDI) riceve o ha origine questo evento. Questo è univoco solo all'interno del dispositivo MIDI di destinazione (driver miniport).

usFlags

Specifica se un evento è un pacchetto e se questo evento conclude il messaggio. Un pacchetto incapsula un elenco di eventi che devono essere trattati in modo atomico. Questo membro è un campo bit che può essere impostato sull'OR bit per bit di uno o più dei bit di flag seguenti:

DMUS_KEF_EVENT_COMPLETE (zero)

Specifica i messaggi in cui l'intero messaggio è contenuto in uData.abData o nel buffer a cui punta uData.pbData. Il precedente include tutti i messaggi brevi e potenzialmente include anche messaggi SysEx molto brevi (vedere anche la documentazione di Microsoft Windows SDK). Tenere presente che sizeof(PBYTE) può essere 8 anziché 4 in versioni a 64 bit di Windows.

DMUS_KEF_EVENT_INCOMPLETE

Specifica che questo evento è un pacchetto incompleto o un messaggio SysEx (vedere la documentazione di Windows SDK). Questo flag specifica che il messaggio continua oltre questo evento. Durante l'acquisizione MIDI, il driver miniport può inviare eventi MIDI "non elaborati" (dati di input MIDI non elaborati) al sink di acquisizione specificando questo flag.

DMUS_KEF_PACKAGE_EVENT

Specifica che questo evento è un pacchetto. Il campo uData.pPackageEvt contiene un puntatore a una catena di eventi che devono essere trattati in modo atomico.

ullPresTime100ns

Specifica l'ora di presentazione per questo evento. Questo valore a 64 bit viene espresso in unità a 100 nanosecondi. L'orologio master deve essere usato per valutare l'ora di presentazione.

ullBytePosition

8 16

pNextEvt

Puntatore all'evento successivo nell'elenco o NULL se non segue alcun evento. Ciò facilita il passaggio di catene di messaggi con timestamp identici al driver miniport. Inoltre, l'hardware che esegue la propria combinazione può ricevere o trasmettere gruppi di messaggi alla volta.

uData

uData.abData[sizeof(PBYTE)]

Matrice di byte contenente i byte cbEvent dei dati dell'evento. I dati dell'evento sono in genere stati MIDI e byte di dati. Questo membro di uData viene usato se cbEvent è minore o uguale a sizeof(PBYTE).

uData.pbData

Puntatore a un buffer contenente i byte cbEvent dei dati dell'evento. I dati dell'evento sono in genere stati MIDI e byte di dati. Questo membro di uData viene usato se uFlags è impostato su DMUS_KEF_EVENT_COMPLETE e cbEvent è maggiore di sizeof(PBYTE).

uData.pPackageEvt

Puntatore a una catena di eventi, che è sotto forma di un elenco collegato di strutture DMUS_KERNEL_EVENT. I dati dell'evento in genere sono costituiti da byte di stato e dati MIDI. Gli eventi nell'elenco devono essere gestiti insieme. Questo membro di uData viene usato se uFlags è impostato su DMUS_KEF_PACKAGE_EVENT.

Commenti

La struttura DMUS_KERNEL_EVENT viene usata dai driver audio WDM che forniscono supporto di streaming kernel per DirectMusic.

Durante l'acquisizione di un flusso MIDI, il driver di porta DMus chiama il metodo IAllocatorMXF::GetMessage per recuperare le strutture DMUS_KERNEL_EVENT per contenere i dati acquisiti. Durante il rendering di un flusso MIDI, il driver di porta chiama il metodo IMXF::P utMessage per eliminare le strutture DMUS_KERNEL_EVENT al termine della lettura. Per altre informazioni, vedere Trasporto MIDI.

Nel caso dell'acquisizione MIDI, la struttura DMUS_KERNEL_EVENT può essere in pacchetto con messaggi MIDI singoli, multipli o frammentari. Il membro usFlags deve essere impostato su DMUS_KEF_EVENT_INCOMPLETE a meno che non sia un singolo messaggio MIDI completo. Questa struttura contiene anche:

  • Timestamp relativo all'orologio master (ullPresTime100Ns)
  • Informazioni sul canale estese (usChannelGroup)
Il mapping allo strumento DLS corretto è implicito nel triplo di

<pin, channel_group, canale>

Il tempo di presentazione non viene anticipato durante gli stati KSSTATE_PAUSE e KSSTATE_STOP e viene reimpostato durante KSSTATE_STOP. Per altre informazioni, vedere Orologi KS.

Requisiti

Requisito Valore
Intestazione dmusicks.h (include Dmusicks.h)

Vedi anche

IAllocatorMXF::GetMessage

IMXF::P utMessage