
Voce:在终端里把 Markdown 和代码像搭档一样读出来
来源标题:Show HN: Voce – reads Markdown and code aloud the way a pairing partner says it
Voce 是一个终端工具,能把 Markdown 文档和代码按人类表达习惯朗读出来,而不是像屏幕阅读器那样逐符号拼读。它按各语言真实的运算符名称朗读代码,并在朗读时逐词高亮,支持键盘或鼠标跳转。用户可以让 Claude Code、Codex 等编码代理生成内容后直接播放收听。
以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
Markdown 和代码,在终端里朗读出来。屏幕阅读器会把代码逐符号拼出来。voce 则像坐在你旁边的人那样读,用每种语言真实的运算符名称,并在朗读时逐词高亮。
🔊 听它读:53 秒的 voce 朗读演示
micrograd 的反向传播,朗读时单词同步高亮
(或 MP3)。
voce(意大利语“声音”,读作 VOH-chay)在终端里为你朗读 Markdown。它把页面按应有的样子显示出来——标题、粗体、链接、高亮代码、对齐的表格——并像人一样朗读:散文按散文读,代码则像结对伙伴念出来那样读。你可以移开视线,可以跟读,也可以用键盘或鼠标跳转。
编程智能体会写出很多值得了解的内容:代码库讲解、pull request 走查、语言或框架教程。voce 让你可以听而不是读,愿意的话还能离开屏幕。让 Claude Code、Codex 或任何智能体给你写点东西,然后按下播放。它能读任何 Markdown。
文本转语音并不新鲜,把智能体的回复读出来也不新鲜。voce 增加的是:代码按人的说法来听,页面同步跟随。下面这一行 $totals[$channel] ??= 0;,有四种读法:
voce 不是屏幕阅读器,也不打算成为屏幕阅读器。它是用来听那些值得吸收的内容的:智能体的解释、pull request 走查、语言学习笔记。
你需要 macOS 或 Linux,以及 Python 3.10 到 3.14,用于开箱即用的 Kokoro 语音。macOS 自带的 python3 是 3.9,只能使用 Mac 自带语音,所以安装时请指定更新的版本(没有的话 uv 会帮你获取):
uv tool install --python 3.13 voce
# 或者
pipx install --python python3.13 voce
然后试试:
voce README.md
两个可选组件能让它更好用:
在 Linux 上,voce 用 mpv 或 ffplay 播放音频(如果装了的话),否则用 pw-play、paplay 或 aplay,这些只能单速播放。剪贴板方面,Wayland 下用 wl-clipboard,X11 下用 xclip 或 xsel:
sudo apt install mpv wl-clipboard # 或:sudo dnf install mpv wl-clipboard
在 Windows 上,请在 WSL 里运行,那里就是 Linux。
voce notes.md # 读一个文件,从上次停下的地方继续
voce a.md b.md # 连续读多个文件
voce -r # 读此文件夹中 Claude Code 的最新回复
voce -c # 读剪贴板内容
cat notes.md | voce - # 读标准输入
voce # 继续上次阅读的内容
voce --start notes.md # 从开头重新开始
voce notes.md --export notes.mp3 # 导出为一个 MP3 随身听
voce --check notes.md # 查看朗读方式:句子数、分钟数、字符数
按键
| 按键 | 作用 |
|---|---|
| space | 暂停或继续 |
| ← → | 上一句或下一句 |
| ↑ ↓ | 上一段或下一段 |
| [ ] | 上一节或下一节 |
| + - | 加快或减慢,0.8× 到 2× |
| n p | 下一个或上一个文件 |
| v | 下一个语音 |
| V | 下一个语音引擎(已设置的) |
| m | 播放列表菜单 |
| r | 重听本句,或在结尾时重听整个文件 |
| c C | 复制本句,或整个段落 |
| q | 退出,保留阅读位置 |
点击句子或代码行可跳转到该处。拖动选中任意文本即可复制,不会打断语音:松手时内容已在剪贴板。使用 --skip-code 时,点击代码块会复制它。若想用终端自带的鼠标选择文本,拖动时按住 shift。
鼠标滚轮可滚动,到下一句时页面会重新跟随语音。Vim 用户可用 h j k l。
每个朗读代码的阅读器都会以两种方式之一出错。屏幕阅读器逐符号读:“dollar, totals, left bracket, dollar, channel...”。文本转语音应用把代码当散文读,Str::slug 会读成 “stress log”。两者都不是坐在你旁边的同事会说的。
voce 像结对伙伴念出来那样读代码,一次一行,读到的行停在光带上,正在读的词被标记出来,就像散文句子一样。
规则就是人不用思索就会用的那些。名称按单词读:strlen 是 “string length”,isset 是 “is set”,checkIn 是 “check In”。美元符号、括号和分号不出声。字符串按内容读,所以 '' 是 “the empty string”,注释和文档注释按散文读。
运算符使用各自语言手册给出的名称:PHP 的 === 是 “is identical to”,不是 “triple equals”;JavaScript 的是 “is strictly equal to”;Go 的 := 是 “short variable declaration”;Rust 的 ::< 是 “turbofish”;Kotlin 的 ?: 是 “elvis”。因为是真实名称,你在听的过程中就学会了,结对或审查代码时它们会自然从你嘴里说出来。
每种语言是 speech/words/ 下的一个词与运算符名称文件,注明所依据的手册,并有测试锁定确切的词。每个文件都用 docs/hearing/corpus.py 在该语言的知名项目中通读,并用真实语音以耳核对。围栏代码块按其围栏上的语言朗读,diff 按其文件的语言朗读,行内代码按文档中代码最多的语言朗读。
如果你只想听散文,--skip-code 会显示代码但不朗读。
把 Claude Code 放在一个终端里,在同一文件夹再开第二个终端。当回复到达时,运行:
voce -r
voce 会在 ~/.claude/projects 中找到该文件夹对应的会话。它朗读的文本与 /copy 会取到的相同,即 Claude 的最终消息,不含进度说明、工具调用或思考过程。如果某一轮仍在运行,它会读上一条回复。
你也可以 /copy 回复然后运行 voce -c,这在任何终端、任何工具下都可行。
Kokoro 开箱即用。它是一个小型开源语音模型,运行在你的电脑上,因此免费、无需账号、不向任何地方发送数据。首次发声时,voce 会把模型(120 MB)下载到缓存。它需要 Python 3.10 到 3.14;在 3.9 上,voce 改用 Mac 自带语音(Linux 上请安装更新的 Python)。
(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。