XAUDIO2_BUFFER結構 (xaudio2.h)
表示與 IXAudio2SourceVoice::SubmitSourceBuffer搭配使用的音訊資料緩衝區。
語法
typedef struct XAUDIO2_BUFFER {
UINT32 Flags;
UINT32 AudioBytes;
const BYTE *pAudioData;
UINT32 PlayBegin;
UINT32 PlayLength;
UINT32 LoopBegin;
UINT32 LoopLength;
UINT32 LoopCount;
void *pContext;
} XAUDIO2_BUFFER;
成員
Flags
提供音訊緩衝區其他相關資訊的旗標。 可以是 0 或下列值。
值 | 描述 |
---|---|
XAUDIO2_END_OF_STREAM | 表示此緩衝區之後,佇列中不能有任何緩衝區。 此旗標的唯一效果是抑制因緩衝區佇列耗盡所造成的偵錯輸出警告。 |
AudioBytes
音訊資料的大小,以位元組為單位。 不得大於 xaudio2.h) 中針對 PCM 資料定義的XAUDIO2_MAX_BUFFER_BYTES (,且 XMA 資料在 xma2defs.h) 中定義的XMA_READBUFFER_MAX_BYTES (不能大於 。
pAudioData
音訊資料的指標。
Xbox 360 |
---|
配置給包含 XMA 資料之緩衝區的記憶體必須具有 2048 的區塊對齊方式。 這是使用XPhysicalAlloc 完成,並將 ulAlignment引數設定為 2048。 |
PlayBegin
緩衝區中應該播放的第一個範例。
若為 XMA 緩衝區,這個值必須是 128 個樣本的倍數。
PlayLength
範例中要播放的區域長度。 值為零表示播放整個緩衝區,在此情況下, PlayBegin 也必須是零。 針對 ADPCM 資料,這個值必須是ADPCMWAVEFORMAT結構中包含此XAUDIO2_BUFFER結構的wSamplesPerBlock倍數。
LoopBegin
要迴圈之區域的第一個範例。 LoopBegin的值必須小於PlayBegin + PlayLength。 LoopBegin 可以小於 PlayBegin。 如果 LoopCount 為 0, 則 LoopBegin 必須為 0。
LoopLength
範例中的迴圈區域長度。 LoopBegin+LoopLength的值必須大於PlayBegin且小於PlayBegin + PlayLength。 如果 LoopCount 為 0,則 LoopLength 必須為零。 如果 LoopCount 不是 0,則迴圈長度為零表示應該迴圈處理整個樣本。 針對 ADPCM 資料,這個值必須是ADPCMWAVEFORMAT結構中包含此XAUDIO2_BUFFER結構的wSamplesPerBlock倍數。
LoopCount
迴圈區域迴圈的次數。 此值可以介於 0 和 XAUDIO2_MAX_LOOP_COUNT之間。 如果 LoopCount 為零,則不會執行迴圈, 而且 LoopBegin 和 LoopLength 必須為 0。 若要永久迴圈,請將 LoopCount 設定為 XAUDIO2_LOOP_INFINITE。
pContext
要以回呼傳回給用戶端的內容值。 這可能是 Null。
備註
XAudio2 音訊資料交錯,來自每個通道的資料會與特定樣本編號相鄰。 例如,如果有 4 個通道波浪播放到 XAudio2 來源語音,音訊資料會是通道 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 回呼) 停止或終結為止。
平臺需求
Windows 10 (XAudio2.9) ;Windows 8,Windows Phone 8 (XAudio 2.8) ;DirectX SDK (XAudio 2.7)規格需求
標頭 | xaudio2.h |