xWMA の概要

xWMA は Windows Media Audio (WMA) Professional 圧縮フォーマットのサブセットです。XAudio2 と XACT3 の両方において、ソフトウェアで xWMA をデコードできるようになりました。xWMA では、軽量ラッパーに WMA ビットストリーム フォーマットを使用しており、XMA より圧縮率が向上しました。xWMA は、少ない CPU ヒット率でより大きい圧縮率を実現できるので、ダイアログや音楽などに有用です。品質設定により、圧縮されたサウンドのビットレートを変更できます。xWMA はループが制限されており、特定タイプのオーディオのループには適していない可能性があります。この後の「xWMA でのループ」を参照してください。

XMA エンコーディング

オーディオ データは、XACT または xWMAEncode コマンドライン ツールを使用して、xWMA にエンコードされます。

  • XACT

    XACT GUI で Wave バンクを作成するときにオーディオ ファイルを xWMA として自動的にエンコードすることができます。圧縮プリセットを使用して、xWMA 圧縮を Wave または Wave バンクに適用します。オーディオ データを XACT 用の xWMA としてエンコードする方法については、「圧縮の事前設定」を参照してください。

  • xWMAEncode

    オーディオ ファイルを XAudio2 用 xWMA としてエンコードするには、xWMA コマンド ライン エンコーダー を使用します。

xWMA デコード

Windows と Xbox 360 の両方で、XACT および XAudio2 での xWMA のソフトウェア デコードがサポートされます。

  • XACT

    XACT でサポートされるすべてのエンコーディング フォーマットは、同じ方法でロードおよび再生されます。xWMA でエンコードされている Wave または Wave バンクを処理する際に、標準の Wave の再生で追加の手順は必要になりません。XACT でのサウンドのロードおよび再生の例については、「方法:XACT でのサウンドの再生」を参照してください。

  • XAudio2

    XAudio2 で xWMA エンコードされたデータを使用するには、ソース ボイスの作成時に、xWMA 固有の値で WAVEFORMATEXTENSIBLE 構造体を初期化し、それを引数として IXAudio2::CreateSourceVoice に渡す必要があります。XAudio2 でのサウンドの読み込みと再生の例については、「方法 : XAudio2 によるサウンドの再生」を参照してください。

xWMA ボイスのデコードには、Xbox 360 の場合、ボイスあたり約 2% の一定の CPU 負荷が加わります。Windows の場合、3GHz Prescott CPU でボイスあたり約 0.35% のごくわずかな負荷が加わります。

xWMA でのループ

xWMA は、xWMA ファイル内のループ領域または任意のパケットのループに対応していません。xWMA ファイル全体のみをループできます。XACT はこの制限を適用します。また、特殊な処理は不要です。XAudio2 では、IXAudio2SourceVoice::SubmitSourceBuffer に渡される XAUDIO2_BUFFER 内の値のループに関連する次の規則が xWMA にあります。

xWMA ファイルのすべてのオーディオ データが 1 つのバッファーとして送信された場合、ユーザーがそれをループするには、次の制限が満たされていなければなりません。

  • XAUDIO2_BUFFER。LoopBegin は常にゼロである必要があります。

  • XAUDIO2_BUFFER。LoopLength は、ファイル全体の xWMA データのサイズまたは 0 である必要があります。

  • XAUDIO2_BUFFER。LoopCount は任意の値でかまいません。

  • XAUDIO2_BUFFER。Flags は、XAUDIO2_END_OF_STREAM に設定する必要があります。

xWMA オーディオ データが複数のバッファーとして送信された場合、一連のバッファーを再送信することで、オーディオを手動でのみループすることができます。

xWMA オーディオをループする際は、無音の期間が発生する場合があることに注意してください。このため、xWMA オーディオのループは、通常、スムーズなフェード インおよびフェード アウトがあるサウンド (波の音や、その他の微妙な環境音のループなど) でのみ使用する必要があります。

xWMA ファイル構造

xWMA ファイルは、次のチャンク タイプを含む標準の RIFF ファイルです。

チャンク FCC 説明
RIFF データ セクションの最初の 4 バイトに値 XWMA のファイル タイプを含む標準の RIFF チャンク、およびデータ セクションの残りのファイルの他のチャンクです。
fmt xWMA ファイルのフォーマット ヘッダーを格納します。このチャンクのデータは、1 つまたは 2 つのチャンネルを持つ xWMA データの場合 WAVEFORMATEX 構造体に対応し、3 つ以上のチャンネルを持つ xWMA データの場合 WAVEFORMATEXTENSIBLE 構造体に対応します。Xbox 360 上では、fmt チャンクからロードされたデータは、バイト スワップして Windows と Xbox 360 間のエンディアンの差異を相殺する必要があります。
data エンコード済みの xWMA オーディオ データを格納します。XAudio2 で xWMA を使用する場合、データ チャンクの内容がバッファーに読み込まれ、XAUDIO2_BUFFER 構造体の pAudioData メンバーとしてソース ボイスに渡されます。データ チャンクの内容は、バイト スワップする必要はありません。
dpds デコードされたパケットの累積データ サイズ配列を格納します。各要素は、対応する xWMA パケットが順番にデコードされた後に蓄積されたバイト数です。この UINT32 値のチャンクのサイズとそのデータ セクションの内容は、XAudio2 で XAUDIO2_BUFFER_WMA 構造体に入力するために使用されます。Xbox 360 上では、dpds チャンクからロードされたデータは、バイト スワップして Windows と Xbox 360 間のエンディアンの差異を相殺する必要があります。

XAudio2 で RIFF ファイルからのデータを解析およびロードする例については、「XAudio2 BasicSound サンプル」を参照してください。XACT で xWMA ファイルをロードする場合、ファイルのロードおよび解析の詳細は、XACT エンジンで処理されます。詳細は、「方法:XACT でのサウンドの再生」を参照してください。

関連トピック