Compartilhar via


Estrutura WAVEFORMATEX (mmreg.h)

A estrutura WAVEFORMATEX especifica o formato de dados de um fluxo de áudio de onda.

Sintaxe

typedef struct tWAVEFORMATEX {
  WORD  wFormatTag;
  WORD  nChannels;
  DWORD nSamplesPerSec;
  DWORD nAvgBytesPerSec;
  WORD  nBlockAlign;
  WORD  wBitsPerSample;
  WORD  cbSize;
} WAVEFORMATEX, *PWAVEFORMATEX, *NPWAVEFORMATEX, *LPWAVEFORMATEX;

Membros

wFormatTag

Especifica o tipo de formato de áudio waveform. Para obter mais informações, consulte a seção Comentários a seguir.

nChannels

Especifica o número de canais de dados de áudio. Para áudio monofônico, defina esse membro como 1. Para estéreo, defina esse membro como 2.

nSamplesPerSec

Especifica a frequência de exemplo na qual cada canal deve ser reproduzido ou gravado. Se wFormatTag = WAVE_FORMAT_PCM, os valores comuns para nSamplesPerSec serão de 8,0 kHz, 11,025 kHz, 22,05 kHz e 44,1 kHz. Por exemplo, para especificar uma frequência de exemplo de 11,025 kHz, defina nSamplesPerSec como 11025. Para formatos não PCM, esse membro deve ser calculado de acordo com a especificação do fabricante da marca de formato.

nAvgBytesPerSec

Especifica a taxa média de transferência de dados necessária em bytes por segundo. Esse valor é útil para estimar o tamanho do buffer.

nBlockAlign

Especifica o alinhamento do bloco em bytes. O alinhamento do bloco é o tamanho da unidade atômica mínima de dados para o tipo de formato wFormatTag . Se wFormatTag = WAVE_FORMAT_PCM ou wFormatTag = WAVE_FORMAT_IEEE_FLOAT, defina nBlockAlign como (nChannels*wBitsPerSample)/8, que é o tamanho de um único quadro de áudio. Para formatos não PCM, esse membro deve ser calculado de acordo com a especificação do fabricante para a marca de formato.

O software de reprodução e registro deve processar vários bytes de dados nBlockAlign por vez. Os dados gravados e lidos de um dispositivo sempre devem começar no início de um bloco.

wBitsPerSample

Especifica o número de bits por exemplo para o tipo de formato especificado por wFormatTag. Se wFormatTag = WAVE_FORMAT_PCM, wBitsPerSample deverá ser definido como 8 ou 16. Se wFormatTag = WAVE_FORMAT_IEEE_FLOAT, wBitsPerSample deverá ser definido como 32. Para formatos não PCM, defina o valor desse membro de acordo com a especificação do fabricante para a marca de formato. Alguns esquemas de compactação não podem definir um valor para wBitsPerSample. Nesse caso, defina wBitsPerSample como zero.

cbSize

Especifica o tamanho, em bytes, de informações de formato extra acrescentadas ao final da estrutura WAVEFORMATEX. Essas informações podem ser usadas por formatos não PCM para armazenar atributos extras para o wFormatTag. Se nenhuma informação extra for necessária pelo wFormatTag, defina esse membro como zero. Para formatos WAVE_FORMAT_PCM, os clientes devem ignorar esse membro (seu valor é implicitamente zero). Como todos os clientes podem não seguir essa regra, recomendamos que você inicialize cbSize como zero para formatos de WAVE_FORMAT_PCM.

Comentários

A estrutura WAVEFORMATEX pode descrever apenas um subconjunto dos formatos que podem ser descritos pela estrutura WAVEFORMATEXTENSIBLE . Por exemplo, WAVEFORMATEX pode descrever fluxos de pcm (código de pulso estéreo) mono ou (dois canais) com valores de exemplo inteiros de 8 bits ou 16 bits ou com valores de exemplo de ponto flutuante de 32 bits. Além disso, WAVEFORMATEX pode descrever formatos populares não PCM, como AC-3 e WMA Pro.

