Cancellazione dell'eco acustica
Streaming Sound Wave, insieme ai suoi tipi derivati come Capturable Sound Wave, supporta la cancellazione dell'eco acustica (AEC). AEC rimuove l'eco dall'audio catturato dal microfono causato dalla riproduzione di un segnale di rendering (ad esempio, audio riprodotto attraverso gli altoparlanti). Il risultato è una cattura vocale più pulita in scenari di comunicazione in tempo reale.
Il plugin fornisce l'AEC attraverso l'implementazione WebRTC AEC3, disponibile come plugin di estensione leggero che include solo il codice AEC3 pertinente. WebRTC AEC3 è un cancellatore di eco acustica di alta qualità ampiamente utilizzato nelle applicazioni di comunicazione in tempo reale. Modella il percorso acustico tra gli altoparlanti e il microfono per sottrarre l'eco dal segnale catturato.
Installazione
Per utilizzare la cancellazione dell'eco acustica, è necessario installare il plugin di estensione WebRTC AEC3:
- Assicurati che il plugin Runtime Audio Importer sia già installato nel tuo progetto
- Scarica il plugin di estensione WebRTC AEC3 da qui
- Estrai la cartella dall'archivio scaricato nella cartella
Pluginsdel tuo progetto (crea questa cartella se non esiste) - Ricostruisci il tuo progetto (questa estensione richiede un progetto C++)
- WebRTC AEC3 supporta tutte le versioni del motore supportate da 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 e 5.8)
- Questa estensione viene fornita come codice sorgente e richiede un progetto C++ per l'uso
- WebRTC AEC3 è disponibile per Windows, Linux, Mac, Android (incluso Meta Quest) e iOS
- Per maggiori informazioni su come compilare manualmente i plugin, consulta il tutorial Building Plugins
Utilizzo di base
Il tipico flusso di lavoro AEC prevede tre passaggi:
- Abilita AEC sulla tua sound wave di streaming/catturabile
- Configura la dimensione del chunk di rendering sulla sound wave di rendering per la consegna di frame a 10 ms
- Associa la sound wave di rendering il cui audio verrà utilizzato per cancellare l'eco dal segnale catturato
Abilitazione di AEC
Per abilitare l'AEC dopo aver creato una sound wave di streaming, utilizza la funzione ToggleAEC. Devi specificare la frequenza di campionamento e il numero di canali per il processore AEC. Se l'audio in ingresso di cattura o di rendering non corrisponde a questi valori, verrà ricampionato automaticamente; tuttavia, la frequenza di campionamento configurata influisce comunque sulla qualità (ad esempio, 48000 Hz produrrà una migliore cancellazione dell'eco rispetto a 16000 Hz) e sulle prestazioni, quindi vale la pena scegliere deliberatamente questi valori piuttosto che lasciare che avvenga il ricampionamento.
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
StreamingSoundWave->ToggleAEC(true, 48000, 1);
Puoi verificare se l'AEC è attualmente abilitato:
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
bool bEnabled = StreamingSoundWave->IsAECEnabled();
Configurazione della dimensione del blocco di render
WebRTC AEC3 richiede che l'audio venga elaborato in blocchi da 10 ms. Per garantire che l'onda sonora di render fornisca i dati audio nella dimensione corretta del frame, utilizza la funzione SetNumSamplesPerChunk sulla [Imported Sound Wave] di render (l'onda sonora riprodotta attraverso gli altoparlanti).
La formula per calcolare il numero corretto di campioni per blocco è:
Ad esempio, per l'audio a 48000 Hz: 48000 / 100 = 480 campioni per 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);
Associazione della Render Sound Wave
Dopo aver abilitato l'AEC e configurato la dimensione dei chunk, associa la render sound wave il cui audio verrà utilizzato per identificare e rimuovere l'eco dal segnale di acquisizione. Questa è tipicamente l'onda sonora riprodotta attraverso gli altoparlanti che il microfono potrebbe captare:
- 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);
Per scollegare l'onda sonora di rendering:
- 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);
Configurazione aggiuntiva
Ritardo dello stream
È possibile impostare il ritardo di streaming stimato (in millisecondi) tra i percorsi audio di rendering e di acquisizione. Questo tiene conto della latenza hardware e di sistema, sebbene WebRTC AEC3 possa stimarlo automaticamente in molti casi:
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
StreamingSoundWave->SetAECStreamDelay(50);
Reimpostazione dell'AEC
È possibile reimpostare lo stato del processore AEC interno in qualsiasi momento, cancellando qualsiasi modello di eco accumulato:
- Blueprint
- C++

StreamingSoundWave->ResetAEC();
WebRTC AEC3 supporta frequenze di campionamento di 8000, 16000, 32000 e 48000 Hz. L'audio non corrispondente viene ricampionato automaticamente, ma ciò comporta un overhead di prestazioni. Per la migliore qualità e prestazioni, utilizzare 48000 Hz e far corrispondere la configurazione audio effettiva sia dei flussi di acquisizione che di riproduzione.