Обнаружение голосовой активности
Streaming Sound Wave, наряду со своими производными типами, такими как Capturable Sound Wave, поддерживает обнаружение голосовой активности (VAD). VAD фильтрует входящие аудиоданные, чтобы заполнять внутренний буфер только при обнаружении голоса.
Плагин предлагает две реализации VAD:
- VAD по умолчанию
- Silero VAD
Реализация по умолчанию использует libfvad, легковесную библиотеку для обнаружения голосовой активности, которая эффективно работает на всех платформах и версиях движка, поддерживаемых Runtime Audio Importer.
Доступный в качестве плагина-расширения, Silero VAD — это основанный на нейронной сети детектор голосовой активности, который обеспечивает более высокую точность, особенно в шумных условиях. Он использует машинное обучение, чтобы более надёжно отличать речь от фонового шума.
Основное использование
Чтобы включить VAD после создания sound wave, используйте функцию ToggleVAD:
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
StreamingSoundWave->ToggleVAD(true);
После включения VAD вы можете сбросить его в любое время:
- Blueprint
- C++

// Reset the VAD
StreamingSoundWave->ResetVAD();
Настройки VAD по умолчанию
При использовании провайдера VAD по умолчанию вы можете настроить его агрессивность, изменяя режим VAD:
- Blueprint
- C++

