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

164 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# VAD语音活动检测模块技术文档
> **基于 `@ricky0912/vad-web` 的 Web 端语音活动检测集成方案**
---
## 概述
本模块提供了一个轻量级的语音活动检测Voice Activity Detection, VAD功能封装用于在浏览器环境中实时检测用户语音的开始与结束并在语音结束后回调处理音频数据。该模块依赖于 [`vad-web`](https://www.npmjs.com/package/@ricky0123/vad-web) 库,底层使用 ONNX Runtime Web 实现高性能推理。
主要功能:
- 实时麦克风音频采集
- 自动检测语音段Speech Segment
- 在语音结束后触发回调,返回 `Float32Array` 格式的 16kHz 音频样本
- 支持动态启用/禁用 VAD
---
## 依赖引入
```html
<!-- 引入 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 的单声道音频数据 |
#### 示例
```javascript
bricks.enable_vad(function(audio) {
console.log("语音结束,音频长度:", audio.length);
// 可将 audio 发送到后端进行 ASR 识别等处理
});
```
#### 内部实现
```javascript
bricks.vad = await vad.MicVAD.new({
onSpeechEnd: func
});
bricks.vad.start();
```
---
### `bricks.disable_vad()`
停止当前运行的 VAD 实例,并释放相关资源。
#### 行为说明
- 调用 `stop()` 方法停止麦克风监听和模型推理
-`bricks.vad` 设置为 `null`,便于垃圾回收
#### 示例
```javascript
// 停止语音检测
bricks.disable_vad();
```
---
## 音频数据格式
- **采样率**16000 Hz
- **位深**32-bit float
- **声道**单声道Mono
- **数据类型**`Float32Array`
- **应用场景**适用于大多数现代语音识别ASR模型输入要求
---
## 使用示例
```html
<!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 GitHub 仓库](https://github.com/ricky0123/vad-web)
- [ONNX Runtime Web](https://onnxruntime.ai/docs/tutorials/web/intro.html)
- [Web Audio API 文档](https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API)
---
## 版本信息
- **vad-web 版本**`0.0.7`
- **兼容性**支持现代主流浏览器Chrome、Edge、Firefox、Safari
---
📌 **提示**:此模块适合嵌入到低代码平台、语音助手、实时对话系统中,作为前端语音触发机制的核心组件。