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.
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 fragmentoseek 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.
SHAPE_XMA_INPUT_BUFFER_ALIGNMENT para ayudar a garantizar que los bloques estén alineados correctamente.
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 usanAcpHal 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.
