Estrutura KSMUSICFORMAT (ksmedia.h)

A estrutura KSMUSICFORMAT é usada para enviar e receber informações sobre dados MIDI que são entrada e saída para dispositivos de áudio WDM.

Sintaxe

typedef struct {
  ULONG TimeDeltaMs;
  ULONG ByteCount;
} KSMUSICFORMAT, *PKSMUSICFORMAT;

Membros

TimeDeltaMs

Indica quando essa série de bytes de dados MIDI deve ser tocada. Se esta for a primeira estrutura KSMUSICFORMAT no buffer, esse campo representará o delta (alteração de tempo, em milissegundos) do PresentationTime na estrutura KSSTREAM_HEADER . Caso contrário, o campo representa o deslocamento delta (em milissegundos) da mensagem anterior (estrutura KSMUSICFORMAT). Se esse tempo estiver no passado, a mensagem será tocada imediatamente.

ByteCount

Especifica o número de bytes de dados que seguem essa estrutura. Como a estrutura ou as propriedades subsequentes devem ser alinhadas com DWORD e podem permitir espaços em branco extras ou bytes usados, ByteCount deve ser o número real de bytes presentes e não incluir nenhum preenchimento que separa as estruturas de dados.

Comentários

Essa estrutura é usada para enviar e receber IRPs contendo informações sobre fluxos de entrada e saída MIDI. O próprio IRP contém em seu campo SystemBuffer um ponteiro para uma estrutura KSSTREAM_HEADER, que serve como um header para um pacote de dados que deve ser lido ou gravado em um pino de driver de streaming. O header de fluxo KS contém em seu campo Dados um ponteiro para o buffer que contém os dados. Os dados nesse buffer consistem em uma sequência de mensagens, cada uma das quais é uma estrutura KSMUSICFORMAT que é seguida imediatamente por algum número de bytes de dados.

Os carimbos de data/hora nesses IRPs sempre aumentam em IRPs emitidos sucessivamente. No entanto, como cada IRP em uma sequência é totalmente atendido antes do início da manutenção do próximo IRP, o tempo também deve sempre aumentar entre IRPs. Isso pode levar a uma situação anômala, conforme descrito no exemplo a seguir.

Ação Descrição
IRP nº 1 PresentationTime = 123 milissegundos
Mensagem nº 1 TimeDeltaMs: 0 Será tocada em 123 milissegundos.
Mensagem nº 2 TimeDeltaMs: 1 Será tocada em 124 milissegundos.
Mensagem nº 3 TimeDeltaMs: 7 Será tocada em 131 milissegundos.
IRP nº 2 PresentationTime = 120 milissegundos
Mensagem nº 1 TimeDeltaMs: 5 Deveria ser tocada em 125 milissegundos, mas na verdade é tocada em 131 milissegundos. Esse IRP não é processado até que o IRP anterior em 131 milissegundos seja finalizados.
Mensagem nº 2 TimeDeltaMs: 15 Será tocada em 140 milissegundos.

Requisitos

   
Cabeçalho ksmedia.h (incluir Ksmedia.h)

Confira também

KSSTREAM_HEADER