Tutorial: Inicializar XAudio2
Para inicializar XAudio2 para la reproducción de audio, cree una instancia del motor de XAudio2 y luego cree una voz maestra.
En primer lugar, debe haber inicializado COM. Si usa C++/WinRT, este se encargará de ello. Si no sabe qué entorno ya ha inicializado COM, puede llamar a CoInitializeEx siempre y cuando compruebe el valor devuelto.
HRESULT hr = ::CoInitializeEx(nullptr, COINIT_MULTITHREADED); if (FAILED(hr)) return hr;
Para crear una instancia del motor de XAudio2, llame a la función XAudio2Create. Esto le dará un puntero a una interfaz IXAudio2 y sería conveniente almacenarlo en un miembro de datos de clase. En este fragmento de código se usa un puntero inteligente de C++/WinRT, pero podría usar un puntero sin procesar si es necesario.
winrt::com_ptr<IXAudio2> m_xAudio2{}; ... winrt::check_hresult(::XAudio2Create(m_xAudio2.put(), 0, XAUDIO2_DEFAULT_PROCESSOR));
Después, para crear lo que se conoce como voz maestra, llame al método IXAudio2::CreateMasteringVoice. Eso le dará un puntero a una interfaz IXAudio2MasteringVoice. Un voz maestra encapsula un dispositivo de audio. Es el destino final de todo el audio que pasa a través de una gráfica de audio.
IXAudio2MasteringVoice* m_pXAudio2MasteringVoice{}; ... winrt::check_hresult(xAudio2->CreateMasteringVoice(&m_pXAudio2MasteringVoice));
Punteros inteligentes
Para tener mayor seguridad y sea más cómodo, puede usar un puntero inteligente para la interfaz IXAudio2. Sin embargo, las interfaces de voz (como IXAudio2MasteringVoice) no tienen un método Release, por lo que verá un error de compilación si intenta usar un puntero inteligente para ellas. En estos fragmentos de código usamos un puntero inteligente siempre que sea posible y un puntero sin procesar cuando sea necesario.