Descriptores de Wave-Format extensibles

En la ilustración siguiente se muestra el descriptor de formato de datos de una secuencia de audio de onda.

Diagrama que ilustra un descriptor de formato de onda para una secuencia de audio.

Como se indica en la ilustración, la cantidad de información de formato adicional que sigue a la estructura KSDATAFORMAT varía en función del formato de datos.

Los sistemas de audio usan este tipo de descriptor de formato de varias maneras:

  • Un descriptor de formato como el que se muestra en la ilustración anterior se pasa como un parámetro de llamada al método NewStream del controlador de miniport (por ejemplo, vea IMiniportWaveCíclica::NewStream).

  • El parámetro ResultantFormat del método IMiniport::D ataRangeIntersection apunta a un búfer en el que el método escribe un descriptor de formato como el que se muestra en la ilustración anterior.

  • El KSPROPERTY_PIN_DATAINTERSECTION solicitud get-property recupera un descriptor de formato como el que se muestra en la ilustración anterior.

  • El KSPROPERTY_PIN_PROPOSEDATAFORMAT solicitud set-property acepta un descriptor de formato como el que se muestra en la ilustración anterior.

  • Se usa un formato similar para el parámetro de llamada Connect de la función KsCreatePin. Este parámetro apunta a la estructura KSPIN_CONNECT al principio de un búfer que también contiene un descriptor de formato. El descriptor de formato, que sigue inmediatamente a la estructura de KSPIN_CONNECT, comienza con una estructura KSDATAFORMAT como la que se muestra en la ilustración anterior.

La información de formato que sigue a la estructura KSDATAFORMAT debe ser una estructura WAVEFORMATEXTENSIBLE . WAVEFORMATEXTENSIBLE es una versión extendida de WAVEFORMATEX que puede describir una gama más amplia de formatos que WAVEFORMATEX.

WAVEFORMAT está obsoleto y no es compatible con el subsistema de audio WDM en ninguna versión de Microsoft Windows. La estructura PCMWAVEFORMAT es una versión extendida de WAVEFORMAT que también está obsoleta.

Las cuatro estructuras de formato de onda--WAVEFORMAT, PCMWAVEFORMAT, WAVEFORMATEX y WAVEFORMATEXTENSIBLE- comienzan con los mismos cinco miembros, empezando por wFormatTag. En la ilustración anterior se muestran estas cuatro estructuras superpuestas entre sí para resaltar las partes de las estructuras que son idénticas.

WAVEFORMATEXTENSIBLE amplía WAVEFORMATEX agregando tres miembros, empezando por Samples.wValidBitsPerSample. (Samples es una unión cuyo otro miembro, wValidSamplesPerBlock, se usa en lugar de wValidBitsPerSample para algunos formatos comprimidos). El miembro wFormatTag , que sigue inmediatamente al final de la estructura KSDATAFORMAT en el búfer, especifica qué tipo de información de formato sigue A KSDATAFORMAT.

A diferencia de WAVEFORMATEX, WAVEFORMATEXTENSIBLE puede hacer lo siguiente:

  1. Especifique el número de bits por muestra por separado del tamaño del contenedor de ejemplo. Por ejemplo, una muestra de 20 bits se puede almacenar justificada a la izquierda dentro de un contenedor de tres bytes. WAVEFORMATEX, que no distingue el número de bits de datos por muestra del tamaño del contenedor de muestra, no puede describir este formato de forma inequívoca.

  2. Asigne ubicaciones de altavoz específicas a canales de audio en secuencias multicanal. WAVEFORMATEX carece de esta funcionalidad y solo admite secuencias estéreo mono y (dos canales).

Uso heredado de WAVEFORMATEX

Cualquier formato descrito por WAVEFORMATEX también se puede describir mediante WAVEFORMATEXTENSIBLE. Para obtener información sobre cómo convertir una estructura WAVEFORMATEX a WAVEFORMATEXTENSIBLE, vea Convertir entre etiquetas de formato y GUID de subformato.

WAVEFORMATEX es suficiente para describir formatos con tamaños de muestra de 8 o 16 bits, pero WAVEFORMATEXTENSIBLE es necesario para describir adecuadamente los formatos con una precisión de muestra de más de 16 bits. Estos son dos ejemplos:

  • Una secuencia con una precisión de muestra de 24 bits puede usar un tamaño de contenedor de 32 bits para un procesamiento eficaz, pero se puede convertir para usar un contenedor de 24 bits para mejorar la eficiencia del almacenamiento sin pérdida de datos.

  • Cuando se procesa una secuencia con datos de ejemplo de 24 bits, un dispositivo de representación que proporciona solo 20 bits de precisión puede usar dithering para mejorar la fidelidad de su señal de salida. Sin embargo, la dithering requiere un tiempo de procesamiento adicional y, si la secuencia original es precisa para solo 20 bits, el procesamiento adicional no es necesario.

En ambos ejemplos, la conservación de la calidad de la señal, al mismo tiempo que el equilibrio adecuado entre el procesamiento y la eficiencia del almacenamiento solo es posible si se conocen tanto la precisión de la muestra como el tamaño del contenedor.

Si un formato simple puede describirse inequívocamente mediante una estructura WAVEFORMATEX o WAVEFORMATEXTENSIBLE, un controlador de audio tiene la opción de seleccionar cualquier estructura para describir el formato. Sin embargo, los controladores de audio suelen usar WAVEFORMATEX para especificar formatos PCM estéreo mono y (dos canales) con muestras de 8 o 16 bits, y algunas aplicaciones anteriores podrían esperar que todos los controladores de audio usen WAVEFORMATEX para especificar estos formatos.

Si un controlador admite un formato de audio que puede especificarse inequívocamente como una estructura WAVEFORMATEX o WAVEFORMATEXTENSIBLE, el controlador debe reconocer el formato independientemente de cuál de las dos estructuras usa una aplicación cliente o componente para especificar la estructura. Por ejemplo, si un dispositivo de audio admite un formato PCM estéreo de 44,1 kHz, de 16 bits, el controlador de propiedades KSPROPERTY_PIN_PROPOSEDATAFORMAT del controlador de miniporte y su implementación del método NewStream deben aceptar ese formato independientemente de si el formato se especifica como una estructura WAVEFORMATEX o WAVEFORMATEXTENSIBLE.

Para simplificar el procesamiento de datos de formato, los controladores suelen usar estructuras WAVEFORMATEXTENSIBLE para representar internamente formatos. Este enfoque puede requerir la conversión de una estructura WAVEFORMATEX de entrada a una representación WAVEFORMATEXTENSIBLE interna o la conversión de una representación WAVEFORMATEXTENSIBLE interna a una estructura WAVEFORMATEX de salida.

En WAVEFORMATEXTENSIBLE, dwBitsPerSample es el tamaño del contenedor y wValidBitsPerSample es el número de bits de datos válidos por muestra. Los contenedores siempre están alineados por bytes en la memoria y el tamaño del contenedor debe especificarse como un múltiplo de ocho bits.