XAudio2 載入並播放 .wav 檔案。
下列各節說明如何在 XBOX One 開發套件上使用 XAudio2 載入並播放音效。
如需可運作的 XAudio2 範例,請從 Microsoft Game Development Kit (GDK) 範例下載 SimplePlaySound 範例。
重要的 XAudio2 資料類型
XAudio2 提供數種資料類型,協助您在 XBOX Series X|S 上播放音效。若要播放 .wav 檔案,您至少需要下列資料類型。
-
IXAudio2:這是XAudio2物件的介面,此物件會管理所有音訊引擎狀態、音訊處理執行緒、語音圖形等。 -
IXAudio2SourceVoice:使用來源語音將音訊資料提交至XAudio2處理管線。語音資料必須傳送至主控語音才能被聽見。 -
IXAudio2MasteringVoice:使用此資料類型來代表音訊輸出裝置。資料緩衝區無法直接提交至主控語音。不過,提交至其他類型語音的資料必須導向至主控語音才能被聽見。
-
PlaySoundVoiceContext:使用此資料類型在處理後釋放音訊緩衝區。 -
IXAudio2VoiceCallback:此資料類型包含在特定IXAudio2SourceVoice中發生某些事件時通知用戶端的方法。
初始化 XAudio2
CoInitializeEx() 會初始化元件物件模型 (COM),供目前的執行緒使用。將第一個參數設定為 NULL。將第二個參數設定為 COINIT_MULTITHREADED。
XAudio2Create() 會建立新的 XAudio2 物件,並傳回其 IXAudio2 介面的指標。請確定 XAUDIO2_PROCESSOR 設定為有效值。建議使用 XAUDIO2_USE_DEFAULT_PROCESSOR 值,讓作業系統根據硬體平台選擇理想的處理器。
IXAudio2::CreateMasteringVoice() 會建立並設定主控語音,並以使用者提供的指標指向它。
C++
載入 .wav 檔案
若要存取音訊檔案,請使用WaveFile 類別的執行個體。
* 若要開啟 .wav 檔案並擷取儲存在檔案標頭中的部分資訊,請呼叫 WaveFile::Open(LPCWSTR strFileName)。
- 若要判斷 .wav 檔案的格式,請呼叫
WaveFile::GetFormat()。 - 若要判斷 .wav 檔案中的位元組數和樣本數,請呼叫
WaveFile::GetDuration()。 - 若要將樣本資料讀入記憶體,請呼叫
WaveFile::ReadSample()。
C++
設定 .wav 檔案的檔案路徑
若要載入並使用音訊檔案,請使用下列程式碼在本機裝置上尋找專案的安裝位置。將安裝位置儲存在字串中。將音訊檔案的位置附加到安裝位置字串的結尾。C++
播放 .wav 檔案
建立IXAudio2::CreateSourceVoice() 類別,然後使用它將音訊資料提交至 XAudio2 處理管線。若要讓語音資料被聽見,您必須將其直接傳送至主控語音,或透過中繼子混音語音傳送。若要儲存音訊檔案的詳細資料,請建立 XAUDIO2_BUFFER。
建立並初始化 XAudio2 緩衝區和來源語音之後,請呼叫 IXAudio2SourceVoice::SubmitSourceBuffer() 將音訊緩衝區加入語音輸入佇列。請注意,XAUDIO2_BUFFER::pAudioData 所指向的音訊資料必須保持有效,直到 XAudio2 完成播放緩衝區的內容為止。
填入語音輸入佇列之後,請呼叫 IXAudio2SourceVoice::Start() 以播放佇列中的下一個音效。
C++
終止 .wav 檔案
若要判斷 .wav 檔案是否已播放完畢,您需要來源語音的目前狀態。建立XAUDIO2_VOICE_STATE 結構,然後呼叫 IXAudio2SourceVoice::GetState()。如果音訊已播放完畢,請呼叫 IXAudio2SourceVoice::DestroyVoice()。
