首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Voicebox:把 ElevenLabs 和 WisprFlow 装进一个本地 App,44k Star 开源语音工作室拆解

Voicebox:把 ElevenLabs 和 WisprFlow 装进一个本地 App,44k Star 开源语音工作室拆解

作者头像
阿特拉斯
发布2026-07-21 16:02:20
发布2026-07-21 16:02:20
210
举报

7 个 TTS 引擎 + Whisper 听写 + 内置 MCP 服务器——拆解一个用 Tauri/Rust 把语音输入输出全栈跑在本地的开源项目


ElevenLabs 把语音合成做到了行业标杆,WisprFlow 把语音听写做成了生产力工具。这两家云厂商正好卡在语音 I/O 回路的两端——一个管输出,一个管输入,中间隔着各自的订阅费和你的数据。

一个叫 Voicebox 的项目想用同一个 App 把这两端都吃下来,并且整个跑在你自己的机器上。它在 GitHub 上拿到了 4.4 万 Star,自我定位是 The open-source AI voice studio(开源 AI 语音工作室)——克隆任意声音、生成语音、向任意 App 听写、给 AI Agent 配上你拥有的声音,全套本地完成。

这篇文章把它的技术架构拆开来看:为什么用 Tauri 而不是 Electron,7 个 TTS 引擎怎么分工,内置的 MCP 服务器怎么让 Claude Code「开口说话」,以及那个把听写和 Agent 语音统一到同一个交互原语上的设计。


一、它想解决什么:语音 I/O 回路被两家云厂商切开了

理解 Voicebox 之前,先看它要补的缺口。

ElevenLabs 是语音合成(TTS)的头部厂商,强在输出端:声音克隆质量高、多语言、情感丰富,但所有音频都要过它的云。WisprFlow 走的是另一头,强在输入端:全局快捷键听写,转写后自动粘贴到任意输入框,同样跑在云上。

问题在于,这俩切开了同一条回路的两半。你想「说一句话 → 本地 Agent 处理 → 用克隆的声音回答你」,得自己在 ElevenLabs、WisprFlow 和 Agent 之间拼管线,数据在云上来回跑,订阅费叠着交。

Voicebox 的核心论点是:语音输入和输出本就是同一个 loop 的两个方向,应该用同一个 App、同一个本地模型运行时、同一个交互原语来承载。它的 README 直接点明——「The two cloud incumbents sit on opposite halves of the voice I/O loop. Voicebox does both.」

落到产品上就是三件事:本地优先(模型、声音数据、录音都不出本机)、双向闭环(听写和 Agent 语音共用同一个屏幕浮窗状态机)、API/MCP 优先(任何 Agent 都能调一个工具就开口说话)。这套定位解释了它为什么能在半年多冲到 4.4 万 Star——它对准的是既想要 ElevenLabs 质量、又不想把声音数据交出去的开发者和创作者。


二、技术栈:Tauri + Rust 做外壳,Python FastAPI 做推理内核

语音 AI 工具最忌讳的就是「重」。Voicebox 的技术栈选型处处在为体积和性能权衡。

代码语言:javascript
复制
Tauri(Rust)

几个值得注意的决策:

1. 外壳用 Tauri,不用 Electron。 语音 App 要常驻后台、要捕获全局热键、要做无障碍级的粘贴注入,这些都吃内存。Electron 一个窗口动辄几百 MB,Tauri 用 Rust 做原生层,体积和内存都小一截。README 特意标了「Native performance — built with Tauri (Rust), not Electron」,这是明确写给从 ElevenLabs 网页版迁过来的用户的。

2. 推理内核是 Python,不是 Rust。 这是务实的选择。TTS/STT/LLM 的模型生态(PyTorch、transformers、MLX)全在 Python,硬用 Rust 重写推理层是自找麻烦。Voicebox 的分工很清楚:Rust 管原生交互和外壳,Python FastAPI 管模型推理,两者通过本地 HTTP(127.0.0.1:17493)通信。这也是为什么它能把 PyInstaller 打包的 Python 后端嵌进 Tauri App 里分发。

