2026-04-12 音频转文字说明书

  1. Wisper
    1. 目录结构
    2. 环境
    3. 统一启动(一个进程监听)
    4. Hammerspoon(光标处插入文字)
    5. Demos
    6. 根目录兼容入口

Wisper

本地流式语音识别:麦克风 → 火山 SAUC WebSocket → 文本;通过 Hammerspoon 把识别结果 键入到当前光标处(适合在搜索框、文档里说话输入)。

目录结构

路径 说明
wisper/ 运行时 Python 包:音频采集、volc 协议、HTTP daemon、backends 能力声明
main.py 推荐日常启动:与 python -m wisper 相同,可用 --mode 选择能力组合
demos/ 实验/对照脚本(整段 Flash、纯采集等),非日常热键路径
artifacts/ 本地产物目录(已 gitignore):logs/recordings/debug/
hammerspoon/ 配置模板,复制到 ~/.hammerspoon/
config/example.json 可选配置示例;覆盖请用 config/local.json(不提交)

环境

  • Python 3.x,依赖见 requirements.txt
  • 在项目根配置 .envVOLC_ASR_APP_KEYVOLC_ASR_ACCESS_KEY;可选 VOLC_ASR_WS_URLVOLC_ASR_RESOURCE_IDVOLC_ASR_SEG_DURATION_MS
  • 日志默认写入 artifacts/logs/wisper.log;可用环境变量 ASR_DAEMON_LOG_FILEASR_DAEMON_LOG_LEVEL 覆盖。

统一启动(一个进程监听)

默认 仅流式(与 Hammerspoon 热键一致)。也可用 --mode 或环境变量 WISPER_MODE 打开整段 Flash 或两者并存:

--mode 行为
stream(默认) GET /health/start/partial/stop(麦克风流式)
flash POST /recognize(整段 WAV 等,见下)
both 上两表的路由 同一端口 都有
./.venv/bin/python main.py
./.venv/bin/python main.py --mode both
./.venv/bin/python -m wisper --mode flash --port 8766
WISPER_MODE=both ./.venv/bin/python main.py

兼容旧入口:./.venv/bin/python asr_daemon.py./.venv/bin/python -m wisper.daemon 等价于默认 stream

  • GET /capabilities:返回当前启用的能力列表(如 ["stream_volc","flash_volc"]),Lua 或其它客户端可用来判断是否调用 /recognize
  • POST /recognizemultipart/form-data 字段名 file,或 JSON {"path":"recordings/xxx.wav"}(路径须位于 artifacts/ 下)。响应:{"ok":true,"text":"..."}

扩展本地模型时:在 wisper/backends/spec.py 增加能力位,在 wisper/daemon/server.py 挂载对应路由即可。

服务默认监听 http://127.0.0.1:8765

Hammerspoon(光标处插入文字)

  1. 安装 Hammerspoon
  2. 将本仓库 hammerspoon/init.lua 复制到 ~/.hammerspoon/init.lua,在 Hammerspoon 中 Reload Config
  3. macOS 隐私与安全性 → 辅助功能:允许 Hammerspoon(用于向当前应用注入按键)。
  4. 确保 daemon 已启动;使用脚本中配置的热键(例如 Option+V 开始/停止录音并由客户端轮询 /partial 注入文字)。

主目标:把识别文字插入当前焦点应用的光标位置;是否在浏览器里按回车搜索由你手动完成,daemon 不包含搜索 URL 等逻辑。

Demos

均需 在仓库根目录 执行,例如:

./.venv/bin/python demos/realtime_audio_capture.py --help
./.venv/bin/python demos/srec_flash_demo.py --file your.wav
./.venv/bin/python demos/flash_capture_demo.py
./.venv/bin/python demos/realtime_asr_stream_demo.py --help

demos/srec_websocket_demo.py 为占位式旧示例,需自行填入密钥后才可用。

根目录兼容入口

为兼容旧脚本,realtime_audio.pyasr_errors.py 仍可作为薄封装,从 wisper 包 re-export 符号。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 kipleyarch@gmail.com
Obsidian