Annulation d'écho acoustique
Streaming Sound Wave, ainsi que ses types dérivés comme Capturable Sound Wave, prend en charge l'annulation d'écho acoustique (AEC). L'AEC supprime l'écho de l'audio capturé par le microphone causé par la lecture d'un signal de rendu (par exemple, l'audio joué par les 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 en tant qu'extension légère qui n'inclut que le code AEC3 pertinent. WebRTC AEC3 est un annuleur d'écho acoustique de haute qualité largement utilisé dans les applications de communication en temps réel. Il modélise le chemin acoustique entre les haut-parleurs et le microphone pour soustraire l'écho du signal capturé.
Installation
Pour utiliser l'annulation d'écho acoustique, vous devez installer l'extension plugin WebRTC AEC3 :
- Assurez-vous que le plugin Runtime Audio Importer est déjà installé dans votre projet
- Téléchargez l'extension plugin 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 du 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 et 5.7)
- Cette extension est fournie sous forme de code source et nécessite un projet C++ pour être utilisée
- Pour plus d'informations sur la construction manuelle des plugins, consultez le tutoriel Building Plugins
Utilisation de base
Le flux de travail typique de l'AEC implique trois étapes :
- Activer l'AEC sur votre streaming/capturable sound wave
- Configurer la taille des blocs de rendu sur le sound wave de rendu pour une livraison par trames de 10 ms
- Lier le sound wave de rendu dont l'audio sera utilisé pour annuler l'écho du signal de capture
Activation de l'AEC
Pour activer l'AEC après avoir créé un streaming sound wave, 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 donnera une meilleure annulation d'écho que 16000 Hz) et les performances, il est donc préférable de choisir ces valeurs délibérément plutôt que de laisser faire le 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 l'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();
Configuration de la Taille des Blocs de Rendu
WebRTC AEC3 nécessite que l'audio soit traité par blocs de 10 ms. Pour garantir que l'onde sonore de rendu fournisse les données audio avec la taille de trame correcte, utilisez la fonction SetNumSamplesPerChunk sur l'onde sonore de rendu Imported Sound Wave (l'onde sonore diffusée par les haut-parleurs).
La formule pour calculer le nombre correct d'échantillons par bloc est :
Par exemple, pour un audio à 48000 Hz : 48000 / 100 = 480 échantillons par segment.
- 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 Render Sound Wave
Après avoir activé l'AEC et configuré la taille des blocs, liez le render sound wave dont l'audio sera utilisé pour identifier et supprimer l'écho du signal de capture. Il s'agit généralement de la forme d'onde sonore diffusée par 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 la forme d'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 streaming
Vous pouvez définir le délai de streaming estimé (en millisecondes) entre les chemins de rendu et de capture audio. Cela permet de compenser 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 interne du processeur AEC à tout moment, effaçant ainsi tout modèle d'écho accumulé :
- Blueprint
- C++

StreamingSoundWave->ResetAEC();
WebRTC AEC3 prend en charge les taux d'échantillonnage de 8000, 16000, 32000 et 48000 Hz. Les audios dont le taux ne correspond pas sont rééchantillonnés automatiquement, mais cela entraîne une surcharge de performance. Pour une qualité et des performances optimales, utilisez 48000 Hz et faites correspondre la configuration audio réelle des flux de capture et de rendu.