3. 一套推理运行时,TTS/STT/LLM 共享。 Qwen3 在这个项目里身兼数职:既当 TTS 引擎(Qwen3-TTS),又当人格改写和听写清洗的本地 LLM,还共享同一份模型缓存和 GPU 显存。README 写得很直白——「one LLM in the app, one model cache, one GPU-memory footprint」。这是本地优先架构里省显存的关键设计:与其装三个互相不知道彼此存在的模型,不如让它们共享同一个 Qwen3 运行时。

4. 推理后端按平台分流。 macOS 走 MLX(Metal,还能吃 Neural Engine,号称快 4–5 倍);Windows/Linux NVIDIA 走 CUDA;AMD 走 ROCm(App 内自动配 HSA_OVERRIDE_GFX_VERSION);Windows 任意 GPU 走 DirectML;Intel Arc 走 IPEX/XPU;实在没有 GPU 就跑 CPU。这套矩阵让一个 App 能在从 M 系列 Mac 到 AMD 显卡的 Linux 机器上都跑起来。


三、7 个 TTS 引擎:不是堆数量,是按场景分工

Voicebox 最显眼的数字是「7 TTS engines」。但真正有意思的不是数量,是它们怎么按场景分工。

引擎

语言数

强项

Qwen3-TTS(0.6B/1.7B)

10

多语言高质量克隆,支持「说慢点」「耳语」等交付指令

Qwen CustomVoice

10

9 个预设音色,自然语言控制语气,不需要参考音频

LuxTTS

英语

轻量(约 1GB 显存),48kHz,CPU 上 150 倍实时

Chatterbox Multilingual

23

语言覆盖最广——阿拉伯语、印地语、斯瓦希里语、土耳其语等

Chatterbox Turbo

英语

350M 快速模型,支持副语言情感标签

TADA(1B/3B)

10

HumeAI 的语音语言模型,700 秒+ 连贯音频

Kokoro

8

50 个预设音色,82M 超小模型,CPU 推理快

这里的设计逻辑是:没有「最好的」引擎,只有「对某个任务最合适的」引擎。要克隆自己声音做中文播客,选 Qwen3-TTS;要给游戏 NPC 配音还加笑声,选 Chatterbox Turbo;要在没显卡的笔记本上快速出个英语草稿,选 Kokoro 或 LuxTTS;要覆盖小语种,只能选 Chatterbox Multilingual。

一个细节体现了工程上的诚实:副语言标签([laugh][sigh][gasp] 这类)只有 Chatterbox Turbo 会真的解释成动作,其他引擎会把它们当普通文字念出来。README 没有掩盖这一点,而是明确列了哪些引擎支持、哪些不支持——这种「按能力如实标注」的做法,比把所有引擎吹成全能要可信得多。

声音克隆走的是零样本(zero-shot)路径:给几秒参考音频就能克隆,也支持多样本提升质量。除了克隆,Kokoro 和 Qwen CustomVoice 还各带一批预设音色,不想克隆自己声音的人开箱即用。

生成长度上,它把长文本按句子边界自动切片,每段独立生成后用交叉淡入淡出(crossfade)拼回去,最长支持 5 万字符。切片还尊重缩写、CJK 标点和 [标签],不会把 [laugh] 从中间切断。


四、另一半回路:全局听写与语音输入

如果说前三个引擎部分是对标 ElevenLabs,那听写部分就是对标 WisprFlow。

核心交互是一个全局热键:在系统任何地方按住和弦键,说话,松开——macOS 上转写结果会直接粘进当时聚焦的输入框。两种模式可以各绑一组和弦:按住说话(push-to-talk)和点一下切换(toggle)。一个很巧的细节是,按住 PTT 的过程中点 Space,能把这次「按住」无缝升级成「免提会话」,中间不留录音断点。

