Перейти к основному содержимому

Потоковая звуковая волна

Для обнаружения голосовой активности (VAD) обратитесь к этой странице.

Потоковая звуковая волна — это тип импортированной звуковой волны, которая поддерживает динамическое добавление аудиоданных, даже во время воспроизведения. Она предоставляет те же функции, что и импортированная звуковая волна, например перемотку, и может использоваться в SoundCues и т.д.

Создание потоковой звуковой волны

Сначала вам нужно создать потоковую звуковую волну. Обратите внимание, что следует обращаться с ней как с сильной ссылкой, чтобы предотвратить преждевременное уничтожение (например, присвоив её отдельной переменной в Blueprints или используя UPROPERTY() в C++).

Create Streaming Sound Wave node

Воспроизведение звуковой волны

Вы можете затем воспроизвести эту звуковую волну. Однако это не обязательно делать сейчас, вы можете начать воспроизведение звуковой волны позже.

Различные примеры воспроизведения звуковой волны

Предварительное выделение аудиоданных

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

Узел Pre Allocate Audio Data

Добавление аудиоданных

Для добавления аудиоданных в конец существующего буфера используйте соответствующие функции для динамического добавления аудиоданных. Воспроизведение будет следовать очередности этих добавлений.

Узел Append Audio Data

Предотвращение ускоренного или искаженного воспроизведения аудио

При потоковой передаче аудиоданных во время воспроизведения звуковой волны вы можете столкнуться с ускоренным или искаженным воспроизведением в определенных сценариях. Эта проблема обычно возникает, когда:

  1. Воспроизведение звуковой волны приближается/достигает конца текущего буфера
  2. Новые аудиоданные непрерывно добавляются в потоковую звуковую волну
  3. Воспроизведение "догоняет" входящий поток данных

Вы можете прекратить подачу аудиоданных в любой момент без проблем. Однако для сценариев, требующих непрерывной потоковой передачи (например, потоковая передача аудио в реальном времени), существуют два подхода в зависимости от надежности вашего потока аудиоданных:

Для надежной, стабильной потоковой передачи: Используйте делегат OnPopulateAudioState для начала воспроизведения сразу после получения первого фрагмента.

Для ненадежной потоковой передачи (проблемы с сетью, прерывистые данные): Добавьте дополнительную задержку даже после срабатывания OnPopulateAudioState, чтобы создать больший буфер перед началом воспроизведения.

Использование OnPopulateAudioState для предотвращения проблем с воспроизведением

Примечание: Вы можете прекратить передачу аудиоданных в любой момент без возникновения проблем с воспроизведением. Конкретный подход зависит от надежности вашего потока аудиоданных - используйте немедленное воспроизведение для стабильных потоков или добавьте дополнительную буферизацию для ненадежных потоков (например, при проблемах с сетевым соединением).

Пример использования

В итоге ваша реализация может выглядеть следующим образом:

Пример использования streaming sound wave

О заполнении аудио состояния

Делегат OnPopulateAudioState работает аналогично OnPopulateAudioData, но не передает заполненные аудио данные. Это может быть полезно, когда вы хотите отслеживать момент заполнения аудио данных без передачи массива этих данных, что может повысить производительность.

Делегат On Populate Audio State

Работа с PCM данными

Для доступа к PCM данным в реальном времени во время воспроизведения см. Обработка PCM данных.