Skip to main content
Sur XBOX One, la décompression audio XMA2 est implémentée dans le matériel. En revanche, ce n’est pas le cas de xWMA, qui nécessite un décodage logiciel. XMA2 et xWMA utilisent les mêmes algorithmes de compression, mais xWMA offre une gamme plus large de formats d’encodage. Encodez en XMA2 pour bénéficier des avantages en termes de performances et de compression, mais notez que certaines musiques haute fidélité peuvent mieux sonner si elles sont rendues via xWMA, ce qui nécessiterait des tests d’écoute. Coder XMA2 via XAudio2 devrait être l’approche la plus simple, mais XMA2 peut être codé directement pour le matériel à l’aide des commandes de l’Audio Control Processor (ACP).
xWMA et XMA2 trouvent tous deux leur origine dans les codecs développés pour Windows Media Audio (WMA) et ont tous deux été développés spécifiquement pour les jeux XBOX. Le sous-ensemble de codecs et de paramètres disponibles utilisé par XMA2 est plus restreint que celui utilisé par xWMA. Bien que xWMA et XMA2 aient été développés pour XBOX, ils ne sont pas interchangeables : les en-têtes de chaque format de fichier diffèrent, et les formats sont incompatibles avec les versions PC de Windows. Les codecs utilisés pour XMA2 et xWMA sont également légèrement différents, si bien que chacun présentera ses propres artefacts liés au système de compression utilisé.
Cette rubrique traite des sujets suivants :

Encodage XMA2

Encodez les données audio en XMA2 à l’aide de l’outil d’encodage XMA2, fourni dans le cadre du Microsoft Game Development Kit (GDK). Les fichiers XMA2 sont des fichiers .wav qui possèdent l’en-tête de format XMA2WAVEFORMATEX et un bloc seek supplémentaire dans la table d’emplacements Seek. Le format XMA2 est compatible avec la XBOX 360, et la table Seek doit faire l’objet d’une permutation d’octets ULONG pour la XBOX One. Si l’entrée est un fichier .wav, la sortie peut être utilisée sans modification. Pour permuter les octets de la table Seek, utilisez les lignes de code suivantes.
Envisagez d’ajouter d’abord ce code à votre application pour tester la fonctionnalité, puis éventuellement d’écrire un outil distinct pour effectuer la permutation afin qu’aucun prétraitement ne soit requis de la part de votre application. Pour la XBOX One, toutes les mémoires tampons d’entrée et de sortie DMA (Direct Memory Access) utilisées avec des graphes de flux, ainsi que tout le contenu XMA soumis à une mémoire tampon source, doivent être allouées à l’aide de la méthode ApuAlloc et libérées à l’aide de la méthode ApuFree. C’est ce qu’illustre le code suivant. Notez l’utilisation de l’indicateur SHAPE_XMA_INPUT_BUFFER_ALIGNMENT pour garantir que les blocs sont correctement alignés.
Pour plus d’informations sur l’utilisation des champs de la structure avec un fichier encodé en XMA2, consultez la structure XMA2WAVEFORMATEX.

Erreur de bus AXI XMA2

Un bogue de longue date dans le décodeur matériel XMA (et sur XBOX 360) exige que les titres fournissent une solution de contournement s’ils utilisent directement AcpHal. XAudio2 fournit déjà cette solution de contournement. Toutefois, tant que l’outil d’encodage XMA2 n’a pas été mis à jour, tenez compte des informations suivantes. Lors du décodage de flux binaires XMA avec une seule mémoire tampon d’entrée XMA, vous pouvez déclencher une erreur de bus AXI si les 64 derniers octets de la mémoire tampon XMA contiennent des données encodées. Un flux binaire XMA contient rarement des données encodées dans les 64 derniers octets. Néanmoins, ce cas doit être géré pour éviter l’erreur de bus AXI. Tant que l’outil d’encodage XMA2 n’a pas été mis à jour pour garantir qu’aucun fichier encodé ne contient de données encodées dans les 64 derniers octets du flux binaire, vous pouvez éviter ce problème à l’aide de l’une des méthodes suivantes.
  • Utilisez toujours les deux mémoires tampons d’entrée XMA, et ne définissez jamais le pointeur de l’une ou l’autre mémoire tampon d’entrée sur une valeur non valide.
  • Définissez le pointeur de la mémoire tampon d’entrée inutilisée sur la même valeur que le pointeur de l’autre mémoire tampon d’entrée, même si vous n’activez pas l’autre mémoire tampon. Voici un exemple.
  • Lors de la génération du contenu, utilisez un outil hors connexion pour analyser vos fichiers XMA. Si l’un des 64 derniers octets du flux binaire XMA encodé a une valeur autre que 0xFF, réencodez le fichier.
Chacune de ces méthodes empêche le prélecteur XMA de lire une adresse non valide.

Documentation de référence de l’API

Voir aussi

Outil d’encodage XMA2
Last modified on October 6, 2026