写在前面
最近在 Linux 环境下开发时遇到一个痛点:没有好用的语音输入法。
习惯了语音输入的高效率后,回到纯键盘打字反而成了效率瓶颈。市面上确实有一些「魔改」方案,但识别准确率实在难以恭维。恰好豆包的语音识别模型效果不错,还提供了充足的免费额度,于是动手做了这个工具。
项目地址:WindVox
为什么需要语音输入
语音输入正在成为内容创作的主流方式之一。相比传统打字:
- 输入速度提升 3-5 倍
- 思维连贯性更好,不被打字速度打断
- 长文创作时手部负担更小
但 Linux 生态在这方面一直是短板。Windows 和 macOS 都有成熟的语音输入方案,Linux 用户却只能依赖各种不稳定的第三方工具。
技术方案
核心能力
- 豆包流式语音识别 2.0:识别准确率高,支持长句连续输入
- 双模式支持:对讲机模式(按住说话)和切换模式(点击开关)
- 实时反馈:悬浮窗显示识别结果,系统托盘指示状态
- 后台服务:基于 systemd 管理,开机自启无感知
架构设计
整体采用「全局监听 + 流式识别 + 自动输入」的架构:
- 快捷键监听:通过 X11 监听 F2 按键事件
- 音频采集:PyAudio 实时录制麦克风音频
- 流式识别:WebSocket 连接豆包 API,实时返回识别结果
- 文本输入:xdotool 模拟键盘输入到当前窗口
快速部署
系统要求
- Ubuntu 22.04 / 24.04 LTS(或其他 Debian 系发行版)
- X11 桌面环境(Wayland 支持有限)
- Python 3.10+
1. 获取 API 凭证
前往火山引擎开放平台获取豆包语音识别 API 凭证:
- 访问 火山引擎控制台
- 进入「语音技术」-「语音识别」
- 创建应用并复制 App ID 和 Access Token
免费额度对个人使用完全够用。新用户有 30 小时的流式识别额度,足够长期使用。
2. 安装系统依赖
sudo apt update
sudo apt install -y \
portaudio19-dev \
python3-dev \
python3-venv \
python3-tk \
xdotool \
xclip
这些依赖分别用于:
portaudio19-dev:音频采集xdotool/xclip:键盘输入模拟和剪贴板操作
3. 一键安装
git clone
https://github.com/windzu/WindVox.git
cd WindVox
chmod +x
install.sh
./
install.sh
安装脚本会自动完成:
- 创建虚拟环境并安装依赖
- 配置 systemd 用户服务
- 生成配置文件模板
4. 配置凭证
编辑配置文件:
nano ~/.config/windvox/config.yaml
填入你的 API 凭证:
volcengine:
app_key: "你的 App ID"
access_key: "你的 Access Token"
5. 测试连接
启动服务前先测试 API 连接是否正常:
~/.local/share/windvox/venv/bin/windvox --test-connection
看到「连接成功」提示后,启动服务:
systemctl --user start windvox
systemctl --user status windvox
使用说明
两种交互模式
| 模式 | 操作方式 | 适用场景 |
|---|---|---|
| 对讲机模式(默认) | 按住 F2 说话,松开自动输入 | 短句输入,快速记录 |
| 切换模式 | 按 F2 开始录音,再按 F2 结束 | 长文输入,需要边说边思考 |
可以在配置文件中切换:
interaction:
mode: "push_to_talk" # 或 "toggle"
实时反馈
- 悬浮窗:说话时屏幕下方显示实时识别结果
- 托盘图标:显示当前状态(待机/录音/处理/错误)
实际体验
实测下来,中文识别准确率在 95% 以上,标点符号会自动添加。对于技术文档、代码注释、长文写作都很友好。
唯一需要注意的是,在某些 IDE(如 JetBrains 系列)中,可能需要适当增加 typing_delay_ms 参数,避免输入过快导致字符丢失。
进阶配置
配置文件位置:~/.config/windvox/config.yaml
自定义触发键
interaction:
trigger_key: "f2" # 可改为其他按键
音频设备选择
如果有多个麦克风设备,可以指定使用哪一个:
# 先列出所有设备
windvox --list-devices
# 然后在配置中指定
audio:
device_index: 1 # 使用第二个设备
输入延迟调整
某些应用需要更慢的输入速度才能正确接收:
input:
typing_delay_ms: 20 # 默认 10ms,可适当增加
服务管理
# 查看日志
journalctl --user -u windvox -f
# 重启服务(修改配置后)
systemctl --user restart windvox
# 禁用开机自启
systemctl --user disable windvox
已知限制
Wayland 兼容性
目前全局热键监听和键盘模拟依赖 X11 的工具链(xdotool)。在 Wayland 下:
- 全局热键无法跨应用监听
- 某些 Wayland 原生应用无法接收模拟输入
建议使用 X11 会话,或等待后续版本对 Wayland 的完整支持。
IDE 输入问题
部分 IDE(如 PyCharm、WebStorm)对快速键盘输入的处理有延迟。如果遇到字符丢失,增大 typing_delay_ms 即可解决。
写在最后
这个工具已经成为我日常开发的标配。从写代码注释、回复消息到长文创作,语音输入的效率提升是实实在在的。
如果你也在 Linux 下做内容创作或开发,不妨试试看。遇到问题欢迎提 Issue,也欢迎贡献代码。