Поделиться через


Практическое руководство. Инициализация XAudio2

Вы инициализируете XAudio2 для воспроизведения звука, создав экземпляр подсистемы XAudio2, а затем создайте образец голоса.

  1. Сначала необходимо инициализировать COM. Если вы используете C++/WinRT, это необходимо. Если вы не уверены, что среда уже инициализирована COM, можно вызвать CoInitializeEx до тех пор, пока вы проверяете возвращаемое значение.

    HRESULT hr = ::CoInitializeEx(nullptr, COINIT_MULTITHREADED);
    if (FAILED(hr)) return hr;
    
  2. Чтобы создать экземпляр ядра XAudio2, вызовите функцию XAudio2Create . Это даст вам указатель на интерфейс IXAudio2 , и рекомендуется сохранить его в члене данных класса. В этом фрагменте мы используем смарт-указатель C++/WinRT, но при необходимости можно использовать необработанный указатель.

    winrt::com_ptr<IXAudio2> m_xAudio2{};
    ...
    winrt::check_hresult(::XAudio2Create(m_xAudio2.put(), 0, XAUDIO2_DEFAULT_PROCESSOR));
    
  3. Затем, чтобы создать главный голос, вызовите метод IXAudio2::CreateMasteringVoice . Это даст вам указатель на интерфейс IXAudio2MasteringVoice. Образец голоса инкапсулирует звуковое устройство. Это конечное назначение для всего звука, который проходит через аудиограф.

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

Смарт-указатели

Для безопасности и удобства можно использовать смарт-указатель для интерфейса IXAudio2 . Но у голосовых интерфейсов (таких как IXAudio2MasteringVoice) нет метода release , поэтому при попытке использовать смарт-указатель для них появится ошибка сборки. В этих фрагментах кода мы используем умный указатель, где это возможно, и необработанный указатель, где это необходимо.