Wykrywanie Aktywności Głosowej
Streaming Sound Wave, wraz z typami pochodnymi, takimi jak Capturable Sound Wave, obsługuje Wykrywanie Aktywności Głosowej (VAD). VAD filtruje przychodzące dane audio, aby wypełniać wewnętrzny bufor tylko wtedy, gdy wykryty zostanie głos.
Wtyczka oferuje dwie implementacje VAD:
- Domyślny VAD
- Silero VAD
Domyślna implementacja używa libfvad, lekkiej biblioteki do wykrywania aktywności głosowej, która działa wydajnie na wszystkich platformach i wersjach silnika obsługiwanych przez Runtime Audio Importer.
Dostępny jako wtyczka rozszerzająca, Silero VAD to oparty na sieci neuronowej detektor aktywności głosowej, który zapewnia wyższą dokładność, szczególnie w hałaśliwym otoczeniu. Wykorzystuje uczenie maszynowe do bardziej niezawodnego rozróżniania mowy od szumu tła.
Podstawowe Użycie
Aby włączyć VAD po utworzeniu fali dźwiękowej, użyj funkcji ToggleVAD:
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
StreamingSoundWave->ToggleVAD(true);
Po włączeniu VAD, możesz zresetować go w dowolnym momencie:
- Blueprint
- C++

// Reset the VAD
StreamingSoundWave->ResetVAD();
Domyślne Ustawienia VAD
Podczas korzystania z domyślnego dostawcy VAD, możesz dostosować jego agresywność, zmieniając tryb VAD:
- Blueprint
- C++

