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

Streaming Sound Wave

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

подсказка

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

Создание Streaming Sound Wave

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

Create Streaming Sound Wave node

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

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

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

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

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

Узел Pre Allocate Audio Data

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

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

Append Audio Data node

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

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

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

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

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

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

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

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

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

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

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

On Populate Audio State

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

On Populate Audio State delegate

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

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