如何:使用 XAudio2 播放声音
本主题介绍在 XAudio2 中播放以前加载的音频数据所需的最低步骤。 初始化 XAudio2 (请参阅 How to: Initialize XAudio2) 并加载音频数据 (请参阅How to: How to: Load Audio Data Files in XAudio2) ,您可以通过创建源语音并将音频数据传递给它来播放声音。
播放声音
按照如何:初始化 XAudio2 中所述的步骤初始化 XAudio2 引擎。
按照如何:在 XAudio2 中加载音频数据文件中所述的步骤,填充 WAVEFORMATEX 和 XAUDIO2_BUFFER 结构。
注意
根据音频数据的格式,可能需要使用包含 WAVEFORMATEX 结构的较大数据结构来代替 WAVEFORMATEX。 有关详细信息,请参阅 WAVEFORMATEX 参考页。
通过在 XAudio2 引擎实例上调用 IXAudio2::CreateSourceVoice 方法创建源语音。 语音的格式由 在 WAVEFORMATEX 结构中设置的值指定。
IXAudio2SourceVoice* pSourceVoice; if( FAILED(hr = pXAudio2->CreateSourceVoice( &pSourceVoice, (WAVEFORMATEX*)&wfx ) ) ) return hr;
使用函数 SubmitSourceBuffer 将XAUDIO2_BUFFER提交到源语音。
if( FAILED(hr = pSourceVoice->SubmitSourceBuffer( &buffer ) ) ) return hr;
注意
缓冲点仍由应用“拥有”的音频示例数据,并且必须在声音停止播放之前保持分配和可访问性。
使用 Start 函数启动源语音。 由于默认情况下,所有 XAudio2 语音都会将其输出发送到主语音,因此来自源语音的音频会自动发送到初始化时选择的音频设备。 在更复杂的音频图中,源语音必须指定其输出应发送到的语音。
if ( FAILED(hr = pSourceVoice->Start( 0 ) ) ) return hr;
Windows 应用商店应用说明
建议使用 智能指针 以异常安全方式管理 XAUDIO2 对象的生存期。 对于 Windows 应用商店应用,可以使用 Windows 运行时 C++ 模板库中的 ComPtr 智能指针模板 (WRL) 。
Microsoft::WRL::ComPtr<IXAudio2SourceVoice> SourceVoice;
HRESULT hr;
if( FAILED(hr = pXAudio2->CreateSourceVoice( &SourceVoice, (WAVEFORMATEX*)&wfx ) ) )
throw Platform::Exception::CreateException(hr);
if( FAILED(hr = SourceVoice->SubmitSourceBuffer( &buffer ) ) )
throw Platform::Exception::CreateException(hr);
if ( FAILED(hr = SourceVoice->Start( 0 ) ) )
throw Platform::Exception::CreateException(hr);
注意
在释放 IXAudio2 对象之前,请确保已完全释放指向 XAUDIO2 对象的所有智能指针。
相关主题
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