estructura DMUS_KERNEL_EVENT (dmusicks.h)

La estructura DMUS_KERNEL_EVENT se usa para empaquetar eventos de música con marca de tiempo.

Sintaxis

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;

Miembros

bReserved

Los controladores de minipuerto no deben modificar este miembro. Reservado para uso futuro. No debe usarse.

cbStruct

Los controladores de minipuerto no deben modificar este miembro. Este miembro especifica el tamaño de la propia estructura DMUS_KERNEL_EVENT y podría cambiar en el futuro.

cbEvent

Especifica el número no devuelto de bytes de evento a los que hace referencia uData.

usChannelGroup

Especifica qué grupo de canales (conjunto de 16 canales MIDI) recibe o origina este evento. Esto es único solo dentro del dispositivo MIDI de destino (controlador de minipuerto).

usFlags

Especifica si un evento es un paquete y si este evento concluye el mensaje. Un paquete encapsula una lista de eventos que se deben tratar de forma atómica. Este miembro es un campo de bits que se puede establecer en el or bit a bit de uno o varios de los siguientes bits de marca:

DMUS_KEF_EVENT_COMPLETE (cero)

Especifica los mensajes en los que todo el mensaje está contenido en uData.abData o en el búfer al que apunta uData.pbData. El primero incluye todos los mensajes cortos y, posiblemente, incluye mensajes SysEx muy breves (consulte también Microsoft Windows SDK documentación). Tenga en cuenta que sizeof(PBYTE) puede ser de 8 en lugar de 4 en versiones de 64 bits de Windows.

DMUS_KEF_EVENT_INCOMPLETE

Especifica que este evento es un paquete incompleto o un mensaje de SysEx (consulte la documentación de Windows SDK). Esta marca especifica que el mensaje continúa más allá de este evento. Durante la captura MIDI, el controlador de minipuerto puede enviar eventos MIDI "sin procesar" (datos de entrada MIDI sin procesar) al receptor de captura especificando esta marca.

DMUS_KEF_PACKAGE_EVENT

Especifica que este evento es un paquete. El campo uData.pPackageEvt contiene un puntero a una cadena de eventos que se deben tratar de forma atómica.

ullPresTime100ns

Especifica la hora de presentación de este evento. Este valor de 64 bits se expresa en unidades de 100 nanosegundos. El reloj maestro debe usarse para evaluar esta hora de presentación.

ullBytePosition

8 16

pNextEvt

Puntero al siguiente evento de la lista o NULL si no se sigue ningún evento. Esto facilita el paso de cadenas de mensajes con marca de tiempo idénticas al controlador de miniporte. Además, el hardware que realiza su propia mezcla puede recibir o transmitir grupos de mensajes a la vez.

uData

uData.abData[sizeof(PBYTE)]

Matriz de bytes que contiene bytes cbEvent de datos de eventos. Los datos del evento suelen ser bytes de datos y estado MIDI. Este miembro de uData se usa si cbEvent es menor o igual que sizeof(PBYTE).

uData.pbData

Puntero a un búfer que contiene bytes cbEvent de datos de eventos. Los datos del evento suelen ser bytes de datos y estado MIDI. Este miembro de uData se usa si uFlags está establecido en DMUS_KEF_EVENT_COMPLETE y cbEvent es mayor que sizeof(PBYTE).

uData.pPackageEvt

Puntero a una cadena de eventos, que está en forma de una lista vinculada de estructuras de DMUS_KERNEL_EVENT. Los datos del evento normalmente constan de bytes de datos y estado MIDI. Los eventos de la lista se controlarán conjuntamente. Este miembro de uData se usa si uFlags está establecido en DMUS_KEF_PACKAGE_EVENT.

Comentarios

Los controladores de audio WDM usan la estructura DMUS_KERNEL_EVENT que proporcionan compatibilidad de streaming de kernel para DirectMusic.

Al capturar una secuencia MIDI, el controlador de puerto DMus llama al método IAllocatorMXF::GetMessage para recuperar DMUS_KERNEL_EVENT estructuras para contener los datos capturados. Al representar una secuencia MIDI, el controlador de puerto llama al método IMXF::P utMessage para descartar DMUS_KERNEL_EVENT estructuras a medida que termina de leerlas. Para obtener más información, vea Transporte MIDI.

En el caso de la captura MIDI, la estructura DMUS_KERNEL_EVENT se puede empaquetar con mensajes MIDI únicos, múltiples o fragmentados. El miembro usFlags debe establecerse en DMUS_KEF_EVENT_INCOMPLETE a menos que sea un único mensaje MIDI completo. Esta estructura también contiene:

  • Marca de tiempo relativa al reloj maestro (ullPresTime100Ns)
  • Información de canal extendida (usChannelGroup)
La asignación al instrumento DLS correcto es implícita en el triplete de

<anclar, channel_group, canal>

El tiempo de presentación no avanza durante los estados KSSTATE_PAUSE y KSSTATE_STOP, y se restablece durante KSSTATE_STOP. Para obtener más información, vea Relojes KS.

Requisitos

Requisito Valor
Header dmusicks.h (incluye Dmusicks.h)

Consulte también

IAllocatorMXF::GetMessage

IMXF::P utMessage