Instrukcje: inicjowanie interfejsu XAudio2
Zainicjuj XAudio2 do odtwarzania audio, tworząc wystąpienie silnika XAudio2, a następnie tworząc głos główny.
Najpierw musisz zainicjować COM. Jeśli używasz C++/WinRT, to jest to już załatwione. Jeśli nie masz pewności, że środowisko już zainicjowało model COM, możesz wywołać metodę CoInitializeEx, o ile sprawdzasz wartość zwracaną.
HRESULT hr = ::CoInitializeEx(nullptr, COINIT_MULTITHREADED); if (FAILED(hr)) return hr;
Aby utworzyć wystąpienie silnika XAudio2, wywołaj funkcję XAudio2Create. Da to wskaźnik do interfejsu IXAudio2 i dobrym pomysłem jest przechowywanie go jako członka klasy. W tym fragmencie kodu używamy inteligentnego wskaźnika C++/WinRT, ale w razie potrzeby można użyć nieprzetworzonego wskaźnika.
winrt::com_ptr<IXAudio2> m_xAudio2{}; ... winrt::check_hresult(::XAudio2Create(m_xAudio2.put(), 0, XAUDIO2_DEFAULT_PROCESSOR));
Następnie, aby utworzyć to, co jest znane jako głos mistrzowski, wywołaj metodę IXAudio2::CreateMasteringVoice. To zapewni Ci wskaźnik do interfejsu IXAudio2MasteringVoice. Głosy w procesie masteringu otaczają urządzenie dźwiękowe. Jest to ostateczne miejsce docelowe dla wszystkich dźwięków przechodzących przez graf dźwiękowy.
IXAudio2MasteringVoice* m_pXAudio2MasteringVoice{}; ... winrt::check_hresult(xAudio2->CreateMasteringVoice(&m_pXAudio2MasteringVoice));
Inteligentne wskaźniki
Dla bezpieczeństwa i wygody można użyć inteligentnego wskaźnika dla interfejsu IXAudio2. Jednak interfejsy dźwiękowe (takie jak IXAudio2MasteringVoice) nie mają metody Release, więc pojawi się błąd kompilacji, jeśli spróbujesz użyć sprytnego wskaźnika dla tych. W tych fragmentach kodu używamy inteligentnego wskaźnika tam, gdzie to możliwe, oraz nieprzetworzonego wskaźnika tam, gdzie jest to konieczne.
Tematy pokrewne
- Rozpoczęcie pracy z XAudio2
- Jak ładować pliki danych audio w XAudio2
- Instrukcje: odtwarzanie dźwięku za pomocą XAudio2