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 |