Ses Etkinliği Algılama
Streaming Sound Wave, Capturable Sound Wave gibi türetilmiş türleriyle birlikte Ses Aktivite Algılama'yı (VAD) destekler. VAD, yalnızca ses algılandığında iç tamponu doldurmak için gelen ses verilerini filtreler.
Eklenti iki VAD uygulaması sunar:
- Varsayılan VAD
- Silero VAD
Varsayılan uygulama, Runtime Audio Importer tarafından desteklenen tüm platformlarda ve motor sürümlerinde verimli bir şekilde çalışan hafif bir ses etkinliği algılama kütüphanesi olan libfvad'i kullanır.
Bir uzantı eklentisi olarak sunulan Silero VAD, özellikle gürültülü ortamlarda daha yüksek doğruluk sağlayan, sinir ağı tabanlı bir ses aktivitesi dedektörüdür. Konuşmayı arka plan gürültüsünden daha güvenilir bir şekilde ayırt etmek için makine öğrenimini kullanır.
Temel Kullanım
Bir ses dalgası oluşturduktan sonra VAD'yi etkinleştirmek için ToggleVAD işlevini kullanın:
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
StreamingSoundWave->ToggleVAD(true);
VAD'yi etkinleştirdikten sonra, istediğiniz zaman sıfırlayabilirsiniz:
- Blueprint
- C++

// Reset the VAD
StreamingSoundWave->ResetVAD();
Varsayılan VAD Ayarları
Varsayılan VAD sağlayıcısını kullanırken, VAD modunu değiştirerek agresifliğini ayarlayabilirsiniz:
- Blueprint
- C++

