如何:使用 XAudio2 播放音效
本主題描述在 XAudio2 中播放先前載入音訊數據所需的最低步驟。
初始化 XAudio2 (請參閱 如何:初始化 XAudio2)並載入音訊數據之後(請參閱如何:如何: 在 XAudio2 中載入音訊數據檔),您可以藉由建立來源語音來播放音效,並將音訊數據傳遞給它。
播放音效
請先依照如何:初始化 XAudio2 中所述 的步驟,初始化 XAudio2 來播放音訊。
然後,依照如何:在 XAudio2 中載入音訊數據檔中所述的步驟,填入一個「BLOB」結構和XAUDIO2_BUFFER結構。
注意
視音訊數據的格式而定,您可能需要使用較大的數據結構(包含一個包含打波子結構的數據結構),以取代打波道器。 如需詳細資訊,請參閱 波解X 主題。
接下來,若要建立所謂的來源語音,請呼叫 IXAudio2::CreateSourceVoice 方法。 這可讓您指向 IXAudio2SourceVoice 介面。 語音的格式是由在 SEMANTICATEX 結構中設定的值所指定。
IXAudio2SourceVoice* m_pXAudio2SourceVoice{}; ... winrt::check_hresult(m_xAudio2->CreateSourceVoice(&m_pXAudio2SourceVoice, (WAVEFORMATEX*)&wfx)));
呼叫 IXAudio2SourceVoice::SubmitSourceBuffer 方法,將XAUDIO2_BUFFER提交至來源語音。
winrt::check_hresult(m_pXAudio2SourceVoice->SubmitSourceBuffer(&xAudio2Buffer));
注意
SubmitSourceBuffer 的 pBuffer 參數所指向的音訊範例數據仍由應用程式所擁有,而且必須保持配置且可存取,直到音效停止播放為止。
若要啟動來源語音,請呼叫 IXAudio2SourceVoice::Start 方法。 由於所有 XAudio2 語音預設都會將其輸出傳送至主控語音,因此來源語音中的音訊會自動移至在初始化時建立/選取的音訊裝置。 在更複雜的音訊圖形中,來源語音必須指定 應傳送其輸出的 語音。
winrt::check_hresult(m_pXAudio2SourceVoice->Start(0));
智慧指標
為了安全性和便利性,您可以使用 IXAudio2 介面的智慧型手機指標。 但是語音介面(例如 IXAudio2MasteringVoice)沒有 Release 方法,因此如果您嘗試針對這些介面使用智慧型手機指標,您將會看到建置錯誤。 在這些代碼段中,我們會盡可能使用智慧型指標,並視需要使用原始指標。