Детектирование голосовой активности
Потоковая звуковая волна, а также её производные типы, такие как Записываемая звуковая волна, поддерживают детектирование голосовой активности (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
вы можете выбрать между различными провайдерами Voice Activity Detection в соответствии с вашими потребностями. Провайдер по умолчанию является встроенным, в то время как дополнител ьные провайдеры, такие как 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
Silero VAD обеспечивает более точное обнаружение речи с использованием нейронных сетей. Чтобы его использовать:
-
Убедитесь, что плагин Runtime Audio Importer уже установлен в вашем проекте
-
Для UE 5.5 и более ранних версий: Перед загрузкой плагина расширения Silero VAD убедитесь, что NNERuntimeORT отключен в вашем проекте. Наличие включенного NNERuntimeORT может вызвать сбои при использовании Silero VAD в этих версиях движка из-за конфликтов
-
Загрузите плагин расширения Silero VAD с Google Drive
-
Извлеките папку из загруженного архива в папку
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)
-
Silero VAD поддерживает Unreal Engine 4.27 и все версии UE5 (4.27, 5.0, 5.1, 5.2, 5.3, 5.4, 5.5 и 5.6)
-
UE 5.5 и ранее: NNERuntimeORT должен быть отключен перед использованием Silero VAD, чтобы предотвратить краши из-за конфликтов плагинов
-
Требование для UE 5.6+: Начиная с Unreal Engine 5.6, расширение Silero VAD требует ручного добавления зависимости плагина NNERuntimeORT в файл
.uplugin
-
Silero VAD доступен для Windows, Linux, Mac, Android (включая Meta Quest) и iOS
-
Это расширение предоставляется в виде исходного кода и требует C++ проект для использования
-
Для получения дополнительной информации о том, как собирать плагины вручную, см. учебник по сборке плагинов
После установки вы можете выбрать его в качестве вашего провайдера VAD, используя функцию SetVADProvider
с провайдером класса Silero.
Обнаружение начала и окончания речи
Voice Activity Detection не только обнаруживает наличие речи, но также позволяет обнаруживать начало и окончание речевой активности. Это полезно для запуска событий, когда речь начинается или заканчивается во время воспроизведения или захвата.
Вы можете настроить чувствительность обнаружения начала и окончания речи, регулируя параметры, такие как минимальная продолжительность реч и и продолжительность тишины. Эти параметры помогают точно настроить обнаружение, чтобы избежать ложных срабатываний, таких как захват кратковременных шумов или слишком коротких пауз в речи.
Минимальная продолжительность речи
Параметр Минимальная продолжительность речи устанавливает минимальное количество непрерывной голосовой активности, необходимое для запуска события начала речи. Это помогает отфильтровать кратковременные шумы, которые не должны считаться речью, чтобы гарантировать, что распознается только устойчивая голосовая активность. Значение по умолчанию для Минимальной продолжительности речи составляет 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);
Длительность тишины
Параметр Длительность тишины устанавливает продолжительность тишины, необходимую для срабатывания события окончания речи. Это предотвращает преждевременное завершение обнаружения речи во время естественных пауз между словами или предложениями. Значение по умолчанию для Длительности тишины составляет 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 может требовать больше вычислительных ресурсов, чем Default VAD.