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)
<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) |