粘贴这一步在 macOS 上做了无障碍级的处理:通过 Accessibility API 验证焦点、原子化地保存和恢复剪贴板,避免把你原来的剪贴板内容冲掉。第一次运行时 App 会引导你授予「辅助功能」和「输入监控」权限,并直接深链到系统设置对应页。

转写用 OpenAI Whisper,按平台走 MLX 或 PyTorch。除了标准的质量阶梯(Base/Small/Medium/Large),还提供 Whisper Turbo——号称比 Large 快约 8 倍、质量损失很小。这对听写场景很关键:听写要的是低延迟,Turbo 是为这个场景准备的。

转写完之后还有一步可选的 LLM 清洗:去掉「嗯」「啊」、口吃、假开头,再把结果粘进去。这步用的是前面提到的共享 Qwen3。听写这条链路因此变成「Whisper 转写 → Qwen3 清洗 → 粘贴」三段,三个本地模型串起来。

所有听写、App 内录音、上传的音频都会进 Captures 标签页,原始音频和转写文本都保留。你可以拿任意一条 Capture 换不同 Whisper 尺寸重新转写,或用不同清洗参数重跑本地 LLM,甚至一键把某条 Capture 的音频升格成某个声音配置的参考样本。这让听写从「说一次就没了」变成一个可以反复加工的本地素材库。


五、让 Agent 开口说话:内置 MCP 服务器

这是 Voicebox 最有意思、也最贴当前 AI 开发者需求的一块。

它内置了一个 MCP(Model Context Protocol)服务器,任何支持 MCP 的 Agent——Claude Code、Cursor、Windsurf、Cline——都能调一个工具,让 Agent 用你克隆的声音对你说话。

Claude Code 上一行命令就接上:

claude mcp add voicebox \

--transport http \

--url http://127.0.0.1:17493/mcp \

--header "X-Voicebox-Client-Id: claude-code"

然后 Agent 里这样调:

await voicebox.speak({

text: "Deploy complete.",

profile: "Morgan",

});

它提供了四个工具:voicebox.speak(说话)、voicebox.transcribe(转写)、voicebox.list_captures(列录音)、voicebox.list_profiles(列声音配置)。

几个设计细节值得拎出来:

1. 每个 Agent 绑不同声音。 在「设置 → MCP」里,可以把 Claude Code 绑定到「Morgan」、Cursor 绑定到「Scarlett」。这样多个 Agent 同时跑的时候,你不用看屏幕光听声音就知道是谁在说话。每个客户端还有 last_seen_at 时间戳,确认那个安装确实生效了。

2. 听写和 Agent 语音共用同一个浮窗。 这是整个项目最统一的一处设计。录音中、转写中、清洗中、说话中——这四种状态都走同一个系统级浮窗(pill)。因为听写是「你→机器」,Agent 语音是「机器→你」,本来就是同一条回路的两头,用同一个视觉原语承载,用户只需要建立一套心智模型。

3. 没有「静默后台 TTS」。 任何 Agent 主动发起的 speak 都会弹出浮窗、显示用的是哪个声音配置、持续整个过程。这是显式的安全设计——防止 Agent 在你不知道的时候用你的声音说话。

4. HTTP 和 stdio 双传输。 Claude Code / Cursor / Windsurf / VS Code 这类支持 HTTP MCP 的客户端,直接配个 URL 就行;只支持 stdio 的客户端,指向 App 内捆绑的 voicebox-mcp 二进制。两条路都通。

voicebox.speak 还支持 personality: true 参数,这会把输入文本先经过该声音配置的人格 LLM 改写,再送 TTS——也就是「文本进 → 人格改写 → 语音出」的管线。Agent 不再只是念一段固定文字,而是用这个「人设」重新组织语言再说出来。

不只是 MCP,它也暴露了普通 REST API。不会说 MCP 的脚本也能用:

curl -X POST http://127.0.0.1:17493/generate \

-H "Content-Type: application/json" \

