Zum Hauptinhalt springen

Streaming Sound Wave

Für Voice Activity Detection (VAD) siehe diese Seite.

Eine Streaming-Sound-Wave ist eine Art importierter Sound-Wave, der das dynamische Hinzufügen von Audiodaten unterstützt, sogar während der Wiedergabe. Sie bietet die gleiche Funktionalität wie eine importierte Sound-Wave, z.B. Zurückspulen, und kann in SoundCues usw. verwendet werden.

Erstellen einer Streaming-Sound-Wave

Zuerst sollten Sie eine Streaming-Sound-Wave erstellen. Bitte beachten Sie, dass Sie sie als starke Referenz behandeln sollten, um eine vorzeitige Zerstörung zu verhindern (z.B. durch Zuweisung zu einer separaten Variable in Blueprints oder Verwendung von UPROPERTY() in C++).

Create Streaming Sound Wave node

Abspielen der Schallwelle

Sie können dann diese Schallwelle abspielen. Dies ist jedoch nicht notwendig, um es jetzt zu tun, Sie können mit dem Abspielen der Schallwelle später beginnen.

Verschiedene Beispiele zum Abspielen einer Schallwelle

Vorabzuweisung von Audiodaten

Optional können Sie Audiodaten (Bytes) vorab zuweisen, um eine Neuzuweisung des gesamten PCM-Puffers bei jeder Anfügung neuer Audiodaten zu vermeiden.

Pre Allocate Audio Data node

Anhängen von Audiodaten

Um Audiodaten an das Ende des vorhandenen Puffers anzuhängen, verwenden Sie die entsprechenden Funktionen zum dynamischen Anhängen von Audiodaten. Die Wiedergabe folgt der Warteschlangenreihenfolge dieser Anhänge.

Append Audio Data node

Vermeidung von beschleunigter oder verzerrter Audiowiedergabe

Beim Streamen von Audiodaten während die Soundwelle abgespielt wird, kann es in bestimmten Szenarien zu beschleunigter oder verzerrter Audiowiedergabe kommen. Dieses Problem tritt typischerweise auf, wenn:

  1. Die Soundwellenwiedergabe sich dem Ende/am Ende des aktuellen Puffers befindet
  2. Neue Audiodaten kontinuierlich in die streaming Soundwelle eingereiht werden
  3. Die Wiedergabe den eingehenden Datenstrom einholt

Sie können die Audiodaten jederzeit ohne Probleme stoppen. Für Szenarien, die kontinuierliches Streaming erfordern (wie Echtzeit-Audiostreaming), gibt es jedoch zwei Ansätze, abhängig von der Zuverlässigkeit Ihres Audiodaten-Streamings:

Für zuverlässiges, konsistentes Streaming: Verwenden Sie den OnPopulateAudioState-Delegaten, um die Wiedergabe unmittelbar nach Empfang des ersten Datenblocks zu starten.

Für unzuverlässiges Streaming (Netzwerkprobleme, unterbrochene Daten): Fügen Sie eine zusätzliche Verzögerung hinzu, selbst nachdem OnPopulateAudioState ausgelöst wurde, um einen größeren Puffer aufzubauen, bevor die Wiedergabe beginnt.

Verwendung von OnPopulateAudioState zur Vermeidung von Wiedergabeproblemen

Hinweis: Sie können die Bereitstellung von Audiodaten jederzeit beenden, ohne dass dies zu Wiedergabeproblemen führt. Der genaue Ansatz hängt von der Zuverlässigkeit Ihres Audiodaten-Streamings ab - verwenden Sie sofortige Wiedergabe für konsistente Streams oder fügen Sie zusätzliche Pufferverzögerung für unzuverlässige Streams hinzu (z.B. bei Netzwerkverbindungsproblemen).

Beispielverwendung

Schließlich könnte Ihre Implementierung wie folgt aussehen:

Ein Beispiel für die Verwendung eines Streaming-Sound-Waves

On Populate Audio State

Der OnPopulateAudioState-Delegate funktioniert ähnlich wie OnPopulateAudioData, überträgt jedoch nicht die befüllten Audiodaten. Dies kann nützlich sein, wenn Sie verfolgen möchten, wann die Audiodaten befüllt werden, ohne ein Array der befüllten Audiodaten zu übergeben, was die Leistung verbessern kann.

On Populate Audio State delegate

Arbeiten mit PCM-Daten

Für den Echtzeitzugriff auf PCM-Daten während der Wiedergabe siehe PCM Data Handling.