bricks/aidocs/myvad.md
2025-10-05 06:39:58 +08:00

4.3 KiB
Raw Permalink Blame History

VAD语音活动检测模块技术文档

基于 @ricky0912/vad-web 的 Web 端语音活动检测集成方案


概述

本模块提供了一个轻量级的语音活动检测Voice Activity Detection, VAD功能封装用于在浏览器环境中实时检测用户语音的开始与结束并在语音结束后回调处理音频数据。该模块依赖于 vad-web 库,底层使用 ONNX Runtime Web 实现高性能推理。

主要功能:

  • 实时麦克风音频采集
  • 自动检测语音段Speech Segment
  • 在语音结束后触发回调,返回 Float32Array 格式的 16kHz 音频样本
  • 支持动态启用/禁用 VAD

依赖引入

<!-- 引入 ONNX Runtime WebVAD 依赖) -->
<script src="https://cdn.jsdelivr.net/npm/onnxruntime-web/dist/ort.js"></script>

<!-- 引入 vad-web 库 -->
<script src="https://cdn.jsdelivr.net/npm/@ricky0123/vad-web@0.0.7/dist/bundle.min.js"></script>

⚠️ 注意:必须按顺序加载 ort.js 后再加载 vad-web,否则会报错。


API 接口

bricks.enable_vad(func)

启动语音活动检测,并设置语音结束时的回调函数。

参数

参数名 类型 说明
func Function 回调函数,接收一个参数 audio,类型为 Float32Array,表示采样率为 16000Hz 的单声道音频数据

示例

bricks.enable_vad(function(audio) {
  console.log("语音结束,音频长度:", audio.length);
  // 可将 audio 发送到后端进行 ASR 识别等处理
});

内部实现

bricks.vad = await vad.MicVAD.new({
  onSpeechEnd: func
});
bricks.vad.start();

bricks.disable_vad()

停止当前运行的 VAD 实例,并释放相关资源。

行为说明

  • 调用 stop() 方法停止麦克风监听和模型推理
  • bricks.vad 设置为 null,便于垃圾回收

示例

// 停止语音检测
bricks.disable_vad();

音频数据格式

  • 采样率16000 Hz
  • 位深32-bit float
  • 声道单声道Mono
  • 数据类型Float32Array
  • 应用场景适用于大多数现代语音识别ASR模型输入要求

使用示例

<!DOCTYPE html>
<html>
<head>
  <title>VAD Demo</title>
</head>
<body>
  <button onclick="startVAD()">开始语音检测</button>
  <button onclick="stopVAD()">停止语音检测</button>

  <script src="https://cdn.jsdelivr.net/npm/onnxruntime-web/dist/ort.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/@ricky0123/vad-web@0.0.7/dist/bundle.min.js"></script>
  <script>
    var bricks = window.bricks || {};
    
    bricks.enable_vad = async function(func){
      bricks.vad = await vad.MicVAD.new({
        onSpeechEnd: func
      });
      bricks.vad.start();
    };

    bricks.disable_vad = async function(){
      if (bricks.vad) {
        bricks.vad.stop();
        bricks.vad = null;
      }
    };

    function startVAD() {
      bricks.enable_vad((audio) => {
        console.log("捕获到语音片段,样本数:", audio.length);
        // 此处可上传至 ASR 服务或进行本地处理
      });
    }

    function stopVAD() {
      bricks.disable_vad();
    }
  </script>
</body>
</html>

注意事项

  1. 浏览器权限:首次运行时需请求麦克风权限,请确保页面在 HTTPS 环境下运行或本地调试localhost
  2. 性能优化vad-web 使用 WASM 和 ONNX 模型进行推理,首次加载可能需要几秒预热时间。
  3. 内存管理:务必在不需要时调用 disable_vad() 以释放麦克风资源,避免持续占用。
  4. 版本锁定:当前固定使用 @ricky0123/vad-web@0.0.7,建议生产环境保持版本稳定。

参考链接


版本信息

  • vad-web 版本0.0.7
  • 兼容性支持现代主流浏览器Chrome、Edge、Firefox、Safari

📌 提示:此模块适合嵌入到低代码平台、语音助手、实时对话系统中,作为前端语音触发机制的核心组件。