Saltar al contenido principal

Streaming Sound Wave

Un streaming sound wave es un tipo de sonido importado que admite agregar datos de audio dinámicamente, incluso durante la reproducción. Ofrece la misma funcionalidad que un sonido importado, por ejemplo, rebobinado, y se puede usar en SoundCues, etc.

tip

Para la detección de actividad de voz (VAD), consulta esta página.

Crear un streaming sound wave

Primero debes crear un streaming sound wave. Ten en cuenta que debes tratarlo como una referencia fuerte para evitar su destrucción prematura (por ejemplo, asignándolo a una variable separada en Blueprints o usando UPROPERTY() en C++).

Nodo Create Streaming Sound Wave

Reproduciendo la onda de sonido

Luego puedes reproducir esa onda de sonido. Sin embargo, no es necesario hacerlo ahora, puedes comenzar a reproducir la onda de sonido más tarde.

Varios ejemplos de reproducción de una onda de sonido

Pre-asignación de datos de audio

Opcionalmente, puedes pre-asignar datos de audio (bytes) para evitar reasignar todo el búfer PCM cada vez que se añaden nuevos datos de audio.

Nodo Pre Allocate Audio Data

Añadir datos de audio

Para añadir datos de audio al final del búfer existente, utiliza las funciones apropiadas para añadir datos de audio dinámicamente. La reproducción seguirá la secuencia de cola de estas adiciones.

Nodo Append Audio Data

Evitar la reproducción de audio acelerada o distorsionada

Al transmitir datos de audio mientras la onda de sonido se está reproduciendo, puedes experimentar una reproducción de audio acelerada o distorsionada en escenarios específicos. Este problema suele ocurrir cuando:

  1. La reproducción de la onda de sonido está cerca/al final del búfer actual
  2. Se están encolando continuamente nuevos datos de audio en la onda de sonido de streaming
  3. La reproducción alcanza al flujo de datos entrante

Puedes dejar de poblar datos de audio en cualquier momento sin problemas. Sin embargo, para escenarios donde necesitas streaming continuo (como la transmisión de audio en tiempo real), hay dos enfoques dependiendo de la fiabilidad de tu flujo de datos de audio:

Para streaming fiable y consistente: Utiliza el delegado OnPopulateAudioState para iniciar la reproducción inmediatamente después de recibir el primer fragmento.

Para streaming no fiable (problemas de red, datos intermitentes): Añade un retraso adicional incluso después de que se active OnPopulateAudioState para acumular un búfer más grande antes de iniciar la reproducción.

Usando OnPopulateAudioState para evitar problemas de reproducción

Nota: Puedes dejar de poblar datos de audio en cualquier momento sin causar problemas de reproducción. El enfoque exacto depende de la fiabilidad de tu transmisión de datos de audio: usa reproducción inmediata para transmisiones consistentes, o añade un retraso de buffer adicional para transmisiones poco fiables (por ejemplo, problemas de conectividad de red).

Ejemplo de uso

Finalmente, tu implementación podría verse así:

Un ejemplo de uso de una onda de sonido de streaming

On Populate Audio State

El delegado OnPopulateAudioState funciona de manera similar a OnPopulateAudioData pero no transmite los datos de audio poblados. Esto puede ser útil cuando se desea rastrear cuándo se han poblado los datos de audio sin pasar un arreglo de dichos datos, lo que puede mejorar el rendimiento.

On Populate Audio State delegate

Trabajando con Datos PCM

Para acceder en tiempo real a los datos PCM durante la reproducción, consulta Manejo de Datos PCM.