Akustik Yankı Giderme
Streaming Sound Wave ve ondan türetilen Capturable Sound Wave gibi türler, Akustik Yankı Giderme'yi (AEC) destekler. AEC, bir render sinyalinin (örneğin, hoparlörlerden çalan ses) oynatılmasından kaynaklanan, yakalanan mikrofon sesindeki yankıyı giderir. Sonuç, gerçek zamanlı iletişim senaryolarında daha temiz bir ses yakalamadır.
Eklenti, AEC'yi WebRTC AEC3 uygulaması aracılığıyla, yalnızca ilgili AEC3 kodunu içeren hafif bir uzantı eklentisi olarak sağlar. WebRTC AEC3, gerçek zamanlı iletişim uygulamalarında yaygın olarak kullanılan yüksek kaliteli bir akustik yankı gidericidir. Hoparlörler ve mikrofon arasındaki akustik yolu modelleyerek, yakalanan sinyalden yankıyı çıkarır.
Kurulum
Akustik Yankı Giderme'yi kullanmak için WebRTC AEC3 uzantı eklentisini kurmanız gerekir:
- Runtime Audio Importer eklentisinin projenizde zaten kurulu olduğundan emin olun
- WebRTC AEC3 uzantı eklentisini buradan indirin
- İndirilen arşivdeki klasörü projenizin
Pluginsklasörüne çıkarın (bu klasör yoksa oluşturun) - Projenizi yeniden derleyin (bu uzantı bir C++ projesi gerektirir)
- WebRTC AEC3, Runtime Audio Importer tarafından desteklenen tüm motor sürümlerini destekler (UE 4.24, 4.25, 4.26, 4.27, 5.0, 5.1, 5.2, 5.3, 5.4, 5.5, 5.6 ve 5.7)
- Bu uzantı kaynak kodu olarak sağlanır ve kullanmak için bir C++ projesi gerektirir
- WebRTC AEC3, Windows, Linux, Mac, Android (Meta Quest dahil) ve iOS için mevcuttur
- Eklentileri manuel olarak nasıl oluşturacağınız hakkında daha fazla bilgi için Building Plugins tutorial öğreticisine bakın
Temel Kullanım
Tipik bir AEC iş akışı üç adım içerir:
- Akış/kaydedilebilir ses dalganızda AEC'yi etkinleştirin
- 10 ms'lik kare teslimi için render ses dalgasında render parça boyutunu yapılandırın
- Yakalama sinyalinden yankıyı gidermek için kullanılacak sesi sağlayan render ses dalgasını bağlayın
AEC'yi Etkinleştirme
Bir streaming sound wave oluşturduktan sonra AEC'yi etkinleştirmek için ToggleAEC işlevini kullanın. AEC işlemcisi için örnekleme hızını ve kanal sayısını belirtmelisiniz. Gelen yakalama veya render sesi bu değerlerle eşleşmezse otomatik olarak yeniden örneklenir, ancak yapılandırılan örnekleme hızı yine de kaliteyi (örneğin, 48000 Hz, 16000 Hz'den daha iyi yankı giderme sağlayacaktır) ve performansı etkiler, bu nedenle bu değerleri yeniden örneklemeye bırakmaktansa bilinçli olarak seçmeye değer.
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
StreamingSoundWave->ToggleAEC(true, 48000, 1);
AEC'nin şu anda etkin olup olmadığını kontrol edebilirsiniz:
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
bool bEnabled = StreamingSoundWave->IsAECEnabled();
Render Parça Boyutunu Yapılandırma
WebRTC AEC3, sesin 10 ms'lik parçalar halinde işlenmesini gerektirir. Render ses dalgasının ses verisini doğru çerçeve boyutunda sağlamasını sağlamak için, render Imported Sound Wave (hoparlörlerden çalınan ses dalgası) üzerinde SetNumSamplesPerChunk işlevini kullanın.
Doğru parça başına örnek sayısını hesaplamak için formül şudur:
Örneğin, 48000 Hz ses için: 48000 / 100 = 480 örnek parça başına.
- 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);
Render Ses Dalgasını Bağlama
AEC'yi etkinleştirdikten ve parça boyutunu yapılandırdıktan sonra, sesinin yakalama sinyalinden yankıyı tanımlamak ve kaldırmak için kullanılacağı render ses dalgasını bağlayın. Bu tipik olarak, mikrofonun yakalayabileceği hoparlörlerden çalınan ses dalgasıdır:
- 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);
Ses dalgasını bağlamayı kaldırmak için:
- 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);
Ek Yapılandırma
Akış Gecikmesi
Render ve yakalama ses yolları arasındaki tahmini akış gecikmesini (milisaniye cinsinden) ayarlayabilirsiniz. Bu, donanım ve sistem gecikmesini hesaba katar, ancak WebRTC AEC3 bunu birçok durumda otomatik olarak tahmin edebilir:
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
StreamingSoundWave->SetAECStreamDelay(50);
AEC'yi Sıfırlama
Dahili AEC işlemci durumunu istediğiniz zaman sıfırlayabilir, böylece birikmiş herhangi bir yankı modelini temizleyebilirsiniz:
- Blueprint
- C++

StreamingSoundWave->ResetAEC();
WebRTC AEC3, 8000, 16000, 32000 ve 48000 Hz örnekleme hızlarını destekler. Uyumsuz ses otomatik olarak yeniden örneklenir, ancak bu bir performans yükü getirir. En iyi kalite ve performans için 48000 Hz kullanın ve hem yakalama hem de oynatma akışlarının gerçek ses yapılandırmasını eşleştirin.