如何:使用 XAudio2 播放声音

本主题介绍在 XAudio2 中播放以前加载的音频数据所需的最低步骤。 初始化 XAudio2 (请参阅 How to: Initialize XAudio2) 并加载音频数据 (请参阅How to: How to: Load Audio Data Files in XAudio2) ,您可以通过创建源语音并将音频数据传递给它来播放声音。

播放声音

  1. 按照如何:初始化 XAudio2 中所述的步骤初始化 XAudio2 引擎。

  2. 按照如何:在 XAudio2 中加载音频数据文件中所述的步骤,填充 WAVEFORMATEXXAUDIO2_BUFFER 结构。

    注意

    根据音频数据的格式,可能需要使用包含 WAVEFORMATEX 结构的较大数据结构来代替 WAVEFORMATEX。 有关详细信息,请参阅 WAVEFORMATEX 参考页。

     

  3. 通过在 XAudio2 引擎实例上调用 IXAudio2::CreateSourceVoice 方法创建源语音。 语音的格式由 在 WAVEFORMATEX 结构中设置的值指定。

    IXAudio2SourceVoice* pSourceVoice;
    if( FAILED(hr = pXAudio2->CreateSourceVoice( &pSourceVoice, (WAVEFORMATEX*)&wfx ) ) ) return hr;
    
  4. 使用函数 SubmitSourceBufferXAUDIO2_BUFFER提交到源语音。

    if( FAILED(hr = pSourceVoice->SubmitSourceBuffer( &buffer ) ) )
        return hr;
    

    注意

    缓冲点仍由应用“拥有”的音频示例数据,并且必须在声音停止播放之前保持分配和可访问性。

     

  5. 使用 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 对象的所有智能指针。

 

XAudio2 入门

如何:初始化 XAudio2

如何:在 XAudio2 中加载音频数据文件