DMUS_KERNEL_EVENT structure (dmusicks.h)

La structure DMUS_KERNEL_EVENT est utilisée pour empaqueter des événements de musique horodatés.

Syntaxe

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;

Membres

bReserved

Les pilotes miniport ne doivent pas modifier ce membre. Réservé pour un usage futur. Ne pas utiliser.

cbStruct

Les pilotes miniport ne doivent pas modifier ce membre. Ce membre spécifie la taille de la structure DMUS_KERNEL_EVENT elle-même et peut changer à l’avenir.

cbEvent

Spécifie le nombre non arrondi d’octets d’événement référencés par uData.

usChannelGroup

Spécifie le groupe de canaux (ensemble de 16 canaux MIDI) qui reçoit ou provient de cet événement. Ceci est unique uniquement dans le périphérique MIDI cible (pilote miniport).

usFlags

Spécifie si un événement est un package et si cet événement termine le message. Un package encapsule une liste d’événements qui doivent être traités atomiquement. Ce membre est un champ de bits qui peut être défini sur ou au niveau du bit d’un ou plusieurs des bits d’indicateur suivants :

DMUS_KEF_EVENT_COMPLETE (zéro)

Spécifie les messages dans lesquels le message entier est contenu dans uData.abData ou dans la mémoire tampon pointée par uData.pbData. Le premier inclut tous les messages courts et potentiellement des messages SysEx très brefs (voir Microsoft Windows SDK documentation) ainsi. Gardez à l’esprit que sizeof(PBYTE) peut être 8 au lieu de 4 sur les versions 64 bits de Windows.

DMUS_KEF_EVENT_INCOMPLETE

Spécifie que cet événement est un package incomplet ou un message SysEx (voir la documentation du KIT DE DÉVELOPPEMENT LOGICIEL Windows). Cet indicateur spécifie que le message continue au-delà de cet événement. Pendant la capture MIDI, le pilote miniport peut envoyer des événements MIDI « non cuits » (données d’entrée MIDI brutes) au récepteur de capture en spécifiant cet indicateur.

DMUS_KEF_PACKAGE_EVENT

Spécifie que cet événement est un package. Le champ uData.pPackageEvt contient un pointeur vers une chaîne d’événements qui doivent être traités atomiquement.

ullPresTime100ns

Spécifie l’heure de présentation de cet événement. Cette valeur 64 bits est exprimée en unités de 100 nanosecondes. L’horloge master doit être utilisée pour évaluer cette heure de présentation.

ullBytePosition

8 16

pNextEvt

Pointeur vers l’événement suivant dans la liste ou NULL si aucun événement ne suit. Cela facilite la transmission de chaînes de messages horodatés identiques au pilote du miniport. En outre, le matériel qui effectue son propre mélange peut recevoir ou transmettre des groupes de messages à la fois.

uData

uData.abData[sizeof(PBYTE)]

Tableau d’octets contenant des octets cbEvent de données d’événement. Les données d’événement sont généralement des status midi et des octets de données. Ce membre d’uData est utilisé si cbEvent est inférieur ou égal à sizeof(PBYTE).

uData.pbData

Pointeur vers une mémoire tampon contenant des octets cbEvent de données d’événement. Les données d’événement sont généralement des status midi et des octets de données. Ce membre de uData est utilisé si uFlags est défini sur DMUS_KEF_EVENT_COMPLETE et que cbEvent est supérieur à sizeof(PBYTE).

uData.pPackageEvt

Pointeur vers une chaîne d’événements, qui se présente sous la forme d’une liste liée de structures DMUS_KERNEL_EVENT. Les données d’événement se composent généralement de status MIDI et d’octets de données. Les événements de la liste doivent être gérés ensemble. Ce membre d’uData est utilisé si uFlags est défini sur DMUS_KEF_PACKAGE_EVENT.

Remarques

La structure DMUS_KERNEL_EVENT est utilisée par les pilotes audio WDM qui prennent en charge la diffusion en continu du noyau pour DirectMusic.

Lors de la capture d’un flux MIDI, le pilote de port DMus appelle la méthode IAllocatorMXF ::GetMessage pour récupérer DMUS_KERNEL_EVENT structures pour contenir les données capturées. Lors du rendu d’un flux MIDI, le pilote de port appelle la méthode IMXF ::P utMessage pour ignorer DMUS_KERNEL_EVENT structures à mesure qu’elle termine leur lecture. Pour plus d’informations, consultez Transport MIDI.

Dans le cas de la capture MIDI, la structure DMUS_KERNEL_EVENT peut être empaquetée avec des messages MIDI uniques, multiples ou fragmentaires. Le membre usFlags doit être défini sur DMUS_KEF_EVENT_INCOMPLETE, sauf s’il s’agit d’un seul message MIDI complet. Cette structure contient également :

  • Horodatage relatif à l’horloge master (ullPresTime100N)
  • Informations de canal étendu (usChannelGroup)
Le mappage à l’instrument DLS correct est implicite dans le triplet de

<broche, channel_group, canal>

Le temps de présentation n’avance pas pendant les états KSSTATE_PAUSE et KSSTATE_STOP, et est réinitialisé pendant KSSTATE_STOP. Pour plus d’informations, consultez Horloges KS.

Configuration requise

Condition requise Valeur
En-tête dmusicks.h (inclure Dmusicks.h)

Voir aussi

IAllocatorMXF ::GetMessage

IMXF ::P utMessage