// Set the VAD mode (only works with the default VAD provider)
StreamingSoundWave->SetVADMode(ERuntimeVADMode::VeryAggressive);
Mod parametresi, VAD'nin sesi ne kadar agresif bir şekilde filtrelediğini kontrol eder. Daha yüksek değerler daha kısıtlayıcıdır, yani yanlış pozitif raporlama olasılıkları daha düşüktür ancak bazı konuşmaları atlayabilirler.
VAD Sağlayıcıları
ToggleVAD işleviyle VAD'yi etkinleştirdikten sonra, ihtiyaçlarınıza uygun farklı Ses Aktivitesi Algılama sağlayıcıları arasından seçim yapabilirsiniz. Varsayılan sağlayıcı yerleşik olup, Silero VAD gibi ek sağlayıcılar uzantı eklentileri aracılığıyla kullanılabilir.
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
// Make sure to call ToggleVAD(true) before setting the provider
// Set the VAD provider to Silero VAD
StreamingSoundWave->SetVADProvider(URuntimeSileroVADProvider::StaticClass());
Mevcut VAD Sağlayıcısını Alma
Bir akış ses dalgasına atanmış VAD sağlayıcısını GetVADProvider işlevini kullanarak alabilirsiniz. Bu, ayrı bir referansı etrafta tutmak zorunda kalmadan, Silero VAD'nin konuşma eşiği ayarları gibi sağlayıcıya özgü işlevselliğe erişmeniz gerektiğinde yararlıdır.
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
// Get the currently assigned VAD provider
URuntimeVADProviderBase* VADProvider = StreamingSoundWave->GetVADProvider();
Sağlayıcıya özgü özelliklere erişmek için, döndürülen sağlayıcıyı istenen türe dönüştürün. Örneğin, Silero VAD'a özgü işlevselliğe ulaşmak için:
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
// Get the currently assigned VAD provider and cast it to the Silero VAD provider
if (URuntimeSileroVADProvider* SileroVADProvider = Cast<URuntimeSileroVADProvider>(StreamingSoundWave->GetVADProvider()))
{
// Use Silero VAD-specific functionality, such as SetSpeechThreshold
}
Silero VAD Extension
Silero VAD, sinir ağları kullanarak daha doğru konuşma algılama sağlar. Onu kullanmak için:
-
Runtime Audio Importer eklentisinin projenizde zaten kurulu olduğundan emin olun.
-
UE 5.5 ve öncesi için: Silero VAD uzantı eklentisini indirmeden önce, projenizde NNERuntimeORT'un devre dışı olduğundan emin olun. NNERuntimeORT'un etkin olması, çakışmalar nedeniyle bu motor sürümlerinde Silero VAD kullanılırken çökmelere neden olabilir.
-
Silero VAD uzantı eklentisini buradan indirin
-
İndirilen arşivden klasörü projenizin
Pluginsklasörüne çıkarın (bu klasör mevcut değilse oluşturun). -
UE 5.6 ve sonrası için:
RuntimeAudioImporterSileroVAD.uplugindosyasını düzenleyerek NNERuntimeORT bağımlılığını ekleyin. "Plugins" alanında, RuntimeAudioImporter dahil edildikten sonra şunu ekleyin:,{"Name": "NNERuntimeORT","Enabled": true} -
Projenizi yeniden derleyin (bu eklenti bir C++ projesi gerektirir).
-
Varsayılan VAD, Runtime Audio Importer tarafından desteklenen tüm motor sürümleriyle (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) çalışır.
-
Silero VAD, Unreal Engine 4.27 ve tüm UE5 sürümlerini (4.27, 5.0, 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7 ve 5.8) destekler.
-
UE 5.5 ve öncesi: NNERuntimeORT, eklenti çakışmalarından kaynaklanan çökmeleri önlemek için Silero VAD kullanılmadan önce devre dışı bırakılmalıdır. UE 5.3'te özellikle NNERuntimeORTCpu ve NNERuntimeORTGpu da devre dışı bırakılmalıdır.
-
UE 5.6+ Gereksinimi: Unreal Engine 5.6'dan itibaren, Silero VAD uzantısı, NNERuntimeORT eklenti bağımlılığının
.uplugindosyasına manuel olarak eklenmesini gerektirir. -
Silero VAD Windows, Linux, Mac, Android (Meta Quest dahil), ve iOS için mevcuttur.
-
Bu eklenti kaynak kodu olarak sağlanır ve kullanmak için bir C++ projesi gerektirir.
-
Eklentileri manuel olarak nasıl oluşturacağınız hakkında daha fazla bilgi için Eklenti Oluşturma eğitimine bakın.
Kurulduktan sonra, Silero sınıf sağlayıcısı ile SetVADProvider işlevini kullanarak VAD sağlayıcınız olarak seçebilirsiniz.
Konuşma Eşiği
Silero VAD sağlayıcısı, bir ses parçasının konuşma olarak kabul edilmesi için gereken minimum güven puanını (sinir ağının konuşma olasılığı çıktısından) kontrol eden bir Konuşma Eşiği parametresi sunar. Bu değeri, GetVADProvider ile sağlayıcıyı alıp Silero VAD sağlayıcı türüne cast ettikten sonra kullanılabilen SetSpeechThreshold fonksiyonu ile ayarlayabilirsiniz.
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
// Make sure the VAD provider has already been set to Silero VAD via SetVADProvider
// Get the VAD provider and cast it to the Silero VAD provider
if (URuntimeSileroVADProvider* SileroVADProvider = Cast<URuntimeSileroVADProvider>(StreamingSoundWave->GetVADProvider()))
{
// Set the speech threshold
bool bSuccess = SileroVADProvider->SetSpeechThreshold(0.5f);
}
SetSpeechThreshold, eşik başarıyla uygulanırsa true, aksi halde false döndürür (örneğin, değer geçerli aralığın dışındaysa).
Daha yüksek bir eşik algılamayı daha temkinli hale getirir: arka plan gürültüsünden kaynaklanan yanlış pozitifleri azaltır, ancak daha sessiz veya net olmayan konuşmaları da kaçırabilir. Daha düşük bir eşik algılamayı daha hassas yapar: daha fazla konuşmayı yakalar, ancak yanlış pozitif riski artar. Varsayılan değer 0.5'tir.
Konuşma Başlangıç ve Bitiş Algılama
Ses Aktivitesi Tespiti yalnızca konuşmanın varlığını algılamakla kalmaz, aynı zamanda konuşma aktivitesinin başlangıcını ve bitişini algılamaya da olanak tanır. Bu, oynatma veya yakalama sırasında konuşma başladığında veya bittiğinde olayları tetiklemek için kullanışlıdır.
Konuşma başlangıcı ve bitişi algılamanın hassasiyetini, minimum konuşma süresi ve sessizlik süresi gibi parametreleri ayarlayarak özelleştirebilirsiniz. Bu parametreler, kısa gürültüleri veya konuşma arasındaki çok kısa duraklamaları algılama gibi yanlış pozitifleri önlemek için algılamayı ince ayar yapmaya yardımcı olur.
Minimum Konuşma Süresi
Minimum Konuşma Süresi parametresi, bir konuşma başlangıç olayını tetiklemek için gereken sürekli ses etkinliğinin minimum miktarını ayarlar. Bu, konuşma olarak değerlendirilmemesi gereken kısa gürültüleri filtrelemeye yardımcı olur ve yalnızca sürekli ses etkinliğinin tanınmasını sağlar. Minimum Konuşma Süresi için varsayılan değer 300 milisaniyedir.
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
// Set the minimum speech duration
StreamingSoundWave->SetMinimumSpeechDuration(200);
Sessizlik Süresi
Silence Duration parametresi, bir konuşma bitiş olayını tetiklemek için gereken sessizlik süresini ayarlar. Bu, kelimeler veya cümleler arasındaki doğal duraklamalar sırasında konuşma algılamanın erken sonlanmasını engeller. Silence Duration için varsayılan değer 500 milisaniyedir.
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
// Set the silence duration
StreamingSoundWave->SetSilenceDuration(700);
Konuşma Delegelerine Bağlama
Konuşma başladığında veya sona erdiğinde belirli delegelere bağlanabilirsiniz. Bu, konuşma etkinliğine dayalı olarak özel davranış tetiklemek için kullanışlıdır; örneğin metin tanımayı başlatma veya durdurma ya da diğer ses kaynaklarının ses düzeyini ayarlama gibi.
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
// Bind to the OnSpeechStartedNative delegate
StreamingSoundWave->OnSpeechStartedNative.AddWeakLambda(this, [this]()
{
// Handle the result when speech starts
});
// Bind to the OnSpeechEndedNative delegate
StreamingSoundWave->OnSpeechEndedNative.AddWeakLambda(this, [this]()
{
// Handle the result when speech ends
});
VAD Sağlayıcılarını Karşılaştırma
- Varsayılan VAD
- Silero VAD
Varsayılan VAD (libfvad)
Avantajlar:
- Hafif ve verimli
- Tüm platformlarda çalışır
- Minimum kaynak kullanımı
- Mobil ve düşük güçlü cihazlar için uygun
En uygunu:
- Sessiz ortamlarda basit ses algılama
- Mobil uygulamalar
- Performansın öncelikli olduğu projeler
- Evrensel platform desteğinin gerekli olduğu durumlarda
Silero VAD
Avantajlar:
- Sesi tespit etmede daha yüksek doğruluk
- Zorlu ortamlarda üstün gürültü toleransı
- Farklı konuşmacılar arasında daha tutarlı sonuçlar
- Hassas kontrol için gelişmiş yapılandırma seçenekleri
En uygun:
- Hassas ses algılama gerektiren uygulamalar
- Arka plan gürültülü ortamlar
- Ses tanıma sistemleri
- Profesyonel ses uygulamaları
Silero VAD, varsayılan VAD’a göre daha fazla hesaplama kaynağı gerektirebilir.