WAVEFORMATEX pode descrever de forma inequívoca formatos PCM mono ou estéreo para os quais o número de bits válidos por exemplo é o mesmo que o tamanho do contêiner de exemplo. Para descrever um formato PCM com mais de dois canais, é necessário WAVEFORMATEXTENSIBLE, que tem uma máscara de canal para especificar a configuração do alto-falante (ou seja, o mapeamento de canais para posições físicas do locutor). Para descrever um formato PCM para o qual o número de bits válidos por exemplo é menor que o tamanho do contêiner de exemplo (por exemplo, um exemplo de 20 bits armazenado em um contêiner de três bytes) requer WAVEFORMATEXTENSIBLE, que especifica o número de bits de exemplo válidos e o tamanho do contêiner de exemplo.

WAVEFORMATEX pode descrever formatos não PCM para os quais as marcas de formato de 16 bits são definidas no arquivo de cabeçalho Mmreg.h (por exemplo, WAVE_FORMAT_MPEG). O membro wFormatTag de WAVEFORMATEX contém a marca de formato. Especifique um formato não PCM para o qual uma marca de formato não é definida em Mmreg.h por uma estrutura WAVEFORMATEXTENSIBLE, que contém um GUID que identifica o formato. Se necessário, um fornecedor de hardware pode gerar independentemente um valor guid para identificar um novo formato. O registro do GUID com a Microsoft é desnecessário.

Para obter mais informações sobre as diferenças entre WAVEFORMATEX e WAVEFORMATEXTENSIBLE, consulte Extensible Wave-Format Descriptors.

O membro wFormatTag é definido como uma das marcas de formato de onda definidas em Mmreg.h. As marcas para alguns dos formatos nãoproprietary mais comuns são listadas na tabela a seguir.

Valor wFormatTag Significado
WAVE_FORMAT_PCM Dados PCM (modulados por código de pulso) no formato inteiro.
WAVE_FORMAT_IEEE_FLOAT Dados pcm no formato de ponto flutuante IEEE.
WAVE_FORMAT_DRM Formato codificado em DRM (para conteúdo de áudio digital protegido pelo Microsoft Digital Rights Management).
WAVE_FORMAT_EXTENSIBLE Estrutura WAVEFORMATEX extensível (consulte WAVEFORMATEXTENSIBLE).
WAVE_FORMAT_ALAW Formato codificado por lei.
WAVE_FORMAT_MULAW Formato codificado em mu-law.
WAVE_FORMAT_ADPCM Dados do ADPCM (código de pulso diferencial adaptável modulado).
WAVE_FORMAT_MPEG Formato de dados MPEG-1 (o fluxo está em conformidade com a especificação de áudio ISO 11172-3).
WAVE_FORMAT_DOLBY_AC3_SPDIF AC-3 (também conhecido como Dolby Digital) sobre S/PDIF.
WAVE_FORMAT_WMASPDIF Windows Media Audio (WMA) Pro por S/PDIF.
 

Consulte Mmreg.h para obter a lista completa de formatos WAVE_FORMAT_Xxx .

WAVEFORMATEX é quase idêntico à estrutura PCMWAVEFORMAT, que é uma estrutura obsoleta usada para especificar formatos PCM. A única diferença é que WAVEFORMATEX contém um membro cbSize e PCMWAVEFORMAT não. Por convenção, cbSize deve ser ignorado quando wFormatTag = WAVE_FORMAT_PCM (porque cbSize é implicitamente zero). Essa convenção permite que o software de driver trate as estruturas WAVEFORMATEX e PCMWAVEFORMAT de forma idêntica no caso de um formato PCM. Para obter mais informações sobre PCMWAVEFORMAT, consulte a documentação do SDK do Microsoft Windows.

Se wFormatTag = WAVE_FORMAT_PCM ou wFormatTag = WAVE_FORMAT_IEEE_FLOAT, defina cbSize como zero. Para todos os outros valores de wFormatTag, cbSize especifica quantos bytes de dados de formato adicionais são acrescentados à estrutura WAVEFORMATEX.

Se wFormatTag = WAVE_FORMAT_EXTENSIBLE, defina cbSize como sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX) mais o tamanho de qualquer dado específico de formato que seja acrescentado à estrutura WAVEFORMATEXTENSIBLE.

Requisitos

   
Cabeçalho mmreg.h (inclua Mmsystem.h, Mmreg.h, Mmsystem.h)

Confira também

WAVEFORMATEXTENSIBLE