// Set the VAD mode (only works with the default VAD provider)
StreamingSoundWave->SetVADMode(ERuntimeVADMode::VeryAggressive);
Параметр mode определяет, насколько агрессивно VAD фильтрует аудио. Более высокие значения являются более строгими, то есть они с меньшей вероятностью будут давать ложные срабатывания, но могут пропустить часть речи.
VAD Провайдеры
После включения VAD с помощью функции ToggleVAD вы можете выбирать между разными провайдерами определения голосовой активности в соответствии с вашими потребностями. Провайдер по умолчанию является встроенным, а дополнительные провайдеры, такие как Silero VAD, доступны через плагины расширений.
- 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());
Получение текущего VAD-провайдера
Вы можете получить VAD-провайдера, который в данный момент назначен потоковой звуковой волне, с помощью функции GetVADProvider. Это полезно, когда вам нужен доступ к специфичной для провайдера функциональности, например к настройкам порога речи Silero VAD, без необходимости хранить отдельную ссылку.
- 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();
Чтобы получить доступ к функциям, специфичным для провайдера, приведите возвращённого провайдера к нужному типу. Например, чтобы добраться до функциональности, специфичной для Silero VAD:
- 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
Silero VAD обеспечивает более точное обнаружение речи с использованием нейронных сетей. Чтобы использовать его:
-
Убедитесь, что плагин Runtime Audio Importer уже установлен в вашем проекте.
-
Для UE 5.5 и более ранних версий: Перед загрузкой плагина расширения Silero VAD убедитесь, что NNERuntimeORT отключен в вашем проекте. Включение NNERuntimeORT может привести к сбоям при использовании Silero VAD на этих версиях движка из-за конфликтов.
-
Скачайте расширение-плагин Silero VAD здесь
-
Извлеките папку из загруженного архива в папку
Pluginsвашего проекта (создайте эту папку, если она не существует). -
Для UE 5.6 и более поздних версий: Измените файл
RuntimeAudioImporterSileroVAD.uplugin, чтобы добавить зависимость NNERuntimeORT. В поле "Plugins", после включения RuntimeAudioImporter, добавьте:,{"Name": "NNERuntimeORT","Enabled": true} -
Пересоберите ваш проект (это расширение требует проект C++)
-
Стандартный VAD работает со всеми версиями движка, поддерживаемыми 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, 5.7 и 5.8)
-
Silero VAD поддерживает Unreal Engine 4.27 и все версии UE5 (4.27, 5.0, 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7 и 5.8)
-
UE 5.5 и более ранние версии: NNERuntimeORT должен быть отключен перед использованием Silero VAD, чтобы предотвратить сбои из-за конфликтов плагинов. В UE 5.3 в частности NNERuntimeORTCpu и NNERuntimeORTGpu также должны быть отключены.
-
Требование для UE 5.6+: Начиная с Unreal Engine 5.6, расширение Silero VAD требует, чтобы зависимость плагина NNERuntimeORT была вручную добавлена в файл
.uplugin -
Silero VAD доступен для Windows, Linux, Mac, Android (включая Meta Quest) и iOS
-
Это расширение поставляется в виде исходного кода и требует проект на C++ для использования.
-
Для получения дополнительной информации о ручной сборке плагинов см. руководство Сборка плагинов
Как только установлен, вы можете выбрать его в качестве VAD-провайдера с помощью функции SetVADProvider с провайдером класса Silero.
Порог речи
Провайдер Silero VAD предоставляет параметр Порог речи, который управляет минимальной оценкой уверенности (выходное значение вероятности речи нейросети), необходимой для того, чтобы считать аудиосегмент речью. Вы можете задать его с помощью функции SetSpeechThreshold, доступной после получения провайдера через GetVADProvider и приведения его к типу провайдера Silero VAD.
- 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 возвращает true, если порог был успешно применён, и false в противном случае (например, если значение выходит за допустимый диапазон).
Более высокий порог делает обнаружение более консервативным: он уменьшает количество ложных срабатываний от фонового шума, но при этом может пропускать более тихую или менее четкую речь. Более низкий порог делает обнаружение более чувствительным: он улавливает больше речи, но риск ложных срабатываний возрастает. Значение по умолчанию — 0.5.
Обнаружение начала и конца речи
Обнаружение голосовой активности не только определяет наличие речи, но и позволяет фиксировать начало и конец речевой активности. Это полезно для запуска событий, когда речь начинается или заканчивается во время воспроизведения или захвата.
Вы можете настроить чувствительность определения начала и конца речи, регулируя такие параметры, как минимальная продолжительность речи и продолжительность тишины. Эти параметры помогают точно настроить обнаружение, чтобы избежать ложных срабатываний, например, при улавливании коротких шумов или слишком коротких пауз между речью.
Минимальная длительность речи
Параметр Minimum Speech Duration задает минимальную продолжительность непрерывной голосовой активности, необходимую для запуска события начала речи. Это помогает отфильтровывать короткие шумы, которые не следует считать речью, чтобы гарантировать, что распознается только продолжительная голосовая активность. Значение по умолчанию для Minimum Speech Duration составляет 300 миллисекунд.
- 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);
Длительность тишины
Параметр Silence Duration устанавливает продолжительность тишины, необходимую для срабатывания события окончания речи. Это предотвращает преждевременное завершение обнаружения речи во время естественных пауз между словами или предложениями. Значение по умолчанию для Silence Duration составляет 500 миллисекунд.
- 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);
Привязка к делегатам речи
Вы можете привязываться к определенным делегатам, когда речь начинается или заканчивается. Это полезно для запуска пользовательского поведения на основе речевой активности, например, для запуска или остановки распознавания текста или регулировки громкости других источников звука.
- 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-провайдеров
- VAD по умолчанию
- Silero VAD
Стандартный VAD (libfvad)
Преимущества:
- Лёгкий и эффективный
- Работает на всех платформах
- Минимальное потребление ресурсов
- Подходит для мобильных и маломощных устройств
Лучше всего для:
- Простое обнаружение голоса в тихой обстановке
- Мобильные приложения
- Проекты, в которых производительность — приоритет
- Когда требуется поддержка всех платформ
Silero VAD
Преимущества:
- Более высокая точность обнаружения голоса
- Превосходная устойчивость к шуму в сложных условиях
- Более стабильные результаты для разных дикторов
- Расширенные параметры конфигурации для точного управления
Лучше всего для:
- Приложения, требующие точного обнаружения голоса
- Среды с фоновым шумом
- Системы распознавания голоса
- Профессиональные аудиоприложения
Silero VAD может потребовать больше вычислительных ресурсов, чем стандартный VAD.