Anulowanie echa akustycznego
Streaming Sound Wave, wraz z jego typami pochodnymi, takimi jak Capturable Sound Wave, obsługuje Anulowanie echa akustycznego (AEC). AEC usuwa echo z przechwytywanego dźwięku mikrofonu spowodowane odtwarzaniem sygnału renderującego (np. dźwięku odtwarzanego przez głośniki). Wynikiem jest czystsze przechwytywanie głosu w scenariuszach komunikacji w czasie rzeczywistym.
Wtyczka udostępnia AEC poprzez implementację WebRTC AEC3, dostępną jako lekką wtyczkę rozszerzającą, która zawiera tylko odpowiedni kod AEC3. WebRTC AEC3 to wysokiej jakości tłumik echa akustycznego, szeroko stosowany w aplikacjach komunikacji w czasie rzeczywistym. Modeluje on ścieżkę akustyczną między głośnikami a mikrofonem, aby odjąć echo od przechwytywanego sygnału.
Instalacja
Aby używać Anulowania echa akustycznego, musisz zainstalować wtyczkę rozszerzającą WebRTC AEC3:
- Upewnij się, że wtyczka Runtime Audio Importer jest już zainstalowana w twoim projekcie
- Pobierz wtyczkę rozszerzającą WebRTC AEC3 z tego miejsca
- Wypakuj folder z pobranego archiwum do folderu
Pluginsw swoim projekcie (utwórz ten folder, jeśli nie istnieje) - Przekompiluj swój projekt (to rozszerzenie wymaga projektu C++)
- WebRTC AEC3 obsługuje wszystkie wersje silnika wspierane przez 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 i 5.8)
- To rozszerzenie jest dostarczane jako kod źródłowy i wymaga projektu C++
- WebRTC AEC3 jest dostępny dla systemów Windows, Linux, Mac, Android (w tym Meta Quest) oraz iOS
- Więcej informacji na temat ręcznego budowania wtyczek można znaleźć w poradniku Building Plugins
Podstawowe użycie
Typowy przepływ pracy z AEC obejmuje trzy kroki:
- Włącz AEC na swoim streamingowym/przechwytywalnym Sound Wave
- Skonfiguruj rozmiar fragmentu renderowania na Sound Wave renderującym do dostarczania ramek 10 ms
- Powiąż Sound Wave renderujący, którego dźwięk zostanie użyty do anulowania echa z sygnału przechwyconego
Włączanie AEC
Aby włączyć AEC po utworzeniu streamingowego Sound Wave, użyj funkcji ToggleAEC. Musisz określić częstotliwość próbkowania i liczbę kanałów dla procesora AEC. Jeśli przychodzący dźwięk przechwycony lub renderowany nie pasuje do tych wartości, zostanie automatycznie przeskalowany, jednak skonfigurowana częstotliwość próbkowania nadal wpływa na jakość (np. 48000 Hz zapewni lepsze anulowanie echa niż 16000 Hz) i wydajność, więc warto wybrać te wartości świadomie, zamiast polegać na ponownym próbkowaniu.
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
StreamingSoundWave->ToggleAEC(true, 48000, 1);
Możesz sprawdzić, czy AEC jest aktualnie włączone:
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
bool bEnabled = StreamingSoundWave->IsAECEnabled();
Konfigurowanie rozmiaru fragmentu renderowania
WebRTC AEC3 wymaga, aby dźwięk był przetwarzany w fragmentach 10 ms. Aby upewnić się, że renderująca fala dźwiękowa dostarcza dane audio w odpowiednim rozmiarze klatki, użyj funkcji SetNumSamplesPerChunk na renderującej Imported Sound Wave (fali dźwiękowej odtwarzanej przez głośniki).
Wzór na obliczenie poprawnej liczby próbek na fragment to:
Na przykład, dla dźwięku o częstotliwości 48000 Hz: 48000 / 100 = 480 próbek na fragment.
- 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);
Wiązanie dźwięku Render Sound Wave
Po włączeniu AEC i skonfigurowaniu rozmiaru fragmentu, powiąż dźwięk Render Sound Wave, którego audio zostanie użyte do identyfikacji i usunięcia echa z sygnału przechwytywania. Zazwyczaj jest to dźwięk odtwarzany przez głośniki, który może być wychwytywany przez mikrofon:
- 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);
Aby odwiązać renderowaną falę dźwiękową:
- 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);
Dodatkowa konfiguracja
Opóźnienie strumienia
Można ustawić szacowane opóźnienie strumienia (w milisekundach) pomiędzy ścieżkami audio renderowania i przechwytywania. Uwzględnia to opóźnienia sprzętowe i systemowe, chociaż WebRTC AEC3 może je automatycznie oszacować w wielu przypadkach:
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
StreamingSoundWave->SetAECStreamDelay(50);
</TabItem>
</Tabs>
### Resetowanie AEC
Możesz zresetować stan wewnętrznego procesora AEC w dowolnym momencie, usuwając nagromadzony model echa:
<Tabs groupId="languages">
<TabItem value="blueprint" label="Blueprint">

</TabItem>
<TabItem value="c++" label="C++">
StreamingSoundWave->ResetAEC();
WebRTC AEC3 obsługuje częstotliwości próbkowania 8000, 16000, 32000 i 48000 Hz. Niedopasowane audio jest automatycznie ponownie próbkowane, ale wiąże się to z narzutem wydajnościowym. Aby uzyskać najlepszą jakość i wydajność, używaj częstotliwości 48000 Hz i dopasuj rzeczywistą konfigurację audio zarówno dla strumieni przechwytywania, jak i renderowania.