Estructura WAVEFORMATEXTENSIBLE (mmreg.h)
[La característica asociada a esta página, DirectShow, es una característica heredada. Se ha reemplazado por MediaPlayer, IMFMediaEngine y Captura de audio/vídeo en Media Foundation. Esas características se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use MediaPlayer, IMFMediaEngine y Audio/Video Capture en Media Foundation en lugar de DirectShow, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.
La estructura WAVEFORMATEXTENSIBLE define el formato de los datos de audio de forma de onda para los formatos que tienen más de dos canales o resoluciones de ejemplo superiores a las permitidas por WAVEFORMATEX. También se puede usar para definir cualquier formato que pueda definir WAVEFORMATEX.
Sintaxis
typedef struct {
WAVEFORMATEX Format;
union {
WORD wValidBitsPerSample;
WORD wSamplesPerBlock;
WORD wReserved;
} Samples;
DWORD dwChannelMask;
GUID SubFormat;
} WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE;
Miembros
Format
Estructura WAVEFORMATEX que especifica el formato básico. El miembro wFormatTag debe ser WAVE_FORMAT_EXTENSIBLE. El miembro cbSize debe ser de al menos 22.
Samples
Unión que describe el formato de ejemplo.
Samples.wValidBitsPerSample
Número de bits de precisión en la señal. Normalmente es igual a WAVEFORMATEX.wBitsPerSample. Sin embargo, wBitsPerSample es el tamaño del contenedor y debe ser un múltiplo de 8, mientras que wValidBitsPerSample puede ser cualquier valor que no supere el tamaño del contenedor. Por ejemplo, si el formato usa muestras de 20 bits, wBitsPerSample debe ser de al menos 24, pero wValidBitsPerSample es de 20.
Samples.wSamplesPerBlock
Número de muestras contenidas en un bloque comprimido de datos de audio. Este valor se usa en la estimación del búfer. Este valor se usa con formatos comprimidos que tienen un número fijo de muestras dentro de cada bloque. Este valor se puede establecer en 0 si se incluye un número variable de muestras en cada bloque de datos de audio comprimidos. En este caso, la información de estimación y posición del búfer debe obtenerse de otras maneras.
Samples.wReserved
Reservado para uso interno por sistema operativo. Establecer en 0.
dwChannelMask
Máscara de bits que especifica la asignación de canales en la secuencia a las posiciones del hablante.
SubFormat
Subformato de los datos, como KSDATAFORMAT_SUBTYPE_PCM. La información del subformato es similar a la proporcionada por la etiqueta en el miembro wFormatTag de la estructura WAVEFORMATEX.
Observaciones
WAVEFORMATEXTENSIBLE puede describir cualquier formato que pueda ser descrito por WAVEFORMATEX, pero proporciona compatibilidad adicional para más de dos canales, para una mayor precisión en el número de bits por muestra y para nuevos esquemas de compresión.
WAVEFORMATEXTENSIBLE se puede convertir de forma segura en WAVEFORMATEX, ya que simplemente configura los bytes adicionales especificados por WAVEFORMATEX.cbSize.
El miembro dwChannelMask especifica qué canales están presentes en la secuencia multicanal. El bit menos significativo corresponde con el altavoz izquierdo delantero, el siguiente bit menos significativo corresponde al altavoz frontal derecho, etc. Los bits, en orden de importancia, se definen de la siguiente manera.
Posición del hablante | Bit de marca |
---|---|
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 |
Los canales especificados en dwChannelMask deben estar presentes en el orden prescrito (de bits menos significativo). Por ejemplo, si solo se especifican SPEAKER_FRONT_LEFT y SPEAKER_FRONT_RIGHT, las muestras del altavoz frontal izquierdo deben aparecer primero en la secuencia intercalada. El número de bits establecido en dwChannelMask debe ser el mismo que el número de canales especificados en WAVEFORMATEX.nChannels.
Para la compatibilidad con versiones anteriores, cualquier formato de onda que se pueda especificar mediante una estructura WAVEFORMATEX independiente también se puede definir mediante una estructura WAVEFORMATEXTENSIBLE . Por lo tanto, cada etiqueta de formato de onda en mmreg.h tiene un GUID subformato correspondiente. En la tabla siguiente se muestran algunas etiquetas de formato de onda típicas y sus GUID de subformato correspondientes. Estos GUID se definen en Ksmedia.h.
etiqueta Wave-Format | GUID de subformato |
---|---|
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 |
Dado que WAVEFORMATEXTENSIBLE es una versión extendida de WAVEFORMATEX, puede describir formatos adicionales que no se pueden describir solo con WAVEFORMATEX . Los proveedores pueden definir sus propios GUID de SubFormat para identificar los formatos propietarios para los que no existen etiquetas de formato de onda.
Las siguientes estructuras, para determinados formatos extendidos, se definen como WAVEFORMATEXTENSIBLE.
Definición | Valor de SubFormat |
---|---|
WAVEFORMATIEEEFLOATEX | KSDATAFORMAT_SUBTYPE_IEEE_FLOAT |
WAVEFORMATPCMEX | KSDATAFORMAT_SUBTYPE_PCM |
Requisitos
Cliente mínimo compatible | Windows XP [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows Server 2003 [solo aplicaciones de escritorio] |
Encabezado | mmreg.h |