返回资讯中心
外部精选
软件工程
#开发者实时流

Voce:在终端里把 Markdown 和代码像搭档一样读出来

来源标题:Show HN: Voce – reads Markdown and code aloud the way a pairing partner says it

Voce 是一个终端工具,能把 Markdown 文档和代码按人类表达习惯朗读出来,而不是像屏幕阅读器那样逐符号拼读。它按各语言真实的运算符名称朗读代码,并在朗读时逐词高亮,支持键盘或鼠标跳转。用户可以让 Claude Code、Codex 等编码代理生成内容后直接播放收听。

Hacker News 最新jaystewartuk2026/11/2 · 今天27 分钟阅读

以下正文由 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 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →