Acoustic Echo Cancellation
Streaming Sound Wave unterstützt zusammen mit seinen abgeleiteten Typen wie Capturable Sound Wave Acoustic Echo Cancellation (AEC). AEC entfernt Echo von aufgenommenem Mikrofonaudio, das durch die Wiedergabe eines Render-Signals verursacht wird (z. B. Audio, das über Lautsprecher abgespielt wird). Das Ergebnis ist eine sauberere Sprachaufnahme in Echtzeit-Kommunikationsszenarien.
Das Plugin bietet AEC durch die WebRTC AEC3-Implementierung, verfügbar als leichtgewichtiges Erweiterungs-Plugin, das nur den relevanten AEC3-Code enthält. WebRTC AEC3 ist ein hochwertiger akustischer Echokompensator, der in Echtzeit-Kommunikationsanwendungen weit verbreitet ist. Es modelliert den akustischen Pfad zwischen Lautsprechern und Mikrofon, um das Echo vom aufgenommenen Signal zu subtrahieren.
Installation
Um Acoustic Echo Cancellation zu nutzen, müssen Sie das WebRTC AEC3-Erweiterungs-Plugin installieren:
- Stellen Sie sicher, dass das Runtime Audio Importer-Plugin bereits in Ihrem Projekt installiert ist
- Laden Sie das WebRTC AEC3-Erweiterungs-Plugin von hier herunter
- Entpacken Sie den Ordner aus dem heruntergeladenen Archiv in den
Plugins-Ordner Ihres Projekts (erstellen Sie diesen Ordner, falls er nicht existiert) - Erstellen Sie Ihr Projekt neu (diese Erweiterung erfordert ein C++-Projekt)
- WebRTC AEC3 unterstützt alle Engine-Versionen, die von Runtime Audio Importer unterstützt werden (UE 4.24, 4.25, 4.26, 4.27, 5.0, 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7 und 5.8)
- Diese Erweiterung wird als Quellcode bereitgestellt und erfordert ein C++-Projekt zur Nutzung
- WebRTC AEC3 ist für Windows, Linux, Mac, Android (einschließlich Meta Quest) und iOS verfügbar
- Für weitere Informationen zum manuellen Erstellen von Plugins siehe das Building Plugins-Tutorial
Grundlegende Verwendung
Der typische AEC-Arbeitsablauf umfasst drei Schritte:
- AEC aktivieren bei Ihrer Streaming/Capturable Sound Wave
- Render-Chunk-Größe konfigurieren bei der Render Sound Wave für eine 10 ms Frame-Auslieferung
- Render Sound Wave binden, deren Audio verwendet wird, um Echo vom Aufnahmesignal zu unterdrücken
AEC aktivieren
Um AEC nach dem Erstellen einer Streaming Sound Wave zu aktivieren, verwenden Sie die Funktion ToggleAEC. Sie müssen die Abtastrate und die Anzahl der Kanäle für den AEC-Prozessor angeben. Wenn das eingehende Aufnahme- oder Render-Audio nicht mit diesen Werten übereinstimmt, wird es automatisch neu abgetastet, jedoch beeinflusst die konfigurierte Abtastrate dennoch die Qualität (z. B. liefert 48000 Hz eine bessere Echounterdrückung als 16000 Hz) und die Leistung. Daher ist es sinnvoll, diese Werte bewusst zu wählen, anstatt sie der Neuabtastung zu überlassen.
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
StreamingSoundWave->ToggleAEC(true, 48000, 1);
Sie können überprüfen, ob AEC derzeit aktiviert ist:
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
bool bEnabled = StreamingSoundWave->IsAECEnabled();
Konfigurieren der Render-Chunk-Größe
WebRTC AEC3 erfordert, dass Audiodaten in 10-ms-Blöcken verarbeitet werden. Um sicherzustellen, dass die Render-Sound-Wave die Audiodaten in der korrekten Frame-Größe liefert, verwenden Sie die Funktion SetNumSamplesPerChunk auf der Render-Imported Sound Wave (die Sound Wave, die über die Lautsprecher wiedergegeben wird).
Die Formel zur Berechnung der korrekten Anzahl von Samples pro Chunk lautet:
Zum Beispiel, für 48.000 Hz Audio: 48000 / 100 = 480 Samples pro Chunk.
- Blueprint
- C++

// Assuming ImportedSoundWave is a UE reference to a UImportedSoundWave object (the render sound wave being played through speakers)
ImportedSoundWave->SetNumSamplesPerChunk(ImportedSoundWave->GetSampleRate() / 100);
Binden der Render-Sound-Wave
Nachdem AEC aktiviert und die Chunk-Größe konfiguriert wurde, binden Sie die Render-Sound-Wave, deren Audio verwendet wird, um Echo aus dem Aufnahmesignal zu erkennen und zu entfernen. Dies ist in der Regel die Sound Wave, die über Lautsprecher abgespielt wird und die das Mikrofon möglicherweise aufnimmt:
- Blueprint
- C++

// Assuming StreamingSoundWave is the capture sound wave (microphone input) with AEC enabled
// (can also be a UCapturableSoundWave, which is the most common use case)
// Assuming ImportedSoundWave is the render sound wave being played through speakers
StreamingSoundWave->BindAECToSoundWavePlayback(ImportedSoundWave);
So heben Sie die Bindung der Render-Sound-Wave auf:
- Blueprint
- C++

// Assuming StreamingSoundWave is the capture sound wave (microphone input) with AEC enabled
// (can also be a UCapturableSoundWave, which is the most common use case)
// Assuming ImportedSoundWave is the render sound wave being played through speakers
StreamingSoundWave->UnbindAECFromSoundWavePlayback(ImportedSoundWave);
Zusätzliche Konfiguration
Stream-Verzögerung
Sie können die geschätzte Stream-Verzögerung (in Millisekunden) zwischen dem Render- und Capture-Audiopfad einstellen. Dies berücksichtigt Hardware- und Systemlatenz, obwohl WebRTC AEC3 diese in vielen Fällen automatisch schätzen kann:
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
StreamingSoundWave->SetAECStreamDelay(50);
AEC zurücksetzen
Sie können den internen Zustand des AEC-Prozessors jederzeit zurücksetzen und so das angesammelte Echomodell löschen:
- Blueprint
- C++

StreamingSoundWave->ResetAEC();
WebRTC AEC3 unterstützt Abtastraten von 8000, 16000, 32000 und 48000 Hz. Nicht übereinstimmendes Audio wird automatisch neu abgetastet, dies führt jedoch zu einem Leistungsaufwand. Für beste Qualität und Leistung verwenden Sie 48000 Hz und stimmen Sie die tatsächliche Audiokonfiguration des Aufnahme- und Wiedergabestreams ab.