Come inizializzare XAudio2
Inizializza XAudio2 per la riproduzione audio creando un'istanza del motore XAudio2 e quindi creando una voce mastering.
Prima di tutto, è necessario aver inizializzato COM. Se si usa C++/WinRT, viene presa in considerazione. Se non si è certi che l'ambiente abbia già inizializzato COM, è possibile chiamare CoInitializeEx purché si verifichi il valore restituito.
HRESULT hr = ::CoInitializeEx(nullptr, COINIT_MULTITHREADED); if (FAILED(hr)) return hr;
Per creare un'istanza del motore XAudio2, chiamare la funzione XAudio2Create. In questo modo verrà visualizzato un puntatore a un'interfaccia IXAudio2 ed è consigliabile archiviarlo in un membro dati della classe. In questo frammento di codice viene usato un puntatore intelligente C++/WinRT, ma è possibile usare un puntatore non elaborato, se necessario.
winrt::com_ptr<IXAudio2> m_xAudio2{}; ... winrt::check_hresult(::XAudio2Create(m_xAudio2.put(), 0, XAUDIO2_DEFAULT_PROCESSOR));
Successivamente, per creare ciò che è noto come voce mastering, chiamare il metodo IXAudio2::CreateMasteringVoice. Questo ti darà un puntatore a un'interfaccia IXAudio2MasteringVoice . Una voce mastering incapsula un dispositivo audio. È la destinazione finale per tutto l'audio che passa attraverso un grafico audio.
IXAudio2MasteringVoice* m_pXAudio2MasteringVoice{}; ... winrt::check_hresult(xAudio2->CreateMasteringVoice(&m_pXAudio2MasteringVoice));
Puntatori intelligenti
Per motivi di sicurezza e praticità, è possibile usare un puntatore intelligente per l'interfaccia IXAudio2 . Tuttavia, le interfacce vocali (ad esempio IXAudio2MasteringVoice) non hanno un metodo Release , quindi verrà visualizzato un errore di compilazione se si tenta di usare un puntatore intelligente per quelli. In questi frammenti di codice si usa un puntatore intelligente laddove possibile e un puntatore non elaborato, se necessario.