流体视窗
Npm的语音活性检测——Silero VAD(v6)编译为WebAssembly. 模型被捆绑,零配置,没有运行时间下载. 在浏览器中工作, 节点,和MacOS和Windows上的Electron(两个进程).
- 没有本地模块 纯洁的原声。 没什么
electron-rebuild,没有 每条存档的预建, 没有 onnxruntime对等依赖, 没有额外的二进制签名 . - 模型嵌入 - 1.3 MB Silero v6 16克赫兹图船
.wasm(5.3 MB 生用,2.3 MB gzipped total).npm install离开;无 运行时取出, 完全下线 . - 流出 + 离线 —— 说
SpeechStart编号 :SpeechEnd有歇斯底里症的事件, 或全缓冲分化。 ~150×实时;一个32ms帧成本很好 在一毫秒内.
npm i @fluidinference/fluidvad
麦克风(浏览器/电子渲染器)
import { MicVad } from "@fluidinference/fluidvad/mic";
const mic = new MicVad({
onSpeechStart: (t) => console.log("speech started", t),
onSpeechEnd: (audio, start, end) => {
// audio: Float32Array, 16 kHz mono, whole utterance incl. pre-roll
console.log(`utterance ${start.toFixed(2)}s → ${end.toFixed(2)}s`);
},
});
await mic.start();
缓冲器(节点/ 电子主/ 浏览器)
import { createVad } from "@fluidinference/fluidvad";
const vad = await createVad({ threshold: 0.5 });
// streaming: push any chunk size, get boundary events
const events = vad.push(samples); // Float32Array, 16 kHz mono
// [{ isStart: true, sampleIndex: 15872, timeSeconds: 0.99 }, ...]
// offline: segment a whole buffer
const segments = vad.segment(samples);
// [{ startTime: 0.9, endTime: 4.21 }, ...]
输入总是 16克赫兹单f32 内 [-1, 1]。模型会消耗
512个样品框架(32毫秒); push 内部缓冲部分帧.
电子
可运行的示例 examples/electron (微型UI+)
无头烟模式,CI测试在macOS和Windows上.
- 主/ 预装( Node env) :
createVad()工作状态; 被读取 从磁盘(sar-透明)中. - 渲染器为
contextIsolation数字 : 渲染器无法fetch()file://URL,所以将预装的被子字节递过来:
// preload.cjs
const wasmPath = require.resolve("@fluidinference/fluidvad/dist/fluidvad_bg.wasm");
contextBridge.exposeInMainWorld("fluidvad", { wasmBytes: new Uint8Array(fs.readFileSync(wasmPath)) });
// renderer
const mic = new MicVad({ load: { wasm: window.fluidvad.wasmBytes }, onSpeechEnd: ... });
- 社区支助方案:增加
'wasm-unsafe-eval'改为script-src(编成没有使联署材料成为可能)eval) (中文(简体) ). - macOS 麦克风: 呼叫
systemPreferences.askForMediaAccess("microphone")从主和 设定NSMicrophoneUsageDescription包装时.
配置
| 选项 | 默认 | 含义 |
|---|---|---|
threshold | 0.5 (韩语) | 输入阈值(框架是语音值 ) |
negativeThreshold | threshold - 0.15 | 出口门槛(歇斯底里) |
minSpeechDuration | 0.15 s (韩语) | 丢入较短的语音运行 |
minSilenceDuration | 0.75 s (简体中文) | 沉默需要关闭一段 |
maxSpeechDuration | 14会 | 最佳静默时会分出较长的片段 |
speechPadding | 0.1 s (中文(简体) ) | 堆放在每一段周围 |
发展
电磁场是用一个锈芯建造的src/)使用 路径
用于CPU推论 – 任何地方都不许运行 .
上游 Silero ONNX 包含 If 其分支在级别上有分歧的节点——
严格运行时间是不行的 我们烤
sr = 16000 作为常数,固定输入形状,并用
anxruntime的基本优化器,它消除了每个 If
(单位:千美元)scripts/prepare_model.py, (中文(简体) ), 位点精确 (与上游). 结果是
预编为 NNEF(examples/export_nnef.rs)所以所运去的只是
携带道的轻量级装载器。 每方正比方为:
在试验中坚持(tests/model_parity.rs; 歇斯底里/分化
状态机器(从 流体听觉(中文(简体) )
用合成概率序列进行单位测试.
cargo test --release # core + parity tests
./scripts/build_npm.sh # build the npm package into npm/
python3 scripts/prepare_model.py # regenerate model artifacts (needs onnx, onnxruntime)
cd examples/electron && npm i && FLUIDVAD_SMOKE=1 npx electron . # headless check
许可证
麻省理工学院. 捆绑的Silero VAD型号是"Silero Team",麻省理工学院许可 (单位:千美元)塞勒罗语NAME, (中文(简体) ), 蛇人4/西雷罗-瓦德) (中文(简体) ).