estrutura DMUS_KERNEL_EVENT (dmusicks.h)

A estrutura DMUS_KERNEL_EVENT é usada para empacotar eventos de música com carimbo de data/hora.

Sintaxe

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;

Membros

bReserved

Os drivers de miniporte não devem modificar esse membro. Reservado para uso futuro. Não use.

cbStruct

Os drivers de miniporte não devem modificar esse membro. Esse membro especifica o tamanho da própria estrutura DMUS_KERNEL_EVENT e pode mudar no futuro.

cbEvent

Especifica o número não descoberto de bytes de evento referenciados por uData.

usChannelGroup

Especifica qual grupo de canais (conjunto de 16 canais MIDI) recebe ou originou esse evento. Isso é exclusivo somente dentro do dispositivo MIDI de destino (driver de miniporte).

usFlags

Especifica se um evento é um pacote e se esse evento conclui a mensagem. Um pacote encapsula uma lista de eventos que devem ser tratados atomicamente. Esse membro é um campo de bits que pode ser definido como OR bit a bit de um ou mais dos seguintes bits de sinalizador:

DMUS_KEF_EVENT_COMPLETE (zero)

Especifica mensagens nas quais toda a mensagem está contida em uData.abData ou no buffer apontado por uData.pbData. O primeiro inclui todas as mensagens curtas e, potencialmente, inclui mensagens SysEx muito breves (consulte SDK do Microsoft Windows documentação) também. Tenha em mente que sizeof (PBYTE) pode ser 8 em vez de 4 em versões de 64 bits do Windows.

DMUS_KEF_EVENT_INCOMPLETE

Especifica que esse evento é um pacote incompleto ou uma mensagem SysEx (consulte a documentação do SDK do Windows). Esse sinalizador especifica que a mensagem continua além desse evento. Durante a captura MIDI, o driver de miniporto pode enviar eventos MIDI "uncooked" (dados de entrada MIDI brutos) para o coletor de captura especificando esse sinalizador.

DMUS_KEF_PACKAGE_EVENT

Especifica que esse evento é um pacote. O campo uData.pPackageEvt contém um ponteiro para uma cadeia de eventos que deve ser tratada atomicamente.

ullPresTime100ns

Especifica a hora da apresentação para esse evento. Esse valor de 64 bits é expresso em unidades de 100 nanossegundos. O relógio master deve ser usado para avaliar esse horário de apresentação.

ullBytePosition

8 16

pNextEvt

Ponteiro para o próximo evento na lista ou NULL se nenhum evento for seguido. Isso facilita a passagem de cadeias de mensagens com carimbo de data/hora idênticas para o driver de miniport. Além disso, o hardware que faz sua própria combinação pode receber ou transmitir grupos de mensagens ao mesmo tempo.

uData

uData.abData[sizeof(PBYTE)]

Uma matriz de bytes que contém bytes cbEvent de dados de evento. Normalmente, os dados de evento são status MIDI e bytes de dados. Esse membro de uData será usado se cbEvent for menor ou igual a sizeof(PBYTE).

uData.pbData

Ponteiro para um buffer que contém bytes cbEvent de dados de evento. Normalmente, os dados de evento são status MIDI e bytes de dados. Esse membro de uData será usado se uFlags estiver definido como DMUS_KEF_EVENT_COMPLETE e cbEvent for maior que sizeof(PBYTE).

uData.pPackageEvt

Ponteiro para uma cadeia de eventos, que está na forma de uma lista vinculada de estruturas de DMUS_KERNEL_EVENT. Os dados do evento normalmente consistem em status MIDI e bytes de dados. Os eventos na lista devem ser tratados juntos. Esse membro de uData será usado se uFlags estiver definido como DMUS_KEF_PACKAGE_EVENT.

Comentários

A estrutura DMUS_KERNEL_EVENT é usada por drivers de áudio WDM que fornecem suporte de streaming de kernel para DirectMusic.

Ao capturar um fluxo MIDI, o driver de porta DMus chama o método IAllocatorMXF::GetMessage para recuperar estruturas de DMUS_KERNEL_EVENT para manter os dados capturados. Ao renderizar um fluxo MIDI, o driver de porta chama o método IMXF::P utMessage para descartar estruturas de DMUS_KERNEL_EVENT conforme termina de lê-las. Para obter mais informações, consulte Transporte MIDI.

No caso da captura MIDI, a estrutura de DMUS_KERNEL_EVENT pode ser empacotada com mensagens MIDI simples, múltiplas ou fragmentárias. O membro usFlags deve ser definido como DMUS_KEF_EVENT_INCOMPLETE a menos que seja uma única mensagem MIDI completa. Essa estrutura também contém:

  • Um carimbo de data/hora relativo ao relógio master (ullPresTime100Ns)
  • Informações de canal estendido (usChannelGroup)
O mapeamento para o instrumento DLS correto está implícito no trigêmeo de

<pin, channel_group, canal>

O tempo de apresentação não avança durante os estados KSSTATE_PAUSE e KSSTATE_STOP e é redefinido durante KSSTATE_STOP. Para obter mais informações, consulte Relógios KS.

Requisitos

Requisito Valor
Cabeçalho dmusicks.h (inclua Dmusicks.h)

Confira também

IAllocatorMXF::GetMessage

IMXF::P utMessage