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 usa libfvad, una biblioteca ligera de detección de actividad de voz que funciona de manera eficiente en todas las plataformas y versiones de 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 proporciona mayor precisión, especialmente en entornos ruidosos. Utiliza aprendizaje automático para distinguir de manera más confiable el habla del ruido de fondo.
Uso Básico
Para habilitar VAD después de crear una onda de sonido, utiliza 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 VAD predeterminada
Al usar el proveedor de VAD predeterminado, puede ajustar su agresividad cambiando el modo de VAD:
- Blueprint
- C++

// Set the VAD mode (only works with the default VAD provider)
StreamingSoundWave->SetVADMode(ERuntimeVADMode::VeryAggressive);
El parámetro mode controla cuán agresivamente el VAD filtra el audio. Valores más altos son más restrictivos, lo que significa que es menos probable que reporten falsos positivos pero podrían perder algo de voz.
Proveedores VAD
Después de habilitar VAD con la función ToggleVAD, puedes elegir entre diferentes proveedores de detección de actividad de voz para adaptarse a tus necesidades. El proveedor predeterminado está 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());
Obteniendo el proveedor VAD actual
Puedes recuperar el proveedor VAD actualmente asignado a una onda de sonido en streaming usando la función GetVADProvider. Esto es útil cuando necesitas acceder a funcionalidad específica del proveedor, como los ajustes de umbral de voz del Silero VAD, sin tener que mantener una referencia separada.
- 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();
Para acceder a características específicas del proveedor, convierta el proveedor devuelto al tipo deseado. Por ejemplo, para acceder a la funcionalidad específica de 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
}
Extensión Silero VAD
Silero VAD proporciona una detección de habla más precisa utilizando redes neuronales. Para usarlo:
-
Asegúrate de que el complemento 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 podría causar bloqueos al utilizar Silero VAD en estas versiones del motor debido a conflictos.
-
Descargue el complemento 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 agregar la dependencia NNERuntimeORT. En el campo "Plugins", después de la inclusión de RuntimeAudioImporter, agrega:,{"Name": "NNERuntimeORT","Enabled": true} -
Recompila tu proyecto (esta extensión requiere un proyecto C++)
-
El VAD predeterminado funciona con todas las versiones del 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 soporta 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 fallos debido a conflictos de complementos. En UE 5.3 específicamente, NNERuntimeORTCpu y NNERuntimeORTGpu también deben desactivarse.
-
Requisito de UE 5.6+: A partir de Unreal Engine 5.6, la extensión Silero VAD necesita que la dependencia del plugin NNERuntimeORT se agregue manualmente al archivo
.uplugin. -
Silero VAD está disponible para Windows, Linux, Mac, Android (incluyendo Meta Quest) y iOS
-
Esta extensión se proporciona como código fuente y requiere un proyecto C++ para su uso.
-
Para más información sobre cómo construir plugins manualmente, consulte el tutorial de Creación de Plugins
Una vez instalado, puedes seleccionarlo como tu proveedor VAD usando la función SetVADProvider con el proveedor de clase Silero.
Umbral de voz
El proveedor Silero VAD expone un parámetro Speech Threshold que controla la puntuación de confianza mínima (de la salida de probabilidad de voz de la red neuronal) necesaria para considerar un segmento de audio como voz. Puedes configurarlo utilizando la función SetSpeechThreshold, disponible después de recuperar el proveedor con GetVADProvider y hacer un casting al tipo de proveedor 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 devuelve true si el umbral se aplicó correctamente, y false en caso contrario (por ejemplo, si el valor está fuera del rango válido).
Un umbral más alto hace que la detección sea más conservadora: reduce los falsos positivos del ruido de fondo, pero también puede pasar por alto el habla más baja o menos clara. Un umbral más bajo hace que la detección sea más sensible: capta más habla, pero el riesgo de falsos positivos aumenta. El valor predeterminado es 0.5.
detección de inicio y fin de voz
Detección de Actividad de Voz 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 desencadenar eventos cuando la voz comienza o termina durante la reproducción o captura.
Puedes personalizar la sensibilidad de la detección de inicio y final 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 de voz establece la cantidad mínima de actividad de voz continua requerida para desencadenar un evento de inicio de habla. Esto ayuda a filtrar ruidos breves que no deberían considerarse habla, para asegurar que solo se reconozca la actividad de voz sostenida. El valor predeterminado de Duración mínima de voz 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 del silencio necesaria para activar un evento de finalización del habla. Esto evita que la detección de voz termine prematuramente durante las 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);
Vinculación a delegados de voz
Puedes vincularte a delegados específicos cuando el habla comienza o termina. Esto es útil para desencadenar un comportamiento personalizado basado en la actividad del habla, 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
- VAD por defecto
- Silero VAD
VAD por defecto (libfvad)
Ventajas:
- Ligero y eficiente
- Funciona en todas las plataformas
- Uso mínimo de recursos
- Adecuado para dispositivos móviles y de bajo consumo
Lo mejor para:
- Detección de voz simple en entornos tranquilos
- Aplicaciones móviles
- Proyectos donde el rendimiento es una prioridad
- 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 en diferentes hablantes
- Opciones de configuración avanzada 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 profesional
Silero VAD puede requerir más recursos computacionales que el VAD predeterminado.