-d '{"text": "Hello world", "profile_id": "abc123", "language": "en"}'

curl -X POST http://127.0.0.1:17493/speak \

-H "Content-Type: application/json" \

-H "X-Voicebox-Client-Id: my-script" \

-d '{"text": "Deploy complete.", "profile": "Morgan"}'

POST /speakprofile 既能传名字(不区分大小写)也能传 id,解析优先级和 MCP 工具一致:显式参数 → 该客户端绑定 → 默认播放声音。这意味着同一个端点,Agent 和 shell 脚本走的是同一套规则。


六、声音人格与本地 LLM:让克隆的声音「会说话」

光有 TTS 只能念稿。Voicebox 给每个声音配置加了一层「人格」(personality)——一段自由文本,描述这个声音是谁、怎么说话、在意什么。

配好人格后,生成框上会出现两个动作,背后是本地跑的 Qwen3 LLM:

Compose(生成):一个随机按钮,往输入框里丢一句符合人设的话,可以反复点换不同版本。

Speak in character(角色化朗读):一个开关,把你的输入文本先经过人格 LLM 改写成「这个人会怎么说」,再送 TTS。

这把声音克隆从「复刻音色」推进到了「复刻说话方式」。克隆的是音色,人格 LLM 管的是用词、语气、节奏。两者叠加,出来的就不再只是「用我的声音念字」,而是「一个有性格的角色在说话」。

Agent 侧也能走同一条路:voicebox.speakpersonality: true,工具就变成「文本进 → 人格 LLM → TTS」的管线。同一个人格 LLM 同时还服务于听写的清洗步骤——前面说过,整个 App 只有一个 LLM、一份模型缓存、一份显存占用。

这块的设计意图很清楚:本地优先不只是「数据不出本机」,还要「推理能力不出本机」。人格改写、听写清洗这些需要 LLM 的环节,全部用本地 Qwen3(0.6B/1.7B/4B 可选)跑掉,不依赖任何云 LLM。

它的适用场景也由此打开:Agent 开发循环(说一个问题、用克隆声音听答案)、游戏和叙事工具里的交互角色、为失去原有发声能力的人提供语音辅助。


七、工程细节:队列、版本、音效、模型管理

除了核心的输入输出回路,Voicebox 在工程化上还有几处设计值得一说。

异步生成队列。 生成是非阻塞的——提交一个生成任务,可以立刻开始敲下一个。任务串行执行以避免 GPU 争用,状态通过 SSE 实时推送,失败的可以重试,崩溃留下的「僵死」任务在下次启动时自动恢复。这套设计让长稿件批量生成时不用盯着等。

生成版本与溯源。 每次生成都有版本管理:原始 TTS 输出永远保留;可以从任意版本挂不同音效链生成新的效果版本;可以换种子重新生成一个 take;每个版本都记录它的来源谱系;还能收藏常用生成。这套结构把「一次生成」变成了「一棵带历史的版本树」,方便反复试不同效果。

8 种后处理音效。 基于 Spotify 的 pedalboard 库,生成后可加变调、混响、延迟、合唱/镶边、压缩、增益、高低通滤波,实时预览,能存成可复用预设。自带 4 个预设(机器人、电台、回声室、低沉嗓音),也能按声音配置设默认音效链。对做播客和内容的人来说,这一层把「TTS 出来的干声」变成「可发布的人声」。

模型管理。 每个模型可以单独卸载来腾显存(不用删下载);支持自定义模型目录(VOICEBOX_MODELS_DIR);模型文件夹可以带进度迁移;下载可取消可清理。本地跑多个大模型,显存是稀缺资源,这些管理能力是必需的。

Stories 编辑器。 一个多音色时间轴编辑器,支持多轨道拖拽、音频内联裁剪和切分、同步播放头、每个片段可钉版本。做对话、播客、叙事内容时,能把不同声音配置的片段编排到一条时间线上。


八、值得借鉴的设计思想

