Detecção de Atividade de Voz
Streaming Sound Wave, junto com seus tipos derivados como Capturable Sound Wave, suporta Detecção de Atividade de Voz (VAD). O VAD filtra os dados de áudio recebidos para preencher o buffer interno somente quando a voz é detectada.
O plugin oferece duas implementações de VAD:
- VAD padrão
- Silero VAD
A implementação padrão usa libfvad, uma biblioteca leve de detecção de atividade de voz que funciona de forma eficiente em todas as plataformas e versões de engine suportadas pelo Runtime Audio Importer.
Disponível como um plugin de extensão, Silero VAD é um detector de atividade de voz baseado em redes neurais que oferece maior precisão, especialmente em ambientes ruidosos. Ele utiliza aprendizado de máquina para distinguir de forma mais confiável a fala do ruído de fundo.
Uso Básico
Para ativar o VAD após criar uma sound wave, use a função ToggleVAD:
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
StreamingSoundWave->ToggleVAD(true);
Após habilitar o VAD, você pode redefini-lo a qualquer momento:
- Blueprint
- C++

// Reset the VAD
StreamingSoundWave->ResetVAD();
Configurações Padrão do VAD
Ao usar o provedor VAD padrão, você pode ajustar sua agressividade alterando o modo VAD:
- Blueprint
- C++

