语音活动检测
流式声波及其派生类型(如可捕获声波)支持语音活动检测(VAD)。VAD会过滤输入的音频数据,仅在检测到语音时填充内部缓冲区。
该插件提供两种VAD实现方案:
- 默认VAD
- Silero VAD
默认实现使用libfvad,这是一个轻量级的语音活动检测库,可在Runtime Audio Importer支持的所有平台和引擎版本上高效运行。
作为扩展插件提供的Silero VAD是基于神经网络的语音活动检测器,能提供更高的准确度(尤其在嘈杂环境中)。它通过机器学习更可靠地区分语音与背景噪声。
基础用法
创建声波后,使用ToggleVAD
函数启用VAD:
- 蓝图
- 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提供程序
启用ToggleVAD
功能后,您可以根据需求选择不同的语音活动检测(VAD)提供程序。默认提供程序是内置的,而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 插件
- 从 Google Drive 下载 Silero VAD 扩展插件
- 将下载的压缩包解压到项目的
Plugins
文件夹中(如果该文件夹不存在请先创建) - 重新编译项目(此扩展需要 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)
- Silero VAD 目前仅支持 Windows 平台
- 此扩 展以源代码形式提供,需要使用 C++ 项目
- 有关手动构建插件的更多信息,请参阅 Building Plugins 教程
安装完成后,您可以使用 SetVADProvider
函数选择 Silero 类提供程序作为 VAD 提供程序。
语音开始与结束检测
语音活动检测(VAD)不仅能检测语音的存在,还能检测语音活动的开始和结束。这对于在播放或捕获过程中触发语音开始或结束事件非常有用。
您可以通过调整参数(如最小语音持续时间和静音持续时间)来自定义语音开始和结束检测的灵敏度。这些参数有助于微调检测,避免误报,例如拾取短暂噪音或语音间过短的停顿。
最小语音持续时间
最小语音持续时间参数设置了触发语音开始事件所需的最小连续语音活动量。这有助于过滤掉不应被视为语音的短暂噪音,确保只有持续的语音活动才会被识别。最小语音持续时间的默认值为 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);