Skip to main content
En XBOX One, la descompresión de audio XMA2 se implementa en hardware. Sin embargo, xWMA no, y requiere descodificación por software. XMA2 y xWMA usan los mismos algoritmos de compresión, pero xWMA proporciona una gama más amplia de formatos de codificación. Codifique para XMA2 para obtener ventajas de rendimiento y compresión, pero tenga en cuenta que parte de la música de alta fidelidad podría sonar mejor si se representa mediante xWMA; esto requeriría pruebas de escucha. Codificar XMA2 a través de XAudio2 debería ser el enfoque más sencillo, pero XMA2 se puede codificar directamente en el hardware mediante los comandos del procesador de control de audio (ACP).
Tanto xWMA como XMA2 tienen su origen en los códecs desarrollados para Windows Media Audio (WMA) y ambos se han desarrollado específicamente para los juegos de XBOX. El subconjunto de códecs y parámetros disponibles que usa XMA2 es más pequeño que el subconjunto que usa xWMA. Aunque tanto xWMA como XMA2 se desarrollaron para XBOX, no son intercambiables: los encabezados de cada formato de archivo difieren y los formatos son incompatibles con las versiones de Windows para PC. Los códecs usados para XMA2 y xWMA también son ligeramente diferentes, por lo que cada uno tendrá sus propios artefactos derivados del sistema de compresión que se usa.
En este tema se tratan los siguientes puntos:

Codificación XMA2

Codifique los datos de audio a XMA2 mediante la herramienta de codificación XMA2, que se suministra como parte del Microsoft Game Development Kit (GDK). Los archivos XMA2 son archivos .wav que tienen el encabezado de formato XMA2WAVEFORMATEX y un fragmento seek adicional dentro de la tabla de ubicaciones Seek. El formato XMA2 es compatible con XBOX 360, y la tabla Seek debe someterse a un intercambio de bytes ULONG para XBOX One. Si la entrada es un archivo .wav, la salida se puede usar sin modificaciones. Para intercambiar los bytes de la tabla Seek, use las siguientes líneas de código.
Considere agregar primero este código a su aplicación para probar la funcionalidad y, después, quizá escribir una herramienta independiente que realice el intercambio, de modo que su aplicación no requiera ningún preprocesamiento. Para XBOX One, todos los búferes de entrada y salida de acceso directo a memoria (DMA) que se usan con grafos de flujo, y todo el contenido XMA enviado a un búfer de origen, se deben asignar mediante el método ApuAlloc y liberar mediante el método ApuFree. Esto se muestra en el código siguiente. Observe el uso de la marca SHAPE_XMA_INPUT_BUFFER_ALIGNMENT para ayudar a garantizar que los bloques estén alineados correctamente.
Para obtener detalles sobre el uso de los campos de la estructura con un archivo codificado con XMA2, consulte la estructura XMA2WAVEFORMATEX.

Error de bus AXI de XMA2

Un error de larga data en el descodificador de hardware de XMA (y en XBOX 360) requiere que los títulos proporcionen una solución alternativa si usan AcpHal directamente. XAudio2 ya proporciona la solución alternativa. Sin embargo, hasta que se actualice la herramienta de codificación XMA2, tenga en cuenta la siguiente información. Al descodificar secuencias de bits XMA y usar solo un único búfer de entrada XMA, puede desencadenar un error de bus AXI si los últimos 64 bytes del búfer XMA contienen datos codificados. Es poco frecuente que una secuencia de bits XMA contenga datos codificados en los últimos 64 bytes. No obstante, esto se debe controlar para evitar el error de bus AXI. Hasta que la herramienta de codificación XMA2 se actualice para garantizar que ningún archivo codificado contenga datos codificados en los últimos 64 bytes de la secuencia de bits, puede evitar este problema mediante uno de los métodos siguientes.
  • Use siempre ambos búferes de entrada XMA y nunca establezca el puntero de ninguno de los búferes de entrada en un valor no válido.
  • Establezca el puntero del búfer de entrada no usado para que sea igual al puntero del otro búfer de entrada, aunque no vaya a habilitar el otro búfer. A continuación se muestra un ejemplo.
  • Mientras genera el contenido, use una herramienta sin conexión para examinar sus archivos XMA. Si alguno de los últimos 64 bytes de la secuencia de bits XMA codificada tiene un valor distinto de 0xFF, vuelva a codificar el archivo.
Cualquiera de estos métodos evita que el prefetcher de XMA lea una dirección no válida.

Documentación de referencia de la API

Consulte también

Herramienta de codificación XMA2
Última modificación el 28 de agosto de 2026