Akustik Yankı Engelleme
Streaming Sound Wave, türetilmiş türleriyle birlikte (Capturable Sound Wave gibi), Akustik Yankı Engelleme'yi (AEC) destekler. AEC, bir oynatma sinyalinin (ör. hoparlörlerden çalan ses) oynatılmasından kaynaklanan yakalanan mikrofon sesindeki yankıyı kaldırır. Sonuç, gerçek zamanlı iletişim senaryolarında daha temiz ses yakalamadır.
Eklenti, yalnızca ilgili AEC3 kodunu içeren hafif bir eklenti uzantısı olarak sunulan WebRTC AEC3 uygulaması aracılığıyla AEC sağlar. WebRTC AEC3, gerçek zamanlı iletişim uygulamalarında yaygın olarak kullanılan yüksek kaliteli bir akustik yankı engelleyicidir. Hoparlör ve mikrofon arasındaki akustik yolu modelleyerek yakalanan sinyalden yankıyı çıkarır.
Kurulum
Akustik Yankı Engelleme'yi kullanmak için, WebRTC AEC3 eklenti uzantısını yüklemeniz gerekir:
- Runtime Audio Importer eklentisinin projenizde zaten yüklü olduğundan emin olun
- WebRTC AEC3 eklenti uzantısını here adresinden indirin
- İndirilen arşivdeki klasörü projenizin
Pluginsklasörüne çıkarın (bu klasör mevcut değilse 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, 5.7 ve 5.8)
- 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 kullanılabilir
- Eklentileri manuel olarak nasıl derleyeceğiniz hakkında daha fazla bilgi için Eklenti Oluşturma Eğitimi başlıklı eğiticiye bakın
Temel Kullanım
Tipik AEC iş akışı üç adımdan oluşur:
- AEC'yi Etkinleştirin akış/yakalanabilir ses dalganızda
- Render parça boyutunu yapılandırın render ses dalgasında 10 ms kare teslimi için
- Render ses dalgasını bağlayın, sesi yakalama sinyalindeki yankıyı iptal etmek için kullanılacak olan
AEC'yi Etkinleştirme
Bir akış ses dalgası 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ı belirtmeniz gerekir. Gelen yakalama veya oynatma sesi bu değerlerle uyuşmazsa otomatik olarak yeniden örneklenir, ancak yine de yapılandırılmış örnekleme hızı kaliteyi (ör. 48000 Hz, 16000 Hz'den daha iyi yankı engelleme sağlayacaktır) ve performansı etkiler, bu yüzden bu değerleri yeniden örneklemeye bırakmak yerine 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();
Oynatma Parça Boyutunu Yapılandırma
WebRTC AEC3, sesin 10 ms'lik parçalar halinde işlenmesini gerektirir. Oynatma ses dalgasının ses verilerini doğru çerçeve boyutunda iletmesini sağlamak için, oynatma Imported Sound Wave (hoparlörlerden çalınan ses dalgası) üzerinde SetNumSamplesPerChunk işlevini kullanın.
Parça başına doğru örnek sayısını hesaplama formülü şudur:
Örneğin, 48000 Hz ses için: 48000 / 100 = 480 parça başına örnek.
- 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ştirip yığın boyutunu yapılandırdıktan sonra, sesi yakalama sinyalindeki yankıyı tanımlamak ve kaldırmak için kullanılacak render ses dalgasını bağlayın. Bu genellikle hoparlörler aracılığıyla çalınan ve mikrofonun yakalayabileceği 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);
Render ses dalgasının bağını çözmek 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
İşleme 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
İç AEC işlemci durumunu istediğiniz zaman sıfırlayarak birikmiş yankı modelini temizleyebilirsiniz:
- Blueprint
- C++

StreamingSoundWave->ResetAEC();
WebRTC AEC3, 8000, 16000, 32000 ve 48000 Hz örnekleme hızlarını destekler. Eşleşmeyen ses otomatik olarak yeniden örneklenir, ancak bu işlem performans yüküne neden olur. 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.