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

Consulte también

Audio de forma de onda

Estructuras de forma de onda