Udostępnij za pośrednictwem


Instrukcje: inicjowanie interfejsu XAudio2

Zainicjuj XAudio2 do odtwarzania audio, tworząc wystąpienie silnika XAudio2, a następnie tworząc głos główny.

  1. 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;
    
  2. 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));
    
  3. 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.