把 Voicebox 拆到这里,有几个设计思想对做 AI 工具的人有普遍参考价值。

第一,把分散的回路统一起来。 听写和 Agent 语音本是同一条回路的两个方向,ElevenLabs 和 WisprFlow 各占一头、互不通气。Voicebox 用同一个 App、同一个浮窗状态机、同一个本地 LLM 把两头接上。当一个工具能覆盖「说进去」和「说出来」的完整闭环,它的价值就大于两个单点工具的叠加。判断一个 AI 工具该不该自己做某块功能,可以问一句:这块和已有能力是不是同一条回路的两头?

第二,本地优先不是口号,是一连串具体取舍。 数据不出本机、推理用本地模型、声音配置可导出导入、Capture 本地留存——这些凑在一起才是「local-first」。其中「TTS/STT/LLM 共享一个 Qwen3 运行时」是关键技术决策:本地显存有限,让多个模型共享运行时和缓存,是本地优先能跑得起来的前提。想做本地 AI 工具的团队,先想清楚怎么让多个模型共享一份显存。

第三,MCP 不是附属功能,是核心分发路径。 Voicebox 把 voicebox.speak 同时做成 MCP 工具和 REST 端点,并给每个 Agent 绑不同声音。这说明对今天的 AI 工具而言,「能不能被 Agent 调用」已经是和「好不好用」并列的一等能力。一个语音工具如果不暴露给 Agent,它的使用场景就只有人手动点;一旦暴露,Agent 开发循环、内容自动化、语音助手这些场景立刻打开。

第四,按能力如实标注,不掩盖短板。 副语言标签只有 Chatterbox Turbo 支持这件事,README 写得清清楚楚,没有把 7 个引擎吹成全能。这种诚实反而提升了可信度——用户知道哪个引擎适合什么,不会踩坑。对开源项目来说,明确写出「X 引擎不支持 Y」比模糊其辞更有利于建立信任。

第五,跨平台推理矩阵要全覆盖。 从 Apple Silicon 的 MLX,到 NVIDIA CUDA、AMD ROCm、Intel Arc 的 IPEX、Windows 的 DirectML,再到 CPU 兜底,Voicebox 把主流硬件后端都接了。本地 AI 工具的受众分散在各种硬件上,少接一个后端就少一批用户。


结语

Voicebox 的价值不在于它又多了一个 TTS 引擎,而在于它把「语音输入 + 语音输出 + Agent 接入」这件事用一套本地优先的架构统一起来了。

对开发者,它提供了一个可以接进 Agent 的本地语音 I/O 层——voicebox.speak 一个工具调用,Claude Code 就能用你克隆的声音回答你,全程不碰云。对创作者,它把 ElevenLabs 级别的克隆质量和 WisprFlow 级别的全局听写装进了同一个免费 App。对做 AI 工具的人,它的工程决策——Tauri 外壳 + Python 推理内核、多模型共享运行时、MCP 作为一等分发路径——是一份可以直接参考的本地 AI 工具设计样本。

项目地址:github.com/jamiepine/voicebox,官网 voicebox.sh,MIT 协议。macOS、Windows 有预编译包,Linux 暂需源码编译,也可 docker compose up 跑。

如果你正在搭一个需要语音交互的 Agent 工作流,或者只是受够了把声音数据往云上传,这个项目值得装一个试试。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-07-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 超级AI技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、它想解决什么:语音 I/O 回路被两家云厂商切开了
  • 二、技术栈:Tauri + Rust 做外壳,Python FastAPI 做推理内核
  • 三、7 个 TTS 引擎:不是堆数量,是按场景分工
  • 四、另一半回路:全局听写与语音输入
  • 五、让 Agent 开口说话:内置 MCP 服务器
  • 六、声音人格与本地 LLM:让克隆的声音「会说话」
  • 七、工程细节:队列、版本、音效、模型管理
  • 八、值得借鉴的设计思想
  • 结语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档