Skip to main content
No XBOX One, a descompactação de áudio XMA2 é implementada em hardware. No entanto, o xWMA não é, e requer decodificação por software. O XMA2 e o xWMA usam os mesmos algoritmos de compactação, mas o xWMA oferece uma variedade maior de formatos de codificação. Codifique para XMA2 para obter benefícios de desempenho e compactação, mas observe que algumas músicas de alta fidelidade podem soar melhor se renderizadas por meio do xWMA - isso exigiria testes de audição. Codificar XMA2 por meio do XAudio2 deve ser a abordagem mais simples, mas o XMA2 pode ser codificado diretamente para o hardware usando os comandos do ACP (Audio Control Processor).
Tanto o xWMA quanto o XMA2 têm origem nos codecs desenvolvidos para o WMA (Windows Media Audio), e ambos foram desenvolvidos especificamente para jogos XBOX. O subconjunto dos codecs e parâmetros disponíveis usado pelo XMA2 é menor que o subconjunto usado pelo xWMA. Embora tanto o xWMA quanto o XMA2 tenham sido desenvolvidos para XBOX, eles não são intercambiáveis: os cabeçalhos de cada formato de arquivo são diferentes, e os formatos são incompatíveis com as versões do Windows para PC. Os codecs usados para XMA2 e xWMA também são ligeiramente diferentes, portanto, cada um terá seus próprios artefatos do sistema de compactação usado.
Este tópico aborda o seguinte:

Codificação XMA2

Codifique dados de áudio para XMA2 usando a ferramenta de codificação XMA2, fornecida como parte do Microsoft Game Development Kit (GDK). Arquivos XMA2 são arquivos .wav que têm o cabeçalho de formato XMA2WAVEFORMATEX e um bloco seek adicional na tabela de localização Seek. O formato XMA2 é compatível com o XBOX 360, e a tabela Seek deve ter os bytes invertidos como ULONG para o XBOX One. Se a entrada for um arquivo .wav, a saída poderá ser usada sem alteração. Para inverter os bytes da tabela Seek, use as linhas de código a seguir.
Considere adicionar esse código primeiro ao seu aplicativo para testar a funcionalidade e, depois, talvez escrever uma ferramenta separada para realizar a inversão, de modo que nenhum pré-processamento seja exigido do seu aplicativo. Para o XBOX One, todos os buffers de entrada e saída de DMA (Direct Memory Access) usados com grafos de fluxo, e todo o conteúdo XMA enviado a um buffer de origem, devem ser alocados usando o método ApuAlloc e liberados usando o método ApuFree. Isso é mostrado no código a seguir. Observe o uso do sinalizador SHAPE_XMA_INPUT_BUFFER_ALIGNMENT para ajudar a garantir que os blocos estejam alinhados corretamente.
Para obter detalhes sobre como usar os campos da estrutura com um arquivo codificado em XMA2, consulte a estrutura XMA2WAVEFORMATEX.

Erro de barramento AXI do XMA2

Um bug antigo no decodificador de hardware XMA (e no XBOX 360) exige que os títulos forneçam uma solução alternativa caso usem AcpHal diretamente. O XAudio2 já fornece a solução alternativa. No entanto, até que a ferramenta de codificação XMA2 seja atualizada, observe as informações a seguir. Ao decodificar fluxos de bits XMA e usar apenas um único buffer de entrada XMA, você pode disparar um erro de barramento AXI se os últimos 64 bytes do buffer XMA contiverem dados codificados. Um fluxo de bits XMA raramente contém dados codificados nos últimos 64 bytes. Mesmo assim, isso deve ser tratado para evitar o erro de barramento AXI. Até que a ferramenta de codificação XMA2 seja atualizada para garantir que nenhum arquivo codificado contenha dados codificados nos últimos 64 bytes do fluxo de bits, você pode evitar esse problema usando um dos métodos a seguir.
  • Sempre use ambos os buffers de entrada XMA e nunca defina o ponteiro de qualquer um dos buffers de entrada como um valor inválido.
  • Defina o ponteiro do buffer de entrada não utilizado como igual ao ponteiro do outro buffer de entrada, mesmo que você não vá habilitar o outro buffer. Veja um exemplo a seguir.
  • Ao gerar conteúdo, use uma ferramenta offline para verificar seus arquivos XMA. Se qualquer um dos últimos 64 bytes do fluxo de bits XMA codificado tiver um valor diferente de 0xFF, codifique o arquivo novamente.
Qualquer um desses métodos impede que o pré-buscador do XMA leia um endereço inválido.

Documentação de referência da API

Confira também

Ferramenta de codificação XMA2
Last modified on October 6, 2026