Обнаружение голосовой активности
Streaming Sound Wave, а также производные от него типы, такие как Capturable Sound Wave, поддерживают обнаружение голосовой активности (VAD). VAD фильтрует поступающие аудиоданные, заполняя внутренний буфер только при обнаружении голоса.
Плагин предлагает две реализации VAD:
- Default VAD
- Silero VAD
Реализация по умолчанию использует libfvad, легковесную библиотеку обнаружения голосовой активности, которая эффективно работает на всех платформах и версиях движков, поддерживаемых Runtime Audio Importer.
Доступный как плагин-расширение, Silero VAD - это детектор голосовой активности на основе нейронной сети, который обеспечивает более высокую точность, особенно в шумных условиях. Он использует машинное обучение, чтобы более надежно отличать речь от фонового шума.
Основное использование
Чтобы включить VAD после создания звуковой волны, используйте функцию 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());
Silero VAD Extension
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++
-
Для получения дополнительной информации о том, как вручную собирать плагины, см. руководство Building Plugins
После установки вы можете выбрать его в качестве поставщика VAD, используя функцию SetVADProvider с классом Silero в качестве провайдера.
Обнаружение начала и окончания речи
Обнаружение голосовой активности не только определяет наличие речи, но и позволяет обнаруживать начало и конец речевой активности. Это полезно для запуска событий, когда речь начинается или заканчивается во время воспроизведения или захвата.
Вы можете настроить чувствительность обнаружения начала и конца речи, регулируя такие параметры, как минимальная длительность речи и длительность тишины. Эти параметры помогают тонко настроить обнаружение, чтобы избежать ложных срабатываний, таких как регистрация кратковременных шумов или слишком коротких пауз между речью.
Минимальная длительность речи
Параметр Минимальная длительность речи задаёт минимальное количество непрерывной голосовой активности, необходимое для запуска события начала речи. Это помогает отфильтровать кратковременные шумы, которые не должны считаться речью, чтобы гарантировать распознавание только длительной голосовой активности. Значение по умолчанию для Минимальная длительность речи составляет 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 задает продолжительность тишины, необходимую для запуска события окончания речи. Это предотвращает преждевременное завершение обнаружения речи во время естественных пауз между словами или предложениями. Значение по умолчанию для 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
- Default VAD
- Silero VAD
Default VAD (libfvad)
Преимущества:
- Лёгкий и эффективный
- Работает на всех платформах
- Минимальное использование ресурсов
- Подходит для мобильных и маломощных устройств
Лучше всего подходит для:
- Простого обнаружения голоса в тихой обстановке
- Мобильных приложений
- Проектов, где важна производительность
- Когда требуется поддержка всех платформ
Silero VAD
Преимущества:
- Более высокая точность обнаружения голоса
- Превосходная устойчивость к шуму в сложных условиях
- Более стабильные результаты для разных дикторов
- Расширенные возможности настройки для точного управления
Лучше всего подходит для:
- Приложений, требующих точного обнаружения голоса
- Среды с фоновым шумом
- Систем распознавания голоса
- Профессиональных аудиоприложений
Silero VAD может требовать больше вычислительных ресурсов, чем стандартный VAD.