Estructura WAVEFORMATEX (mmreg.h)

La estructura WAVEFORMATEX especifica el formato de datos de una secuencia de audio de onda.

Sintaxis

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

Members

wFormatTag

Especifica el tipo de formato de audio de forma de onda. Para obtener más información, vea la sección Comentarios que se muestra más adelante.

nChannels

Especifica el número de canales de datos de audio. Para audio monofónico, establezca este miembro en 1. En estéreo, establezca este miembro en 2.

nSamplesPerSec

Especifica la frecuencia de muestra a la que se debe reproducir o grabar cada canal. Si wFormatTag = WAVE_FORMAT_PCM, los valores comunes de nSamplesPerSec son de 8,0 kHz, 11,025 kHz, 22,05 kHz y 44,1 kHz. Por ejemplo, para especificar una frecuencia de muestra de 11,025 kHz, establezca nSamplesPerSec en 11025. En el caso de los formatos que no son PCM, este miembro debe calcularse según la especificación del fabricante de la etiqueta de formato.

nAvgBytesPerSec

Especifica la velocidad media de transferencia de datos necesaria en bytes por segundo. Este valor es útil para calcular el tamaño del búfer.

nBlockAlign

Especifica la alineación de bloques en bytes. La alineación del bloque es el tamaño de la unidad atómica mínima de datos para el tipo de formato wFormatTag . Si wFormatTag = WAVE_FORMAT_PCM o wFormatTag = WAVE_FORMAT_IEEE_FLOAT, establezca nBlockAlign(nChannels*wBitsPerSample)/8en , que es el tamaño de un único fotograma de audio. En el caso de los formatos que no son PCM, este miembro debe calcularse según la especificación del fabricante para la etiqueta de formato.

El software de reproducción y grabación debe procesar varios bytes de datos nBlockAlign a la vez. Los datos escritos en un dispositivo y leídos siempre deben comenzar al principio de un bloque.

wBitsPerSample

Especifica el número de bits por muestra para el tipo de formato especificado por wFormatTag. Si wFormatTag = WAVE_FORMAT_PCM, wBitsPerSample debe establecerse en 8 o 16. Si wFormatTag = WAVE_FORMAT_IEEE_FLOAT, wBitsPerSample debe establecerse en 32. En el caso de los formatos que no son PCM, establezca el valor de este miembro según la especificación del fabricante para la etiqueta de formato. Algunos esquemas de compresión no pueden definir un valor para wBitsPerSample. En este caso, establezca wBitsPerSample en cero.

cbSize

Especifica el tamaño, en bytes, de información de formato adicional anexada al final de la estructura WAVEFORMATEX. Estos formatos no PCM pueden usar esta información para almacenar atributos adicionales para wFormatTag. Si wFormatTag no requiere información adicional, establezca este miembro en cero. Para WAVE_FORMAT_PCM formatos, los clientes deben omitir este miembro (su valor es implícitamente cero). Dado que es posible que todos los clientes no sigan esta regla, se recomienda inicializar cbSize en cero para los formatos de WAVE_FORMAT_PCM.

Comentarios

La estructura WAVEFORMATEX solo puede describir un subconjunto de los formatos que puede describir la estructura WAVEFORMATEXTENSIBLE . Por ejemplo, WAVEFORMATEX puede describir secuencias moduladas de código de pulso estéreo (PCM) mono o (dos canales) con valores de ejemplo enteros de 8 o 16 bits, o con valores de ejemplo de punto flotante de 32 bits. Además, WAVEFORMATEX puede describir formatos no PCM populares como AC-3 y WMA Pro.

WAVEFORMATEX puede describir de forma inequívoca los formatos PCM mono o estéreo para los que el número de bits válidos por muestra es el mismo que el tamaño del contenedor de muestra. Para describir un formato PCM con más de dos canales, se requiere WAVEFORMATEXTENSIBLE, que tiene una máscara de canal para especificar la configuración del altavoz (es decir, la asignación de canales a las posiciones del hablante físico). Para describir un formato PCM para el que el número de bits válidos por muestra es menor que el tamaño del contenedor de muestra (por ejemplo, una muestra de 20 bits almacenada en un contenedor de tres bytes) requiere WAVEFORMATEXTENSIBLE, que especifica el número de bits de ejemplo válidos y el tamaño del contenedor de muestra.

