Freigeben über


Vorgehensweise: Initialisieren von XAudio2

Sie initialisieren XAudio2 für die Audiowiedergabe, indem Sie eine Instanz des XAudio2-Moduls erstellen und dann eine Masterstimme erstellen.

  1. Zunächst müssen Sie COM initialisiert haben. Wenn Sie C++/WinRT verwenden, wird dies automatisch erledigt. Wenn Sie nicht sicher sind, ob COM in Ihrer Umgebung bereits initialisiert wurde, können Sie CoInitializeEx aufrufen, solange Sie den Rückgabewert überprüfen.

    HRESULT hr = ::CoInitializeEx(nullptr, COINIT_MULTITHREADED);
    if (FAILED(hr)) return hr;
    
  2. Rufen Sie zum Erstellen einer Instanz des XAudio2-Moduls die XAudio2Create-Funktion auf. Dadurch erhalten Sie einen Zeiger auf eine IXAudio2-Schnittstelle, und es empfiehlt sich, dies in einem Klassendatenmember zu speichern. In diesem Codeausschnitt verwenden wir einen intelligenten C++/WinRT-Zeiger, aber Sie können bei Bedarf einen unformatierten Zeiger verwenden.

    winrt::com_ptr<IXAudio2> m_xAudio2{};
    ...
    winrt::check_hresult(::XAudio2Create(m_xAudio2.put(), 0, XAUDIO2_DEFAULT_PROCESSOR));
    
  3. Rufen Sie als Nächstes die IXAudio2::CreateMasteringVoice-Methode auf, um die Masterstimme zu erstellen. Dadurch erhalten Sie einen Zeiger auf eine IXAudio2MasteringVoice-Schnittstelle. Eine Masterstimme kapselt ein Audiogerät. Es ist das ultimative Ziel für alle Audiodaten, die über ein Audiodiagramm übergeben werden.

    IXAudio2MasteringVoice* m_pXAudio2MasteringVoice{};
    ...
    winrt::check_hresult(xAudio2->CreateMasteringVoice(&m_pXAudio2MasteringVoice));
    

Intelligente Zeiger

Für Sicherheit und Komfort können Sie einen intelligenten Zeiger für die IXAudio2-Schnittstelle verwenden. Die Sprachschnittstellen (z. B. IXAudio2MasteringVoice) verfügen jedoch nicht über eine Release-Methode , daher wird ein Buildfehler angezeigt, wenn Sie versuchen, einen intelligenten Zeiger für diese zu verwenden. In diesen Codeausschnitten verwenden wir nach Möglichkeit einen intelligenten Zeiger und bei Bedarf einen unformatierten Zeiger.