长按说话,松手即输 —— 离线 · 极速 · 跨平台

PrivateVoice 是一款离线语音转文字工具。按住快捷键说话,松开即识别并输入文字到任意应用。无需联网,无需注册,开箱即用。
当前 PrivateVoice 的产品语言版本为 中文、**English**、**French**、**German**、**Spanish**、**Italian**、**Portuguese**、**Japanese** 和 Korean。识别模型已经扩展到 SenseVoice、Moonshine English、Parakeet English、Parakeet TDT v3、日语 Zipformer、韩语 Zipformer、Qwen3-ASR 和 X-ASR zh-en 960ms;不同模型覆盖的输入语言和成熟度不同。
| 输入语言 / 场景 | 当前支持状态 | 默认 / 可选模型 | 说明 |
|---|---|---|---|
| 中文(普通话、简体 / 繁体) | 正式支持 | 默认:SenseVoice;可选高级:Qwen3-ASR;实验:X-ASR zh-en 960ms | 中文语言版本默认使用 SenseVoice,适合中文听写和日常输入。 |
| English | 正式支持 | 默认:Moonshine English;可选高级:Parakeet English;实验:X-ASR zh-en 960ms | English 语言版本默认使用 Moonshine English,Parakeet 适合更高准确率的英文输入。 |
| French / German / Spanish / Italian / Portuguese | 正式支持 | 默认:Parakeet TDT v3 | 欧洲五语统一使用 NVIDIA / sherpa-onnx 的 Parakeet TDT v3 多语种离线模型。Portuguese 覆盖 pt-PT 和 pt-BR 的基础识别路径。 |
| 中英混输 | 正式支持场景 | SenseVoice、Qwen3-ASR、X-ASR zh-en 960ms | 适合中文句子中夹杂英文术语、产品名、代码词等场景。 |
| 粤语(Cantonese) | 模型支持,尚非独立语言版本 | SenseVoice、Qwen3-ASR、X-ASR zh-en 960ms | 底层模型包含粤语能力;当前建议在中文语言版本下使用。 |
| 日语(日本語) | 正式支持 | 默认:Zipformer Japanese | 日语语言版本默认使用 ReazonSpeech 日语专项 Zipformer 离线模型。 |
| 韩语(한국어) | 正式支持 | 默认:Zipformer Korean | 韩语语言版本默认使用韩语专项 Zipformer 离线模型。 |
| 欧洲其他语种 | 模型支持,尚非独立语言版本 | Parakeet TDT v3 | Parakeet TDT v3 支持 25 种欧洲语言;当前只把 French、German、Spanish、Italian、Portuguese 作为正式产品语言版本。 |
| 其他语言 | 暂未正式支持 | 无独立默认模型 | 系统语言不在当前正式语言范围内时,当前产品会回落到 English 语言版本。 |
| 识别模型 | 模型状态 | 覆盖的输入语言 / 场景 | 所属语言版本 | 说明 |
|---|---|---|---|---|
| SenseVoice | 默认轻量模型 | 中文、粤语、English、日语、韩语 | 中文默认 | 轻量模型,当前推荐用于中文和中英混输,也提供日语、韩语等底层识别能力。 |
| Qwen3-ASR | 高级模型 | 中文、简繁中文、粤语、中英混输 | 中文可选 | 体积更大,适合中文长句、技术词和更高准确率需求。 |
| Moonshine English | 默认轻量模型 | English | English 默认 | 轻量英文离线模型,适合英文日常听写。 |
| Parakeet English | 高级模型 | English | English 可选 | 当前接入的是 parakeet-unified-en-0.6b 英文模型,适合长句、技术词和更高准确率需求。 |
| Parakeet TDT v3 | 默认多语种模型 | French、German、Spanish、Italian、Portuguese | 欧洲五语默认 | 一个模型包覆盖欧洲五语,适合离线听写;发布前基准对比 Canary-1B-v2 和 Whisper large-v3-turbo。 |
| Zipformer Japanese | 默认专项模型 | Japanese | 日语默认 | 基于 ReazonSpeech 的日语专项离线模型。 |
| Zipformer Korean | 默认专项模型 | Korean | 韩语默认 | 韩语专项离线模型。 |
| X-ASR zh-en 960ms | 实验模型 | 中文、English、粤语、中英混输 | 中文 / English 可选实验项 | 实验性中英流式模型,用于评估更低延迟和未来“边说边出字”体验。 |
privatevoice.exe.dmg,拖入 Applications,首次启动需授予辅助功能权限# 环境要求
# - Go 1.22+
# - Node.js 20+
# - CGO 编译器 (Windows: LLVM MinGW UCRT, macOS: Xcode Command Line Tools)
# 克隆
git clone <PrivateVoice 仓库地址>
cd PrivateVoice/privatevoice.src
# 安装前端依赖
cd frontend && npm install && cd ..
# 开发模式
wails3 dev
# 生产构建 (Windows)
windres privatevoice.rc -o privatevoice.syso
CGO_ENABLED=1 go build -ldflags "-H windowsgui -s -w" -o privatevoice.exe .
# 生产构建 (macOS)
CGO_ENABLED=1 go build -o privatevoice .
Windows:
| 文件 | 大小 | 说明 |
|---|---|---|
privatevoice.exe |
~15 MB | 主程序 |
onnxruntime.dll |
~15 MB | ONNX Runtime |
sherpa-onnx-c-api.dll |
~4 MB | sherpa-onnx C API |
sherpa-onnx-cxx-api.dll |
~248 KB | sherpa-onnx C++ API |
models/sensevoice/ |
~200 MB | 语音模型(首次自动下载) |
macOS:
| 文件 | 大小 | 说明 |
|---|---|---|
PrivateVoice Dictation.app |
~15 MB | 应用包(含 dylib) |
models/sensevoice/ |
~200 MB | 语音模型(首次自动下载) |
privatevoice.src/
├── main.go # 入口:单实例 + Wails 启动
├── app.go # 编排:热键 → 录音 → 识别 → 粘贴
├── internal/
│ ├── audio/ # malgo 录音 + 设备枚举
│ ├── engine/ # sherpa-onnx 推理
│ ├── hotkey/ # 全局热键轮询
│ ├── input/ # 剪贴板 + 粘贴 + 剪贴板保护
│ ├── config/ # JSON 配置
│ ├── history/ # 识别历史(JSON 持久化)
│ ├── textproc/ # 中英混合文本后处理
│ ├── sound/ # 录音音效(合成 WAV)
│ ├── overlay/ # 浮动指示器(Win32 GDI+ / macOS AppKit)
│ └── ...
├── services/ # Wails 服务(前端绑定)
└── frontend/ # Svelte + Vite
├── src/components/ # 设置窗口 + 指示器
└── src/lib/ # stores + i18n
| 组件 | 技术 |
|---|---|
| 桌面框架 | Wails v3 |
| 前端 | Svelte 5 + Vite + TypeScript |
| 音频录制 | malgo (miniaudio) |
| 语音识别 | sherpa-onnx (SenseVoice) |
| 全局热键 | Windows: GetAsyncKeyState 轮询 / macOS: NSEvent + CGEventSource |
| 文字输入 | Windows: 剪贴板 + SendInput / macOS: 剪贴板 + CGEvent |
| 浮动指示器 | Windows: GDI+ Layered Window / macOS: AppKit + CoreGraphics |
| 音效 | 程序合成 WAV + 平台原生播放 |
MIT License