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


Практическое руководство. Воспроизведение звука с помощью XAudio2

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

После инициализации XAudio2 (см . практическое руководство. Инициализация XAudio2) и загрузки звуковых данных (см. инструкции. Загрузка файлов аудиоданных в XAudio2) можно воспроизводить звук, создавая исходный голос и передавая звуковые данные в него.

Воспроизведение звука

  1. Сначала инициализировать XAudio2 для воспроизведения звука, выполнив действия, описанные в разделе "Практическое руководство. Инициализация XAudio2".

  2. Затем заполните структуру WAVEFORMATEX и структуру XAUDIO2_BUFFER, выполнив действия, описанные в разделе "Практическое руководство. Загрузка звуковых файлов данных в XAudio2".

    Примечание.

    В зависимости от формата звуковых данных может потребоваться использовать большую структуру данных (которая содержит структуру WAVEFORMATEX) вместо WAVEFORMATEX. Дополнительные сведения см. в разделе WAVEFORMATEX.

  3. Затем, чтобы создать исходный голос, вызовите метод IXAudio2::CreateSourceVoice . Это даст вам указатель на интерфейс IXAudio2SourceVoice. Формат голоса определяется значениями, заданными в структуре WAVEFORMATEX.

    IXAudio2SourceVoice* m_pXAudio2SourceVoice{};
    ...
    winrt::check_hresult(m_xAudio2->CreateSourceVoice(&m_pXAudio2SourceVoice, (WAVEFORMATEX*)&wfx)));    
    
  4. Отправьте XAUDIO2_BUFFER в исходный голос, вызвав метод IXAudio2SourceVoice::SubmitSourceBuffer.

    winrt::check_hresult(m_pXAudio2SourceVoice->SubmitSourceBuffer(&xAudio2Buffer));
    

    Примечание.

    Звуковые образец данных, на которые указывает параметр pBuffer SubmitSourceBuffer, по-прежнему принадлежит приложению, и он должен оставаться выделенным и доступным, пока звук не перестанет воспроизводиться.

  5. Чтобы запустить исходный голос, вызовите метод IXAudio2SourceVoice::Start . Так как все голоса XAudio2 отправляют их выходные данные в образец по умолчанию, звук из исходного голоса автоматически делает свой путь к созданному или выбранному при инициализации звуковому устройству. В более сложном звуковом графе исходный голос должен указать , какой голос должен быть отправлен.

    winrt::check_hresult(m_pXAudio2SourceVoice->Start(0));
    

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

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