// Set the VAD mode (only works with the default VAD provider)
StreamingSoundWave->SetVADMode(ERuntimeVADMode::VeryAggressive);
Parametr mode kontroluje, jak agresywnie VAD filtruje audio. Wyższe wartości są bardziej restrykcyjne, co oznacza, że są mniej podatne na zgłaszanie fałszywych alarmów, ale mogą przeoczyć część mowy.
Dostawcy VAD
Po włączeniu VAD za pomocą funkcji ToggleVAD, możesz wybrać między różnymi dostawcami wykrywania aktywności głosowej (Voice Activity Detection), aby dopasować je do swoich potrzeb. Domyślnym dostawcą jest wbudowany, podczas gdy dodatkowi dostawcy, tacy jak Silero VAD, są dostępni poprzez wtyczki rozszerzeń.
- 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());
Rozszerzenie Silero VAD
Silero VAD zapewnia dokładniejsze wykrywanie mowy przy użyciu sieci neuronowych. Aby go użyć:
-
Upewnij się, że wtyczka Runtime Audio Importer jest już zainstalowana w twoim projekcie
-
Dla UE 5.5 i wcześniejszych: Przed pobraniem wtyczki rozszerzenia Silero VAD upewnij się, że NNERuntimeORT jest wyłączony w twoim projekcie. Aktywny NNERuntimeORT może powodować awarie podczas używania Silero VAD w tych wersjach silnika z powodu konfliktów
-
Pobierz wtyczkę rozszerzenia Silero VAD stąd tutaj
-
Wypakuj folder z pobranego archiwum do folderu
Pluginstwojego projektu (utwórz ten folder, jeśli nie istnieje) -
Dla UE 5.6 i późniejszych: Edytuj plik
RuntimeAudioImporterSileroVAD.uplugin, aby dodać zależność NNERuntimeORT. W polu "Plugins", po wpisie RuntimeAudioImporter, dodaj:
,
{
"Name": "NNERuntimeORT",
"Enabled": true
}
- Przebuduj swój projekt (to rozszerzenie wymaga projektu C++)
-
Domyślny VAD działa ze wszystkimi wersjami silnika obsługiwanymi 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)
-
Silero VAD obsługuje Unreal Engine 4.27 i wszystkie wersje UE5 (4.27, 5.0, 5.1, 5.2, 5.3, 5.4, 5.5, 5.6 i 5.7)
-
UE 5.5 i wcześniejsze: NNERuntimeORT musi być wyłączony przed użyciem Silero VAD, aby zapobiec awariom spowodowanym konfliktami wtyczek
-
Wymaganie dla UE 5.6+: Począwszy od Unreal Engine 5.6, rozszerzenie Silero VAD wymaga ręcznego dodania zależności wtyczki NNERuntimeORT do pliku
.uplugin -
Silero VAD jest dostępny dla Windows, Linux, Mac, Android (w tym Meta Quest) oraz iOS
-
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 Budowanie wtyczek
Po zainstalowaniu możesz wybrać je jako dostawcę VAD za pomocą funkcji SetVADProvider z dostawcą klasy Silero.
Wykrywanie początku i końca mowy
Wykrywanie aktywności głosowej (VAD) nie tylko wykrywa obecność mowy, ale także umożliwia wykrycie początku i końca aktywności mowy. Jest to przydatne do wyzwalania zdarzeń, gdy mowa zaczyna się lub kończy podczas odtwarzania lub przechwytywania.
Możesz dostosować czułość wykrywania początku i końca mowy, dostosowując parametry, takie jak minimalny czas trwania mowy i czas trwania ciszy. Te parametry pomagają precyzyjnie dostroić wykrywanie, aby uniknąć fałszywych pozytywów, takich jak wychwytywanie krótkich dźwięków lub zbyt krótkich przerw w mowie.
Minimalny czas trwania mowy
Parametr Minimalny czas trwania mowy ustawia minimalną ilość ciągłej aktywności głosowej wymaganej do wyzwolenia zdarzenia początku mowy. Pomaga to odfiltrować krótkie dźwięki, które nie powinny być uznawane za mowę, aby upewnić się, że tylko utrzymująca się aktywność głosowa jest rozpoznawana. Wartość domyślna dla Minimalnego czasu trwania mowy to 300 milisekund.
- 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);
Czas Trwania Ciszy
Parametr Czas Trwania Ciszy ustawia długość ciszy wymaganą do wywołania zdarzenia zakończenia mowy. Zapobiega to przedwczesnemu zakończeniu wykrywania mowy podczas naturalnych przerw między słowami lub zdaniami. Domyślna wartość dla Czasu Trwania Ciszy to 500 milisekund.
- 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);
Wiązanie z Delegatami Mowy
Możesz powiązać się z określonymi delegatami, gdy mowa się rozpoczyna lub kończy. Jest to przydatne do wyzwalania niestandardowych zachowań w oparciu o aktywność mowy, takich jak uruchamianie lub zatrzymywanie rozpoznawania tekstu, czy regulowanie głośności innych źródeł dźwięku.
- 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
});
Porównanie Dostawców VAD
- Domyślny VAD
- Silero VAD
Domyślny VAD (libfvad)
Zalety:
- Lekki i wydajny
- Działa na wszystkich platformach
- Minimalne zużycie zasobów
- Odpowiedni dla urządzeń mobilnych i o niskiej mocy
Najlepszy dla:
- Prostego wykrywania głosu w cichych środowiskach
- Aplikacji mobilnych
- Projektów, w których priorytetem jest wydajność
- Sytuacji wymagających uniwersalnego wsparcia platform
Silero VAD
Zalety:
- Większa dokładność w wykrywaniu głosu
- Lepsza tolerancja szumów w trudnych środowiskach
- Bardziej spójne wyniki dla różnych mówców
- Zaawansowane opcje konfiguracji dla precyzyjnej kontroli
Najlepszy dla:
- Aplikacji wymagających precyzyjnego wykrywania głosu
- Środowisk z hałasem w tle
- Systemów rozpoznawania mowy
- Profesjonalnych aplikacji audio
Silero VAD może wymagać większych zasobów obliczeniowych niż domyślny VAD.