Практическое руководство. Воспроизведение звука с помощью XAudio2
В этом разделе описаны минимальные шаги, необходимые для воспроизведения ранее загруженных звуковых данных в XAudio2.
После инициализации XAudio2 (см . практическое руководство. Инициализация XAudio2) и загрузки звуковых данных (см. инструкции. Загрузка файлов аудиоданных в XAudio2) можно воспроизводить звук, создавая исходный голос и передавая звуковые данные в него.
Воспроизведение звука
Сначала инициализировать XAudio2 для воспроизведения звука, выполнив действия, описанные в разделе "Практическое руководство. Инициализация XAudio2".
Затем заполните структуру WAVEFORMATEX и структуру XAUDIO2_BUFFER, выполнив действия, описанные в разделе "Практическое руководство. Загрузка звуковых файлов данных в XAudio2".
Примечание.
В зависимости от формата звуковых данных может потребоваться использовать большую структуру данных (которая содержит структуру WAVEFORMATEX) вместо WAVEFORMATEX. Дополнительные сведения см. в разделе WAVEFORMATEX.
Затем, чтобы создать исходный голос, вызовите метод IXAudio2::CreateSourceVoice . Это даст вам указатель на интерфейс IXAudio2SourceVoice. Формат голоса определяется значениями, заданными в структуре WAVEFORMATEX.
IXAudio2SourceVoice* m_pXAudio2SourceVoice{}; ... winrt::check_hresult(m_xAudio2->CreateSourceVoice(&m_pXAudio2SourceVoice, (WAVEFORMATEX*)&wfx)));
Отправьте XAUDIO2_BUFFER в исходный голос, вызвав метод IXAudio2SourceVoice::SubmitSourceBuffer.
winrt::check_hresult(m_pXAudio2SourceVoice->SubmitSourceBuffer(&xAudio2Buffer));
Примечание.
Звуковые образец данных, на которые указывает параметр pBuffer SubmitSourceBuffer, по-прежнему принадлежит приложению, и он должен оставаться выделенным и доступным, пока звук не перестанет воспроизводиться.
Чтобы запустить исходный голос, вызовите метод IXAudio2SourceVoice::Start . Так как все голоса XAudio2 отправляют их выходные данные в образец по умолчанию, звук из исходного голоса автоматически делает свой путь к созданному или выбранному при инициализации звуковому устройству. В более сложном звуковом графе исходный голос должен указать , какой голос должен быть отправлен.
winrt::check_hresult(m_pXAudio2SourceVoice->Start(0));
Смарт-указатели
Для безопасности и удобства можно использовать смарт-указатель для интерфейса IXAudio2 . Но у голосовых интерфейсов (таких как IXAudio2MasteringVoice) нет метода release , поэтому при попытке использовать смарт-указатель для них появится ошибка сборки. В этих фрагментах кода мы используем умный указатель, где это возможно, и необработанный указатель, где это необходимо.