Estrutura WAVEFORMATEXTENSIBLE (mmreg.h)

[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]

A estrutura WAVEFORMATEXTENSIBLE define o formato de dados de áudio de forma de onda para formatos com mais de dois canais ou resoluções de exemplo mais altas do que o permitido por WAVEFORMATEX. Ele também pode ser usado para definir qualquer formato que possa ser definido por WAVEFORMATEX.

Sintaxe

typedef struct {
  WAVEFORMATEX Format;
  union {
    WORD wValidBitsPerSample;
    WORD wSamplesPerBlock;
    WORD wReserved;
  } Samples;
  DWORD        dwChannelMask;
  GUID         SubFormat;
} WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE;

Membros

Format

Estrutura WAVEFORMATEX que especifica o formato básico. O membro wFormatTag deve ser WAVE_FORMAT_EXTENSIBLE. O membro cbSize deve ter pelo menos 22.

Samples

Uma união que descreve o formato de exemplo.

Samples.wValidBitsPerSample

Número de bits de precisão no sinal. Normalmente igual a WAVEFORMATEX.wBitsPerSample. No entanto, wBitsPerSample é o tamanho do contêiner e deve ser um múltiplo de 8, enquanto wValidBitsPerSample pode ser qualquer valor que não exceda o tamanho do contêiner. Por exemplo, se o formato usar amostras de 20 bits, wBitsPerSample deverá ter pelo menos 24, mas wValidBitsPerSample será 20.

Samples.wSamplesPerBlock

Número de amostras contidas em um bloco compactado de dados de áudio. Esse valor é usado na estimativa de buffer. Esse valor é usado com formatos compactados que têm um número fixo de amostras em cada bloco. Esse valor poderá ser definido como 0 se um número variável de amostras estiver contido em cada bloco de dados de áudio compactados. Nesse caso, as informações de estimativa e posição do buffer precisam ser obtidas de outras maneiras.

Samples.wReserved

Reservado para uso interno pelo sistema operacional. Defina como 0.

dwChannelMask

Bitmask especificando a atribuição de canais no fluxo para posições de alto-falante.

SubFormat

Subformatação dos dados, como KSDATAFORMAT_SUBTYPE_PCM. As informações de subformatação são semelhantes às fornecidas pela marca no membro wFormatTag da estrutura WAVEFORMATEX.

Comentários

WAVEFORMATEXTENSIBLE pode descrever qualquer formato que possa ser descrito por WAVEFORMATEX, mas fornece suporte adicional para mais de dois canais, para maior precisão no número de bits por amostra e para novos esquemas de compactação.

WAVEFORMATEXTENSIBLE pode ser convertido com segurança em WAVEFORMATEX, pois ele simplesmente configura os bytes extras especificados por WAVEFORMATEX.cbSize.

O membro dwChannelMask especifica quais canais estão presentes no fluxo multicanal. O bit menos significativo corresponde ao alto-falante esquerdo frontal, o próximo bit menos significativo corresponde ao alto-falante frontal direito e assim por diante. Os bits, em ordem de significância, são definidos da seguinte maneira.

Posição do alto-falante Bit de sinalizador
SPEAKER_FRONT_LEFT 0x1
SPEAKER_FRONT_RIGHT 0x2
SPEAKER_FRONT_CENTER 0x4
SPEAKER_LOW_FREQUENCY 0x8
SPEAKER_BACK_LEFT 0x10
SPEAKER_BACK_RIGHT 0x20
SPEAKER_FRONT_LEFT_OF_CENTER 0x40
SPEAKER_FRONT_RIGHT_OF_CENTER 0x80
SPEAKER_BACK_CENTER 0x100
SPEAKER_SIDE_LEFT 0x200
SPEAKER_SIDE_RIGHT 0x400
SPEAKER_TOP_CENTER 0x800
SPEAKER_TOP_FRONT_LEFT 0x1000
SPEAKER_TOP_FRONT_CENTER 0x2000
SPEAKER_TOP_FRONT_RIGHT 0x4000
SPEAKER_TOP_BACK_LEFT 0x8000
SPEAKER_TOP_BACK_CENTER 0x10000
SPEAKER_TOP_BACK_RIGHT 0x20000
 

Os canais especificados em dwChannelMask devem estar presentes na ordem prescrita (de bits menos significativos para cima). Por exemplo, se apenas SPEAKER_FRONT_LEFT e SPEAKER_FRONT_RIGHT forem especificados, os exemplos do alto-falante frontal esquerdo deverão vir primeiro no fluxo intercalado. O número de bits definido em dwChannelMask deve ser o mesmo que o número de canais especificado em WAVEFORMATEX.nChannels.

Para compatibilidade com versões anteriores, qualquer formato de onda que possa ser especificado por uma estrutura WAVEFORMATEX autônoma também pode ser definido por uma estrutura WAVEFORMATEXTENSIBLE . Portanto, cada marca de formato de onda em mmreg.h tem um GUID subformatação correspondente. A tabela a seguir mostra algumas marcas típicas de formato de onda e seus GUIDs subformatação correspondentes. Esses GUIDs são definidos em Ksmedia.h.

Marca Wave-Format GUID de SubFormatação
WAVE_FORMAT_PCM KSDATAFORMAT_SUBTYPE_PCM
WAVE_FORMAT_IEEE_FLOAT KSDATAFORMAT_SUBTYPE_IEEE_FLOAT
WAVE_FORMAT_DRM KSDATAFORMAT_SUBTYPE_DRM
WAVE_FORMAT_ALAW KSDATAFORMAT_SUBTYPE_ALAW
WAVE_FORMAT_MULAW KSDATAFORMAT_SUBTYPE_MULAW
WAVE_FORMAT_ADPCM KSDATAFORMAT_SUBTYPE_ADPCM
 

Como WAVEFORMATEXTENSIBLE é uma versão estendida de WAVEFORMATEX, ele pode descrever formatos adicionais que não podem ser descritos apenas por WAVEFORMATEX . Os fornecedores são livres para definir seus próprios GUIDs de SubFormatação para identificar formatos proprietários para os quais não existem marcas de formato de onda.

As estruturas a seguir, para formatos estendidos específicos, são definidas como WAVEFORMATEXTENSIBLE.

Definição Valor de SubFormat
WAVEFORMATIEEEFLOATEX KSDATAFORMAT_SUBTYPE_IEEE_FLOAT
WAVEFORMATPCMEX KSDATAFORMAT_SUBTYPE_PCM

Requisitos

   
Cliente mínimo com suporte Windows XP [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2003 [somente aplicativos da área de trabalho]
Cabeçalho mmreg.h

Confira também

Áudio de forma de onda

Estruturas de forma de onda