Share via


IXAudio2SourceVoice::SubmitSourceBuffer 方法 (xaudio2.h)

將新的音訊緩衝區新增至語音佇列。

語法

HRESULT SubmitSourceBuffer(
  [in] const XAUDIO2_BUFFER     *pBuffer,
  [in] const XAUDIO2_BUFFER_WMA *pBufferWMA
);

參數

[in] pBuffer

要排入佇列之XAUDIO2_BUFFER結構的指標。

[in] pBufferWMA

提交 WMA 數據時使用之其他 XAUDIO2_BUFFER_WMA 結構的指標。

傳回值

如果成功,則傳回S_OK,否則傳回錯誤碼。 如需 XAudio2 特定錯誤碼的描述,請參閱 XAudio2 錯誤 碼。

備註

語音會依提交的順序處理並播放其佇列中的緩衝區。

XAUDIO2_BUFFER 結構包含音訊緩衝區位置和大小的詳細數據、實際播放之緩衝區的一部分、迴圈區域 (如果有任何) 和循環計數,則為要用於與這個緩衝區相關的任何回呼的內容指標,以及選擇性的XAUDIO2_END_OF_STREAM旗標,指出它是連續音效的最後一個緩衝區。

如果語音已啟動且沒有任何緩衝區排入佇列,則新的緩衝區會立即開始播放。 如果停止語音,緩衝區會新增至語音的佇列,並在語音啟動時播放。

如果只應該播放指定緩衝區的一部分,則可以使用XAUDIO2_BUFFER中的 PlayBeginPlayLength 字段來指定要播放的區域。 PlayLength 值為 0 表示播放整個緩衝區 (,在此情況下,PlayBegin 必須是 0,而且) 。

如果應該在連續迴圈中播放所有或部分緩衝區,則可以使用 XAUDIO2_BUFFER 中的LoopBeginLoopLengthLoopCount字段來指定迴圈區域的特性。 XAUDIO2_NO_LOOP_REGION的 LoopBegin 值表示不應該執行迴圈,在此情況下,必須將 LoopLength 和 LoopCount 指定為 0。 如果指定迴圈區域,它必須是非空白的 迴圈 (LoopLength> 0) ,且迴圈計數必須介於 1 到 XAUDIO2_MAX_LOOP_COUNT內含 (或XAUDIO2_LOOP_INFINITE之間,以指定只有在 呼叫 IXAudio2SourceVoice::ExitLoop 時才會結束的無限迴圈) 。 N 的循環計數表示略過 N 次,也就是播放循環區域 N+1 次。

如果指定明確的播放區域,它必須在指定的音頻緩衝區內開始和結束 (,或者,在壓縮的案例中,緩衝區將譯碼為) 。 此外,迴圈區域無法結束於播放區域的結尾。

Xbox 360
針對特定音訊格式,任何播放或循環區域的有效端點可能會有其他限制;例如,對於 XMA 緩衝區,區域只能在譯碼音訊中的 128 個樣本界限開始或結束。
 

pBuffer 指標可以在呼叫這個方法之後立即重複使用或釋放,但 pBuffer 所參考的實際音訊數據必須維持有效狀態,直到 XAudio2 完全取用緩衝區 (,這是由 IXAudio2VoiceCallback::OnBufferEnd 回呼) 。

最多XAUDIO2_MAX_QUEUED_BUFFERS緩衝區可以隨時在語音上排入佇列。

從具有 OperationSet XAUDIO2_COMMIT_NOW的 XAudio2 回呼呼叫時,SubmitSourceBuffer 會立即生效。

Xbox 360
您可以從 Xbox 系統線程呼叫這個方法, (大部分的其他 XAudio2 方法都無法) 。 不過,一次最多可以從系統線程提交兩個來源緩衝區。
 

平臺需求

Windows 10 (XAudio2.9) ;Windows 8,Windows Phone 8 (XAudio 2.8) ;DirectX SDK (XAudio 2.7)

規格需求

需求
目標平台 Windows
標頭 xaudio2.h

另請參閱

使用方法:建立基本音訊處理圖形

使用方法:從磁碟串流處理音效

IXAudio2SourceVoice