Aller au contenu principal

Streaming Sound Wave

Un streaming sound wave est un type de son importé qui prend en charge l'ajout dynamique de données audio, même pendant la lecture. Il offre les mêmes fonctionnalités qu'un son importé, par exemple la remise à zéro, et peut être utilisé dans des SoundCues, etc.

astuce

Pour la détection d'activité vocale (VAD), consultez cette page.

Créer un streaming sound wave

Vous devez d'abord créer un streaming sound wave. Veuillez noter que vous devez le traiter comme une référence forte pour éviter sa destruction prématurée (par exemple en l'assignant à une variable séparée dans Blueprints ou en utilisant UPROPERTY() en C++).

Create Streaming Sound Wave node

Lecture de la forme d'onde sonore

Vous pouvez ensuite lire cette forme d'onde sonore. Cependant, ce n'est pas nécessaire de le faire maintenant, vous pouvez commencer à lire la forme d'onde sonore plus tard.

Divers exemples de lecture d'une forme d'onde sonore

Pré-allocation des données audio

En option, vous pouvez pré-allouer des données audio (octets) pour éviter de réallouer l'intégralité du tampon PCM chaque fois que de nouvelles données audio sont ajoutées.

Nœud Pre Allocate Audio Data

Ajout de données audio

Pour ajouter des données audio à la fin du tampon existant, utilisez les fonctions appropriées pour ajouter dynamiquement des données audio. La lecture suivra la séquence de file d'attente de ces ajouts.

Append Audio Data node

Éviter la lecture audio accélérée ou déformée

Lors du streaming de données audio pendant la lecture de l'onde sonore, vous pouvez rencontrer une lecture audio accélérée ou déformée dans des scénarios spécifiques. Ce problème se produit généralement lorsque :

  1. La lecture de l'onde sonore est proche/à la fin du tampon actuel
  2. De nouvelles données audio sont continuellement mises en file d'attente dans l'onde sonore de streaming
  3. La lecture rattrape le flux de données entrant

Vous pouvez arrêter de peupler les données audio à tout moment sans problème. Cependant, pour les scénarios nécessitant un streaming continu (comme le streaming audio en temps réel), il existe deux approches selon la fiabilité de votre flux de données audio :

Pour un streaming fiable et constant : Utilisez le délégué OnPopulateAudioState pour démarrer la lecture immédiatement après la réception du premier fragment.

Pour un streaming peu fiable (problèmes réseau, données intermittentes) : Ajoutez un délai supplémentaire même après le déclenchement de OnPopulateAudioState pour constituer un tampon plus important avant de démarrer la lecture.

Utilisation de OnPopulateAudioState pour éviter les problèmes de lecture

Remarque : Vous pouvez arrêter de peupler les données audio à tout moment sans provoquer de problèmes de lecture. L'approche exacte dépend de la fiabilité de votre flux de données audio - utilisez la lecture immédiate pour des flux constants, ou ajoutez un délai de tampon supplémentaire pour des flux peu fiables (par exemple, des problèmes de connectivité réseau).

Exemple d'utilisation

Finalement, votre implémentation pourrait ressembler à ceci :

Un exemple d'utilisation d'une onde sonore en streaming

On Populate Audio State

Le délégué OnPopulateAudioState fonctionne de manière similaire à OnPopulateAudioData mais ne diffuse pas les données audio peuplées. Cela peut être utile lorsque vous souhaitez suivre le moment où les données audio sont peuplées sans passer un tableau de ces données, ce qui peut améliorer les performances.

On Populate Audio State delegate

Travailler avec les données PCM

Pour un accès en temps réel aux données PCM pendant la lecture, consultez Gestion des données PCM.