Skip to main content
XBOX One では、XMA2 オーディオ展開はハードウェアに実装されています。ただし、xWMA はそうではなく、ソフトウェア デコードが必要です。XMA2 と xWMA は両方とも同じ圧縮アルゴリズムを使用しますが、xWMA はより広いエンコード フォーマット範囲を提供します。パフォーマンスと圧縮の利点のため XMA2 でエンコードしますが、一部の高忠実度の音楽は xWMA を通じてレンダリングした方が良く聞こえるかもしれない点に注意してください。これはリスニング テストが必要です。XAudio2 を通じて XMA2 をコーディングするのが最も簡単なアプローチですが、Audio Control Processor (ACP) コマンドを使用して XMA2 をハードウェアに直接コーディングすることもできます。
xWMA と XMA2 は、どちらも Windows Media Audio (WMA) 用に開発されたコーデックに由来し、両方とも XBOX ゲーム向けに専用に開発されています。XMA2 で使用される利用可能なコーデックとパラメーターのサブセットは、xWMA で使用されるサブセットよりも小さいです。xWMA と XMA2 の両方が XBOX 用に開発されましたが、これらは相互に交換可能ではありません。各ファイル フォーマットのヘッダーは異なり、フォーマットは Windows の PC バージョンとは互換性がありません。XMA2 および xWMA で使用されるコーデックも若干異なるため、それぞれが使用される圧縮システムからの独自のアーティファクトを持ちます。
このトピックでは、次の内容について説明します。

XMA2 エンコード

Microsoft Game Development Kit (GDK) の一部として提供される XMA2 エンコーダー ツールを使用して、オーディオ データを XMA2 にエンコードします。XMA2 ファイルは、XMA2WAVEFORMATEX フォーマット ヘッダーと、Seek 位置テーブル内の追加の seek チャンクを持つ .wav ファイルです。 XMA2 フォーマットは XBOX 360 と互換性があり、Seek テーブルは XBOX One 用に ULONG バイト スワップする必要があります。入力が .wav ファイルの場合、出力は変更なしで使用できます。 Seek テーブルをバイト スワップするには、次のコード行を使用します。
まずこのコードをアプリに追加して機能をテストし、次にアプリで前処理が不要になるようにスワップを実行する別のツールを作成することを検討してください。 XBOX One の場合、フローグラフで使用されるすべての Direct Memory Access (DMA) 入出力バッファー、およびソース バッファーに送信されるすべての XMA コンテンツは、ApuAlloc メソッドを使用して割り当て、ApuFree メソッドを使用して解放する必要があります。これは次のコードに示されています。ブロックが正しくアラインされるように、SHAPE_XMA_INPUT_BUFFER_ALIGNMENT フラグを使用している点に注目してください。
XMA2 エンコードされたファイルで構造体のフィールドを使用する方法の詳細については、XMA2WAVEFORMATEX 構造体を参照してください。

XMA2 AXI バス エラー

XMA ハードウェア デコーダー (および XBOX 360) に長年存在するバグにより、タイトルは AcpHal を直接使用する場合に回避策を提供する必要があります。XAudio2 は既に回避策を提供しています。ただし、XMA2 エンコーダー ツールが更新されるまでは、次の情報に注意してください。 XMA ビット ストリームをデコードし、単一の XMA 入力バッファーのみを使用する場合、XMA バッファーの最後の 64 バイトにエンコードされたデータが含まれると、AXI バス エラーがトリガーされる可能性があります。XMA ビット ストリームには、最後の 64 バイト以内にエンコードされたデータが含まれることはめったにありません。それでも、AXI バス エラーを防ぐためにこれを処理する必要があります。XMA2 エンコーダー ツールが更新され、ビット ストリームの最後の 64 バイトにエンコードされたデータが含まれるファイルが生成されないようにされるまで、次の方法のいずれかを使用してこの問題を回避できます。
  • 常に両方の XMA 入力バッファーを使用し、どちらの入力バッファーのポインターも無効な値に設定しないでください。
  • 他方のバッファーを有効にしなくても、未使用の入力バッファーのポインターを他方の入力バッファーのポインターと等しく設定してください。例を以下に示します。
  • コンテンツを生成している間、オフライン ツールを使用して XMA ファイルをスキャンしてください。エンコードされた XMA ビット ストリームの最後の 64 バイトのいずれかが 0xFF 以外の値の場合、ファイルを再エンコードしてください。
これらの方法のいずれかによって、XMA プリフェッチャーが無効なアドレスを読み取ることを防ぎます。

リファレンス API ドキュメント

関連項目

XMA2 エンコーダー ツール
最終更新日 2026年8月24日