XAUDIO2_BUFFER 構造体
IXAudio2SourceVoice::SubmitSourceBuffer と共に使用して、オーディオ データ バッファーを表します。
構文
typedef struct XAUDIO2_BUFFER { UINT32 Flags; UINT32 AudioBytes; BYTE *pAudioData; UINT32 PlayBegin; UINT32 PlayLength; UINT32 LoopBegin; UINT32 LoopLength; UINT32 LoopCount; void *pContext;} XAUDIO2_BUFFER;
メンバー
Flags
オーディオ バッファーに関する追加情報を提供するフラグです。0 または次のいずれかの値を指定します。値 説明 XAUDIO2_END_OF_STREAM このバッファーの後にキュー内のバッファーが存在できないことを示します。このフラグの唯一の影響は、バッファー キューの不足が原因で発生するデバッグ出力警告が表示されなくなることです。 AudioBytes
オーディオ データのサイズ (バイト単位) です。PCM データの場合、XAUDIO2_MAX_BUFFER_BYTES (xaudio2.h で定義) より大きい値は指定できません。XMA データの場合、XMA_READBUFFER_MAX_BYTES (xma2defs.h で定義) より大きい値は指定できません。注意
IXAudio2SourceVoice::SubmitSourceBuffer を使用して XAudio2 ボイスに送信される XMA バッファーには、完全な XMA ブロックが含まれる必要があります。完全な XMA ブロックは、XMA2WAVEFORMATEX.BytesPerBlock の値と同じサイズである必要があります。ただし、ファイル内の最後の XMA ブロックだけは小さくすることが可能で、これでも完全であると見なされます。
pAudioData
オーディオ データへのポインターです。Xbox 360 XMA データを含むバッファーに割り当てるメモリーには、2048 のブロック アライメントが必要です。これには、XPhysicalAlloc を使用し、ulAlignment 引数を 2048 に設定します。
PlayBegin
再生される、バッファー内の最初のサンプルです。XMA バッファーの場合、この値は 128 サンプルの倍数でなければなりません。
PlayLength
再生される領域の長さ (サンプル数単位) です。値が 0 の場合、バッファー全体が再生されます。また、この場合は PlayBegin も 0 にする必要があります。XMA データの場合、この値は 128 サンプルの倍数でなければなりません。
ADPCM データの場合、この値は、この XAUDIO2_BUFFER 構造体を含む ADPCMWAVEFORMAT 構造体の wSamplesPerBlock の倍数でなければなりません。
LoopBegin
ループされる領域の最初のサンプルです。LoopBegin の値は、PlayBegin + PlayLength よりも小さくする必要があります。LoopBegin は、PlayBegin より小さくてもかまいません。LoopCount が 0 の場合、LoopBegin は 0 である必要があります。XMA データの場合、この値は 128 サンプルの倍数でなければなりません。
xWMA データの場合、この値は 0 である必要があります。詳細については、「xWMA の概要」を参照してください。
LoopLength
ループ領域の長さ (サンプル数単位) です。LoopBegin+LoopLength の値は、PlayBegin より大きく、PlayBegin + PlayLength より小さい必要があります。LoopCount が 0 の場合、LoopLength は 0 である必要があります。LoopCount が 0 でない場合、ループ長が 0 のときは、サンプル全体がループされる必要があります。XMA データの場合、この値は 128 サンプルの倍数でなければなりません。
ADPCM データの場合、この値は、この XAUDIO2_BUFFER 構造体を含む ADPCMWAVEFORMAT 構造体の wSamplesPerBlock の倍数である必要があります。
xWMA データの場合、この値は 0 であるか、またはバッファー全体のサイズと等しくなければなりません。詳細については、「xWMA の概要」を参照してください。
LoopCount
ループ領域を通してループする回数です。この値は、0 ~ XAUDIO2_MAX_LOOP_COUNT の間で指定できます。LoopCount が 0 の場合、ループは実行されず、LoopBegin と LoopLength は 0 である必要があります。無限ループを実行するには、LoopCount を XAUDIO2_LOOP_INFINITE に設定します。xWMA データの場合、この値が 0 でない場合、Flags は XAUDIO2_END_OF_STREAM である必要があります。詳細については、「xWMA の概要」を参照してください。
pContext
コールバックでクライアントに返されるコンテキスト値です。これは NULL 値でもかまいません。
解説
XAudio2 オーディオ データはインターリーブされ、特定のサンプル番号での各チャンネルからのデータは隣接します。たとえば、XAudio2 ソース ボイスに再生される 4 チャンネルの Wave がある場合、オーディオ データはチャンネル 0 のサンプル、チャンネル 1 のサンプル、チャンネル 2 のサンプル、チャンネル 3 のサンプルになり、その次からは同様にチャンネル 0、1、2、3 の各サンプルとなります。
XAUDIO2_BUFFER の AudioBytes メンバーと pAudioData メンバーは、再生されるファイルのサイズ (バイト単位) および 'data' RIFF チャンクのコンテンツに対応します。チャンクのコンテンツは、Xbox 360 でのファイルのロード時に、バイト スワップされる場合があります。
XAUDIO2_BUFFER または XAUDIO2_BUFFER_WMA 構造体を保持するために割り当てられたメモリーは、それらの構造体が渡される IXAudio2SourceVoice::SubmitSourceBuffer 呼び出しが終了した時点で解放できます。この構造体で示されるデータ (それぞれ、pAudioData および pDecodedPacketCumulativeBytes) は、バッファーが完了する (IXAudio2VoiceCallback::OnBufferEnd コールバックによって通知されます) か、ボイスが停止または破棄されるまで解放できません。
要件
ヘッダー: xaudio2.h で宣言されています。
関連項目
XAudio2 の構造体
IXAudio2SourceVoice::SubmitSourceBuffer
方法 : 基本的なオーディオ処理グラフの作成