Detección de actividad de voz
Streaming Sound Wave, junto con sus tipos derivados como Capturable Sound Wave, admite la Detección de Actividad de Voz (VAD). VAD filtra los datos de audio entrantes para llenar el búfer interno solo cuando se detecta voz.
El plugin ofrece dos implementaciones de VAD:
- VAD predeterminado
- Silero VAD
La implementación predeterminada utiliza libfvad, una biblioteca ligera de detección de actividad de voz que funciona eficientemente en todas las plataformas y versiones del motor compatibles con Runtime Audio Importer.
Disponible como un plugin de extensión, Silero VAD es un detector de actividad de voz basado en redes neuronales que ofrece mayor precisión, especialmente en entornos ruidosos. Utiliza aprendizaje automático para distinguir el habla del ruido de fondo de manera más fiable.
Uso básico
Para habilitar VAD después de crear una sound wave, use la función ToggleVAD:
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
StreamingSoundWave->ToggleVAD(true);
Después de habilitar VAD, puedes restablecerlo en cualquier momento:
- Blueprint
- C++

// Reset the VAD
StreamingSoundWave->ResetVAD();
Configuración predeterminada de VAD
Al usar el proveedor VAD predeterminado, puede ajustar su agresividad cambiando el modo VAD:
- Blueprint
- C++

// Set the VAD mode (only works with the default VAD provider)
StreamingSoundWave->SetVADMode(ERuntimeVADMode::VeryAggressive);
El parámetro mode controla qué tan agresivamente filtra el audio la VAD. Los valores más altos son más restrictivos, lo que significa que es menos probable que informen falsos positivos pero podrían omitir algo de habla.
Proveedores de VAD
Después de habilitar la VAD con la función ToggleVAD, puede elegir entre diferentes proveedores de detección de actividad de voz para satisfacer sus necesidades. El proveedor predeterminado es integrado, mientras que proveedores adicionales como Silero VAD están disponibles a través de complementos de extensión.
- 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 proporciona una detección de voz más precisa mediante redes neuronales. Para usarlo:
-
Asegúrate de que el plugin Runtime Audio Importer ya esté instalado en tu proyecto
-
Para UE 5.5 y versiones anteriores: Antes de descargar el plugin de extensión Silero VAD, asegúrate de que NNERuntimeORT esté deshabilitado en tu proyecto. Tener NNERuntimeORT habilitado puede causar fallos al usar Silero VAD en estas versiones del motor debido a conflictos
-
Descarga el plugin de extensión Silero VAD desde aquí
-
Extrae la carpeta del archivo descargado en la carpeta
Pluginsde tu proyecto (crea esta carpeta si no existe) -
Para UE 5.6 y versiones posteriores: Edita el archivo
RuntimeAudioImporterSileroVAD.upluginpara añadir la dependencia NNERuntimeORT. En el campo "Plugins", después de la inclusión de RuntimeAudioImporter, añade:
,
{
"Name": "NNERuntimeORT",
"Enabled": true
}
- Reconstruye tu proyecto (esta extensión requiere un proyecto de C++)
-
El VAD predeterminado funciona con todas las versiones de motor compatibles con 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, y 5.8)
-
Silero VAD es compatible con Unreal Engine 4.27 y todas las versiones de UE5 (4.27, 5.0, 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7, y 5.8)
-
UE 5.5 y anteriores: NNERuntimeORT debe desactivarse antes de usar Silero VAD para evitar bloqueos debido a conflictos entre plugins. Específicamente en UE 5.3, NNERuntimeORTCpu y NNERuntimeORTGpu también deben desactivarse
-
Requisito para UE 5.6+: A partir de Unreal Engine 5.6, la extensión Silero VAD requiere que la dependencia del plugin NNERuntimeORT se añada manualmente al archivo
.uplugin -
Silero VAD está disponible para Windows, Linux, Mac, Android (incluyendo Meta Quest) e iOS
-
Esta extensión se proporciona como código fuente y requiere un proyecto de C++ para su uso
-
Para más información sobre cómo construir plugins manualmente, consulta el Building Plugins tutorial
Una vez instalado, puedes seleccionarlo como tu proveedor de VAD utilizando la función SetVADProvider con la clase de proveedor de Silero.
Detección de inicio y fin del habla
La detección de actividad de voz (Voice Activity Detection, VAD) no solo detecta la presencia de voz, sino que también permite detectar el inicio y el final de la actividad de voz. Esto es útil para activar eventos cuando el habla comienza o termina durante la reproducción o captura.
Puedes personalizar la sensibilidad de la detección de inicio y fin del habla ajustando parámetros como la duración mínima del habla y la duración del silencio. Estos parámetros ayudan a afinar la detección para evitar falsos positivos, como captar ruidos breves o pausas demasiado cortas entre el habla.
Duración mínima del habla
El parámetro Duración mínima del habla establece la cantidad mínima de actividad de voz continua requerida para activar un evento de inicio de habla. Esto ayuda a filtrar ruidos breves que no deberían considerarse habla, para garantizar que solo se reconozca la actividad de voz sostenida. El valor predeterminado para Duración mínima del habla es 300 milisegundos.
- 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);
Duración del Silencio
El parámetro Duración del Silencio establece la duración de silencio necesaria para activar un evento de fin de voz. Esto evita que la detección de voz termine prematuramente durante pausas naturales entre palabras u oraciones. El valor predeterminado de Duración del Silencio es 500 milisegundos.
- 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);
Vincular a Delegados de Voz
Puede enlazar a delegados específicos cuando la voz comienza o termina. Esto es útil para activar comportamientos personalizados basados en la actividad de voz, como iniciar o detener el reconocimiento de texto o ajustar el volumen de otras fuentes de audio.
- 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
});
Comparación de proveedores de VAD
- Default VAD
- Silero VAD
Default VAD (libfvad)
Ventajas:
- Ligero y eficiente
- Funciona en todas las plataformas
- Uso mínimo de recursos
- Adecuado para dispositivos móviles y de bajo consumo
Ideal para:
- Detección de voz simple en entornos silenciosos
- Aplicaciones móviles
- Proyectos donde el rendimiento es prioritario
- Cuando se requiere soporte universal de plataformas
Silero VAD
Ventajas:
- Mayor precisión en la detección de voz
- Tolerancia superior al ruido en entornos desafiantes
- Resultados más consistentes entre diferentes hablantes
- Opciones de configuración avanzadas para un control preciso
Ideal para:
- Aplicaciones que requieren detección precisa de voz
- Entornos con ruido de fondo
- Sistemas de reconocimiento de voz
- Aplicaciones de audio profesionales
Silero VAD puede requerir más recursos computacionales que el VAD predeterminado.