Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Вы инициализируете XAudio2 для воспроизведения звука, создав экземпляр движка XAudio2, а затем создав мастер-голос.
Сначала необходимо инициализировать COM. Если вы используете C++/WinRT, то это уже учтено. Если вы не уверены, что COM уже инициализирована в вашей среде, следует вызвать CoInitializeEx, проверяя при этом возвращаемое значение.
HRESULT hr = ::CoInitializeEx(nullptr, COINIT_MULTITHREADED); if (FAILED(hr)) return hr;
Чтобы создать экземпляр ядра XAudio2, вызовите функцию XAudio2Create . Это даст вам указатель на интерфейс IXAudio2 , и рекомендуется сохранить его в члене данных класса. В этом фрагменте мы используем смарт-указатель C++/WinRT, но при необходимости можно использовать необработанный указатель.
winrt::com_ptr<IXAudio2> m_xAudio2{}; ... winrt::check_hresult(::XAudio2Create(m_xAudio2.put(), 0, XAUDIO2_DEFAULT_PROCESSOR));
Затем, чтобы создать главный голос, вызовите метод IXAudio2::CreateMasteringVoice . Это даст вам указатель на интерфейс IXAudio2MasteringVoice. Мастеринг голосов охватывает звуковое устройство. Это конечная точка для всего звука, который проходит через аудио граф.
IXAudio2MasteringVoice* m_pXAudio2MasteringVoice{}; ... winrt::check_hresult(xAudio2->CreateMasteringVoice(&m_pXAudio2MasteringVoice));
Смарт-указатели
Для безопасности и удобства можно использовать смарт-указатель для интерфейса IXAudio2 . Но у голосовых интерфейсов (таких как IXAudio2MasteringVoice) нет метода release , поэтому при попытке использовать смарт-указатель для них появится ошибка сборки. В этих фрагментах кода мы используем умный указатель, где это возможно, и необработанный указатель, где это необходимо.