Introducción a ADPCM
La modulación de código de pulso diferencial adaptable (ADPCM) es un formato de compresión de pérdida que se implementa para XAudio2 para proporcionar características adicionales para especificar el tamaño del bloque de muestra de compresión. Con un formato de compresión perdida se modifican algunos datos y se pierden durante la compresión. ADPCM puede lograr relaciones de compresión de hasta 4:1.
La implementación de ADPCM para XAudio2 proporciona características adicionales para especificar el tamaño del bloque de ejemplo de compresión. ADPCM permite al diseñador de audio elegir una configuración que sea un compromiso adecuado entre el tamaño, la calidad y la resolución (para colocar puntos de bucle).
XAudio2 usa una versión modificada del códec ADPCM de Microsoft que admite el formato de datos extendido necesario para proporcionar tamaños de bloque de ejemplo personalizados. Por este motivo, los motores de audio que no admiten esta versión del códec ADPCM no pueden reproducir los datos de audio XAudio2.
Nota
Actualmente, la compresión de ADPCM solo está disponible para Windows, incluidas las implementaciones de XNA Game Studio Express para Windows.
Codificación de ADPCM
Los datos de audio se codifican en ADPCM mediante la herramienta de línea de comandos AdpcmEncode.
AdpcmEncode
Para codificar archivos de audio como ADPCM para su uso con XAudio2, use la herramienta de línea de comandos AdpcmEncode .
Descodificación de ADPCM
La descodificación de software de ADPCM se admite en XAudio2.
XAudio2
Para usar datos codificados de ADPCM en XAudio2, debe inicializar una estructura ADPCMWAVEFORMAT con valores específicos de ADPCM y pasarlos como argumento a IXAudio2::CreateSourceVoice al crear una voz de origen. Para obtener un ejemplo de carga y reproducción de un sonido en XAudio2, vea Cómo: Reproducir un sonido con XAudio2.
SamplesPerBlock
La compresión ADPCM funciona separando la forma de onda en bloques y predicndo la variación de las muestras de forma de onda dentro de cada bloque. El tamaño de los bloques se mide en muestras. El tamaño de bloque más pequeño es de 32 muestras y el más alto es 512 muestras.
Los bloques más grandes permiten una mejor compresión, lo que da lugar a tamaños de archivo más pequeños, pero a costa de la calidad de sonido y la resolución para alinear los puntos de bucle.
En general, la modificación del valor SamplesPerBlock da como resultado estas ventajas:
Si SamplesPerBlock... | Compresión de archivos | Calidad del sonido | Resolución de puntos de bucle |
---|---|---|---|
Aumentos (hasta un máximo de 512) | Aumenta | Disminuye | Disminuye |
Disminuciones (hasta un mínimo de 32) | Disminuye | Aumenta | Aumenta |
Restricciones
Dado que ADPCM usa bloques de ejemplo alineados uno después del otro, una onda comprimida con ADPCM puede tener un bloque parcial sin terminar al final. El descodificador ADPCM genera silencio para el resto de este bloque parcial, lo que evita que la onda se repite sin problemas.
El valor del parámetro SamplesPerBlock afecta a la resolución con la que se pueden alinear los datos de onda y los puntos de bucle.
Si intenta aplicar la compresión a una onda no alineada, obtendrá un error o una advertencia en función de si la onda se usa en cualquier evento de reproducción en bucle. No se puede comprimir una onda utilizada en ningún evento de reproducción en bucle. Quítelo de los eventos de reproducción en bucle y vuelva a aplicar la compresión.
Si usa la onda exclusivamente en modo sin bucle, no se aplica la restricción de alineación de bloques de ejemplo.
Estructura de archivos ADPCM
Un archivo ADPCM es un archivo RIFF estándar con los siguientes tipos de fragmentos.
Fragmento de FCC | Descripción |
---|---|
RIFF | Fragmento RIFF estándar que contiene un tipo de archivo con el valor WAVE en los cuatro primeros bytes de su sección de datos y los demás fragmentos del archivo en el resto de su sección de datos. |
fmt | Contiene el encabezado de formato del archivo ADPCM. Los datos de este fragmento corresponden a una estructura ADPCMWAVEFORMAT . |
datos | Contiene los datos de audio ADPCM codificados. Al usar ADPCM en XAudio2, debe leer el contenido del fragmento de datos en un búfer y pasarlo a una voz de origen como miembro pAudioData de una estructura de XAUDIO2_BUFFER . No es necesario intercambiar por bytes el contenido del fragmento de datos. |
smpl y wsmp | Tipos de fragmentos opcionales que contienen la información de bucle para el archivo ADPCM. Cuando se usa ADPCM en XAudio2, los valores contenidos en los fragmentos smpl o wsmp se usan para rellenar los miembros LoopBeginLoopLength y LoopCount de la estructura XAUDIO2_BUFFER . En Xbox 360, debes intercambiar los datos cargados desde un fragmento de smpl para tener en cuenta la diferencia de endianidad entre Windows y Xbox 360. |
Temas relacionados