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)/8
en , 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) |