XAudio2 載入並播放 .wav 檔案。
下列各節說明如何在 XBOX One 開發套件上使用 XAudio2 載入並播放音效。
如需可運作的 XAudio2 範例,請從 Microsoft Game Development Kit (GDK) 範例下載 SimplePlaySound 範例。
重要的 XAudio2 資料類型
XAudio2 提供數種資料類型,協助您在 XBOX One 上播放音效。若要播放 .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()。
