Anulowanie Echa Akustycznego
Streaming Sound Wave, wraz z 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 renderowania (np. dźwięku odtwarzanego przez głośniki). Rezultatem jest czystsze przechwytywanie głosu w scenariuszach komunikacji w czasie rzeczywistym.
Wtyczka zapewnia AEC poprzez implementację WebRTC AEC3, dostępną jako lekka wtyczka rozszerzająca, która dostarcza tylko odpowiedni kod AEC3. WebRTC AEC3 to wysokiej jakości anulator 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 z 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 stąd: link
- Wypakuj folder z pobranego archiwum do folderu
Pluginstwojego projektu (utwórz ten folder, jeśli nie istnieje) - Przebuduj swój projekt (to rozszerzenie wymaga projektu C++)
- WebRTC AEC3 obsługuje wszystkie wersje silnika obsługiwane 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 i 5.7)
- To rozszerzenie jest dostarczane jako kod źródłowy i wymaga projektu C++ do użycia
- Aby uzyskać więcej informacji na temat ręcznego budowania wtyczek, zobacz samouczek Building Plugins
Podstawowe Użycie
Typowy przepływ pracy AEC obejmuje trzy kroki:
- Włącz AEC na swojej strumieniowej/przechwytywalnej fali dźwiękowej
- Skonfiguruj rozmiar porcji renderowania na fali dźwiękowej renderowania dla dostarczania klatek 10 ms
- Przypisz falę dźwiękową renderowania, której dźwięk będzie używany do usuwania echa z sygnału przechwytywania
Włączanie AEC
Aby włączyć AEC po utworzeniu strumieniowej fali dźwiękowej, 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 przechwytywania lub renderowania nie pasuje do tych wartości, zostanie automatycznie przetworzony ponownie, jednak skonfigurowana częstotliwość próbkowania nadal wpływa na jakość (np. 48000 Hz da lepsze anulowanie echa niż 16000 Hz) i wydajność, więc warto wybrać te wartości świadomie, a nie pozostawiać tego ponownemu 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 obecnie 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 przetwarzania audio w 10-milisekundowych fragmentach. Aby zapewnić, że renderowana fala dźwiękowa dostarcza dane audio w odpowiednim rozmiarze ramki, użyj funkcji SetNumSamplesPerChunk na renderowanej Imported Sound Wave (fali dźwiękowej odtwarzanej przez głośniki).
Wzór do obliczenia prawidłowej 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 Render Sound Wave
Po włączeniu AEC i skonfigurowaniu rozmiaru fragmentu, należy powiązać render sound wave, którego dźwięk zostanie użyty do zidentyfikowania i usunięcia echa z sygnału przechwytywania. Zazwyczaj jest to sound wave odtwarzany przez głośniki, który może zostać przechwycony 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);
Konfiguracja dodatkowa
Stream Delay
Możesz ustawić szacowane opóźnienie strumienia (w milisekundach) między ścieżkami renderowania i przechwytywania dźwięku. Uwzględnia to opóźnienia sprzętowe i systemowe, choć WebRTC AEC3 może w wielu przypadkach oszacować je automatycznie:
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
StreamingSoundWave->SetAECStreamDelay(50);
Resetowanie AEC
Możesz w dowolnym momencie zresetować stan wewnętrznego procesora AEC, usuwając zgromadzony model echa:
- Blueprint
- C++

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