Suppression de l'écho acoustique
Streaming Sound Wave, ainsi que ses types dérivés comme Capturable Sound Wave, prend en charge la suppression de l'écho acoustique (AEC). L'AEC supprime l'écho du signal audio capturé par le microphone causé par la lecture d'un signal de rendu (par exemple, de l'audio diffusé par des haut-parleurs). Le résultat est une capture vocale plus propre dans les scénarios de communication en temps réel.
Le plugin fournit l'AEC via l'implémentation WebRTC AEC3, disponible sous forme de plugin d'extension léger qui ne contient que le code AEC3 pertinent. WebRTC AEC3 est un suppresseur d'écho acoustique de haute qualité largement utilisé dans les applications de communication en temps réel. Il modélise le trajet acoustique entre les haut-parleurs et le microphone pour soustraire l'écho du signal capturé.
Installation
Pour utiliser la suppression de l'écho acoustique, vous devez installer le plugin d'extension WebRTC AEC3 :
- Assurez-vous que le plugin Runtime Audio Importer est déjà installé dans votre projet
- Téléchargez le plugin d'extension WebRTC AEC3 depuis ici
- Extrayez le dossier de l'archive téléchargée dans le dossier
Pluginsde votre projet (créez ce dossier s'il n'existe pas) - Recompilez votre projet (cette extension nécessite un projet C++)
- WebRTC AEC3 prend en charge toutes les versions de moteur supportées par Runtime Audio Importer (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, et 5.8)
- Cette extension est fournie sous forme de code source et nécessite un projet C++ pour être utilisée
- WebRTC AEC3 est disponible pour Windows, Linux, Mac, Android (y compris Meta Quest) et iOS
- Pour plus d'informations sur la compilation manuelle des plugins, consultez le tutoriel Building Plugins
Utilisation de base
Le flux de travail typique de l'AEC comprend trois étapes :
- Activer l'AEC sur votre onde sonore de streaming/capturable
- Configurer la taille des segments de rendu sur l'onde sonore de rendu pour une livraison de trames de 10 ms
- Lier l'onde sonore de rendu dont l'audio sera utilisée pour annuler l'écho du signal de capture
Activation de l'AEC
Pour activer l'AEC après avoir créé une onde sonore de streaming, utilisez la fonction ToggleAEC. Vous devez spécifier la fréquence d'échantillonnage et le nombre de canaux pour le processeur AEC. Si l'audio de capture ou de rendu entrant ne correspond pas à ces valeurs, il sera rééchantillonné automatiquement, cependant, la fréquence d'échantillonnage configurée affecte toujours la qualité (par exemple, 48000 Hz offrira une meilleure suppression de l'écho que 16000 Hz) et les performances, il est donc intéressant de choisir ces valeurs délibérément plutôt que de s'en remettre au rééchantillonnage.
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
StreamingSoundWave->ToggleAEC(true, 48000, 1);
Vous pouvez vérifier si AEC est actuellement activé :
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
bool bEnabled = StreamingSoundWave->IsAECEnabled();
Configurer la taille des segments de rendu
WebRTC AEC3 nécessite que l’audio soit traitée par tranches de 10 ms. Pour garantir que le signal audio de rendu délivre les données audio dans la taille de trame correcte, utilisez la fonction SetNumSamplesPerChunk sur le Imported Sound Wave de rendu (le signal audio diffusé par les haut‑parleurs).
La formule pour calculer le nombre correct d’échantillons par segment est :
Par exemple, pour un audio à 48 000 Hz : 48000 / 100 = 480 échantillons par tronçon.
- 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);
Liaison du Sound Wave de Rendu
Après avoir activé l'AEC et configuré la taille des segments, reliez le Sound Wave de rendu dont l'audio sera utilisé pour identifier et supprimer l'écho du signal capté. Il s'agit généralement du Sound Wave diffusé via les haut-parleurs que le microphone pourrait capter :
- 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);
Pour dissocier l'onde sonore de rendu :
- 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);
Configuration supplémentaire
Délai de flux
Vous pouvez définir le délai de flux estimé (en millisecondes) entre les chemins audio de rendu et de capture. Cela tient compte de la latence matérielle et système, bien que WebRTC AEC3 puisse l'estimer automatiquement dans de nombreux cas:
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
StreamingSoundWave->SetAECStreamDelay(50);
Réinitialisation de l'AEC
Vous pouvez réinitialiser l'état du processeur AEC interne à tout moment, ce qui efface tout modèle d'écho accumulé :
- Blueprint
- C++

StreamingSoundWave->ResetAEC();
WebRTC AEC3 prend en charge les fréquences d'échantillonnage de 8000, 16000, 32000 et 48000 Hz. L'audio non concordant est rééchantillonné automatiquement, mais cela entraîne un surcoût de performance. Pour une qualité et des performances optimales, utilisez 48000 Hz et adaptez la configuration audio réelle des flux de capture et de rendu.