WAVEFORMATEX puede describir formatos que no son PCM para los que las etiquetas de formato de 16 bits se definen en el archivo de encabezado Mmreg.h (por ejemplo, WAVE_FORMAT_MPEG). El miembro wFormatTag de WAVEFORMATEX contiene la etiqueta de formato. Especifique un formato que no sea PCM para el que una etiqueta de formato no esté definida en Mmreg.h por una estructura WAVEFORMATEXTENSIBLE, que contiene un GUID que identifica el formato. Si es necesario, un proveedor de hardware puede generar de forma independiente un valor GUID para identificar un nuevo formato. El registro del GUID con Microsoft no es necesario.

Para obtener más información sobre las diferencias entre WAVEFORMATEX y WAVEFORMATEXTENSIBLE, vea Descriptores de Wave-Format extensibles.

El miembro wFormatTag se establece en una de las etiquetas de formato de onda definidas en Mmreg.h. Las etiquetas de algunos de los formatos noproprietary más comunes se enumeran en la tabla siguiente.

wFormatTag Value Significado
WAVE_FORMAT_PCM Datos PCM (modulados en código de pulso) en formato entero.
WAVE_FORMAT_IEEE_FLOAT Datos de PCM en formato de punto flotante IEEE.
WAVE_FORMAT_DRM Formato codificado en DRM (para contenido de audio digital protegido por Microsoft Digital Rights Management).
WAVE_FORMAT_EXTENSIBLE Estructura WAVEFORMATEX extensible (consulte WAVEFORMATEXTENSIBLE).
WAVE_FORMAT_ALAW Formato codificado por ley.
WAVE_FORMAT_MULAW Formato codificado en mu-law.
WAVE_FORMAT_ADPCM Datos de ADPCM (modulado con código de pulso diferencial adaptable).
WAVE_FORMAT_MPEG Formato de datos MPEG-1 (la secuencia se ajusta a la especificación de audio ISO 11172-3).
WAVE_FORMAT_DOLBY_AC3_SPDIF AC-3 (también conocido como Dolby Digital) sobre S/PDIF.
WAVE_FORMAT_WMASPDIF Windows Media Audio (WMA) Pro a través de S/PDIF.
 

Consulte Mmreg.h para obtener la lista completa de formatos WAVE_FORMAT_Xxx .

WAVEFORMATEX es casi idéntico a la estructura PCMWAVEFORMAT, que es una estructura obsoleta utilizada para especificar formatos PCM. La única diferencia es que WAVEFORMATEX contiene un miembro cbSize y PCMWAVEFORMAT no. Por convención, cbSize debe omitirse cuando wFormatTag = WAVE_FORMAT_PCM (porque cbSize es implícitamente cero). Esta convención permite que el software del controlador trate las estructuras WAVEFORMATEX y PCMWAVEFORMAT de forma idéntica en el caso de un formato PCM. Para obtener más información sobre PCMWAVEFORMAT, consulte la documentación de Microsoft Windows SDK.

Si wFormatTag = WAVE_FORMAT_PCM o wFormatTag = WAVE_FORMAT_IEEE_FLOAT, establezca cbSize en cero. Para todos los demás valores de wFormatTag, cbSize especifica cuántos bytes de datos de formato adicionales se anexan a la estructura WAVEFORMATEX.

Si wFormatTag = WAVE_FORMAT_EXTENSIBLE, establezca cbSize en sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX) más el tamaño de los datos específicos del formato que se anexan a la estructura WAVEFORMATEXTENSIBLE.

Requisitos

   
Encabezado mmreg.h (incluya Mmsystem.h, Mmreg.h, Mmsystem.h)

Consulte también

WAVEFORMATEXTENSIBLE