Partilhar via


Como: Inicializar XAudio2

Você inicializa o XAudio2 para reprodução de áudio criando uma instância do motor XAudio2 e, em seguida, criando uma voz de masterização.

  1. Primeiro, você precisa ter inicializado COM. Se você estiver usando C++/WinRT , ele será atendido. Se você não tiver certeza de que seu ambiente já inicializou COM, poderá chamar CoInitializeEx desde que verifique o valor de retorno.

    HRESULT hr = ::CoInitializeEx(nullptr, COINIT_MULTITHREADED);
    if (FAILED(hr)) return hr;
    
  2. Para criar uma instância do mecanismo XAudio2, chame a função XAudio2Create. Isso dar-lhe-á um ponteiro para uma interface IXAudio2 , e é uma boa ideia armazená-lo num membro de dados de classe. Neste trecho, estamos usando um ponteiro inteligente C++/WinRT, mas você pode usar um ponteiro bruto, se necessário.

    winrt::com_ptr<IXAudio2> m_xAudio2{};
    ...
    winrt::check_hresult(::XAudio2Create(m_xAudio2.put(), 0, XAUDIO2_DEFAULT_PROCESSOR));
    
  3. Em seguida, para criar o que é conhecido como uma voz de masterização, chame o método IXAudio2::CreateMasteringVoice. Isso lhe dará um ponteiro para a interface de IXAudio2MasteringVoice . Uma masterização de vozes encapsula um dispositivo de áudio. É o destino final de todo o áudio que passa por um gráfico de áudio.

    IXAudio2MasteringVoice* m_pXAudio2MasteringVoice{};
    ...
    winrt::check_hresult(xAudio2->CreateMasteringVoice(&m_pXAudio2MasteringVoice));
    

Ponteiros inteligentes

Para segurança e conveniência, pode-se usar um ponteiro inteligente para a interface IXAudio2. Mas as interfaces de voz (como IXAudio2MasteringVoice) não têm um método Release, então verás um erro de compilação se tentares usar um ponteiro inteligente para elas. Nesses trechos de código, usamos um ponteiro inteligente quando possível e um ponteiro bruto quando necessário.