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.
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 blocoseek 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.
SHAPE_XMA_INPUT_BUFFER_ALIGNMENT para ajudar a garantir que os blocos estejam alinhados corretamente.
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 usemAcpHal 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.
Documentação de referência da API
- APU (conteúdo da API)
- XMA2Defs (conteúdo da API)
- Estruturas