// Set the VAD mode (only works with the default VAD provider)
StreamingSoundWave->SetVADMode(ERuntimeVADMode::VeryAggressive);
O parâmetro mode controla quão agressivamente o VAD filtra o áudio. Valores mais altos são mais restritivos, o que significa que são menos propensos a relatar falsos positivos, mas podem perder alguma fala.
Provedores VAD
Após habilitar o VAD com a função ToggleVAD, você pode escolher entre diferentes provedores de Detecção de Atividade de Voz para atender às suas necessidades. O provedor padrão é integrado, enquanto provedores adicionais, como o Silero VAD, estão disponíveis por meio de plugins de extensão.
- 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());
Obtendo o Provedor VAD Atual
Você pode recuperar o provedor VAD atualmente atribuído a uma onda sonora de streaming usando a função GetVADProvider. Isso é útil quando você precisa acessar a funcionalidade específica do provedor, como as configurações de limite de fala do Silero VAD, sem precisar manter uma referência separada por perto.
- 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 acessar recursos específicos do provedor, converta o provedor retornado para o tipo desejado. Por exemplo, para acessar a funcionalidade específica do 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
}
Extensão Silero VAD
Silero VAD fornece uma detecção de fala mais precisa usando redes neurais. Para usá-lo:
-
Certifique-se de que o plugin Runtime Audio Importer já esteja instalado no seu projeto
-
Para UE 5.5 e anteriores: Antes de baixar o plugin de extensão Silero VAD, certifique-se de que o NNERuntimeORT esteja desabilitado em seu projeto. Ter o NNERuntimeORT habilitado pode causar travamentos ao usar o Silero VAD nessas versões do motor devido a conflitos.
-
Baixe o plugin de extensão Silero VAD aqui
-
Extraia a pasta do arquivo baixado na pasta
Pluginsdo seu projeto (crie esta pasta se ela não existir) -
Para o UE 5.6 e posteriores: Edite o arquivo
RuntimeAudioImporterSileroVAD.upluginpara adicionar a dependência NNERuntimeORT. No campo "Plugins", após a inclusão do RuntimeAudioImporter, adicione:,{"Name": "NNERuntimeORT","Enabled": true} -
Recompile seu projeto (esta extensão requer um projeto C++)
-
O VAD padrão funciona com todas as versões do motor suportadas pelo 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 e 5.8).
-
Silero VAD suporta Unreal Engine 4.27 e todas as versões do UE5 (4.27, 5.0, 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7 e 5.8)
-
UE 5.5 e versões anteriores: O NNERuntimeORT deve ser desabilitado antes de usar o Silero VAD para evitar travamentos devido a conflitos de plug-ins. No UE 5.3, especificamente, o NNERuntimeORTCpu e o NNERuntimeORTGpu também precisam ser desabilitados.
-
Requisito UE 5.6+: A partir do Unreal Engine 5.6, a extensão Silero VAD exige que a dependência do plugin NNERuntimeORT seja adicionada manualmente ao arquivo
.uplugin -
Silero VAD está disponível para Windows, Linux, Mac, Android (incluindo Meta Quest) e iOS
-
Esta extensão é fornecida como código fonte e requer um projeto C++ para ser usada.
-
Para mais informações sobre como compilar plugins manualmente, consulte o tutorial Compilando Plugins
Uma vez instalado, você pode selecioná-lo como seu provedor de VAD usando a função SetVADProvider com o provedor da classe Silero.
Limiar de Fala
O provedor Silero VAD expõe um parâmetro Speech Threshold que controla a pontuação de confiança mínima (da saída de probabilidade de fala da rede neural) necessária para considerar um segmento de áudio como fala. Você pode defini-lo usando a função SetSpeechThreshold, disponível após obter o provedor com GetVADProvider e convertê-lo para o tipo de provedor 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 retorna true se o limite foi aplicado com sucesso, e false caso contrário (por exemplo, se o valor estiver fora do intervalo válido).
Um limiar mais alto torna a detecção mais conservadora: reduz os falsos positivos do ruído de fundo, mas também pode perder falas mais baixas ou menos claras. Um limiar mais baixo torna a detecção mais sensível: capta mais falas, mas o risco de falsos positivos aumenta. O valor padrão é 0.5.
Detecção de Início e Fim da Fala
A Detecção de Atividade de Voz não apenas detecta a presença de fala, mas também permite detectar o início e o fim da atividade de fala. Isso é útil para acionar eventos quando a fala começa ou termina durante a reprodução ou captura.
Você pode personalizar a sensibilidade da detecção do início e fim da fala ajustando parâmetros como a duração mínima da fala e a duração do silêncio. Esses parâmetros ajudam a ajustar finamente a detecção para evitar falsos positivos, como capturar ruídos breves ou pausas muito curtas entre a fala.
Duração Mínima da Fala
O parâmetro Minimum Speech Duration define a quantidade mínima de atividade contínua de voz necessária para disparar um evento de início de fala. Isso ajuda a filtrar ruídos breves que não devem ser considerados fala, garantindo que apenas atividade vocal sustentada seja reconhecida. O valor padrão de Minimum Speech Duration é 300 milissegundos.
- 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);
Duração do Silêncio
O parâmetro Duração do Silêncio define a duração de silêncio necessária para acionar um evento de fim de fala. Isso evita que a detecção de fala termine prematuramente durante pausas naturais entre palavras ou frases. O valor padrão para Duração do Silêncio é 500 milissegundos.
- 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);
Vinculando aos Delegados de Fala
Você pode se associar a delegates específicos quando a fala começa ou termina. Isso é útil para acionar comportamentos personalizados com base na atividade de fala, como iniciar ou interromper o reconhecimento de texto, ou ajustar o volume de outras fontes de áudio.
- 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
});
Comparando provedores de VAD
- VAD Padrão
- Silero VAD
VAD padrão (libfvad)
Vantagens:
- Leve e eficiente
- Funciona em todas as plataformas
- Uso mínimo de recursos
- Adequado para dispositivos móveis e de baixo consumo de energia
Melhor para:
- Detecção simples de voz em ambientes silenciosos
- Aplicativos móveis
- Projetos em que o desempenho é uma prioridade
- Quando o suporte a plataformas universais é necessário
Silero VAD
Vantagens:
- Maior precisão na detecção de voz
- Superior tolerância a ruídos em ambientes desafiadores
- Resultados mais consistentes entre diferentes falantes
- Opções avançadas de configuração para controle preciso
Melhor para:
- Aplicações que exigem detecção precisa de voz
- Ambientes com ruído de fundo
- Sistemas de reconhecimento de voz
- Aplicações de áudio profissional
Silero VAD pode exigir mais recursos computacionais do que o VAD padrão.