Como: inicializar o XAudio2
Você inicializa o XAudio2 para reprodução de áudio criando uma instância do mecanismo XAudio2 e, em seguida, criando uma voz de masterização.
Primeiro, você precisa inicializar o COM. Se você estiver usando C++/WinRT, isso estará resolvido. Se não tiver certeza de que seu ambiente já inicializou o COM, você poderá chamar CoInitializeEx, desde que verifique o valor de retorno.
HRESULT hr = ::CoInitializeEx(nullptr, COINIT_MULTITHREADED); if (FAILED(hr)) return hr;
Para criar uma instância do mecanismo XAudio2, chame a função XAudio2Create. Isso fornecerá um ponteiro para uma interface IXAudio2 e é uma boa ideia armazená-la em um membro de dados da 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));
A seguir, para criar o que é conhecido como voz de masterização, chame o método IXAudio2::CreateMasteringVoice. Isso lhe dará um ponteiro para uma interface 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
Por segurança e conveniência, você pode usar um ponteiro inteligente para a interface IXAudio2. Mas as interfaces de voz (como IXAudio2MasteringVoice) não possuem um método Liberar, então você verá um erro de compilação se tentar usar um ponteiro inteligente para elas. Nestes trechos de código usamos um ponteiro inteligente sempre que possível e um ponteiro bruto quando necessário.