次の方法で共有


ADPCM の概要

アダプティブ差動パルスコード変調(ADPCM)は、圧縮サンプルブロックのサイズを指定するための追加機能を提供するためにXAudio2用に実装される損失圧縮形式です。 損失のある圧縮形式では、圧縮中に一部のデータが変更され、失われます。 ADPCM は最大 4:1 の圧縮率を実現できます。

XAudio2 用 ADPCM の実装には、圧縮サンプル ブロックのサイズを指定するための追加機能が用意されています。 ADPCM を使用すると、オーディオ デザイナーは、サイズ、品質、解像度の間で適切な妥協点となる設定を選択できます (ループ ポイントを配置する場合)。

XAudio2 では、カスタム のサンプル ブロック サイズを提供するために必要な拡張データの書式設定をサポートする、変更されたバージョンの Microsoft ADPCM コーデックを使用します。 このため、このバージョンの ADPCM コーデックをサポートしていないオーディオ エンジンでは、XAudio2 オーディオ データを再生できません。

注意

現在、ADPCM 圧縮は、XNA Game Studio Express for Windows デプロイを含む Windows でのみ使用できます。

 

ADPCM エンコード

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

  • AdpcmEncode

    XAudio2 で使用するためにオーディオ ファイルを ADPCM としてエンコードするには、 AdpcmEncode コマンド ライン ツールを使用します。

ADPCM デコード

XAudio2 では、ADPCM のソフトウェア デコードがサポートされています。

SamplesPerBlock

ADPCM圧縮は、波形をブロックに分離し、各ブロック内の波形サンプルの変動を予測することによって機能します。 ブロックのサイズはサンプルで測定されます。 最小のブロック サイズは 32 サンプル、最高は 512 サンプルです。

ブロックを大きくすると圧縮が向上し、ファイル サイズが小さくなりますが、ループ ポイントを整列するための音質と解像度が犠牲になります。

一般に、SamplesPerBlock 値を変更すると、次のトレードオフが生じます。

If SamplesPerBlock... ファイル圧縮 音質 ループ ポイントの解決
増加 (最大 512) 増加 減少 減少
減少 (最小 32 まで) 減少 増加 増加

 

制限

ADPCM は、互いに整列されたサンプル ブロックを使用するため、ADPCM で圧縮された波の終端に未完成の部分ブロックが存在する可能性があります。 ADPCM デコーダーは、この部分ブロックの残りの部分に無音を生成します。これにより、波がシームレスにループしないようにします。

SamplesPerBlock パラメーターの値は、ウェーブ データとループ ポイントを配置できる解像度に影響します。

アラインされていないウェーブに圧縮を適用しようとすると、ループ プレイ イベントでウェーブが使用されているかどうかに応じてエラーまたは警告が表示されます。 ループ再生イベントで使用されるウェーブを圧縮することはできません。 ループ再生イベントから削除し、圧縮を再適用します。

非ループ モードでのみウェーブを使用する場合、サンプル ブロックアラインメント制限は適用されません。

ADPCM ファイル構造

ADPCM ファイルは、次のチャンクの種類を持つ標準の RIFF ファイルです。

チャンク FCC Description
RIFF データ セクションの最初の 4 バイトの値 WAVE と、そのデータ セクションの残りの部分のファイル内の他のチャンクを含むファイルの種類を含む Standard RIFF チャンク。
Fmt ADPCM ファイルの書式ヘッダーが含まれます。 このチャンク内のデータは 、ADPCMWAVEFORMAT 構造体に対応しています。
data エンコードされた ADPCM オーディオ データが含まれます。 XAudio2 で ADPCM を使用する場合は、データ チャンクの内容をバッファーに読み取り、XAUDIO2_BUFFER構造体の pAudioData メンバーとしてソース音声に渡す必要があります。 データ チャンクの内容をバイト スワップする必要はありません。
smpl と wsmp ADPCM ファイルのループ情報を含むオプションのチャンク型。 XAudio2 で ADPCM を使用する場合、smpl または wsmp チャンクに含まれる値を使用して、XAUDIO2_BUFFER構造体の LoopBeginLoopLength メンバーと LoopCount メンバーを設定します。 Xbox 360 では、smpl チャンクから読み込まれたデータをバイト スワップして、Windows と Xbox 360 のエンディアンの違いを考慮する必要があります。

 

プログラミング ガイド