FireTable's Log
← 返回
🤖 AI 相关

折腾半天,让我的博客会说话

音频

折腾半天,让我的博客会说话

0:00/0:00
✦ ✦ ✦
我最近给博客加了个功能,在文章开头多了一个播放卡片,点开就能听。
起因是 MiniMax 将 Coding Plan 升级成 Token Plan,可以调用全量模型了,其中包括语音合成 API。我一开始尝试用 MiniMax 来做语音博客,效果还不错,音色调起来也方便。
但问题是,我的 Token Plan 每滚动 5 小时只有 1500 额度,每次合成 1000 字要花 400 左右额度。
一篇 3000 字的文章,光读一遍就要 1200 额度。随便来几段语音,额度就没了。
notion image
我开始琢磨:能不能找个更便宜的方案?

新方案

首先想到的是自己部署一个 TTS 模型。
按照我的机器配置,Mac Studio M1 Ultra,64GB 内存,跑个几 B 参数的模型理论上没问题。
然后我找到了 **Qwen3-TTS,**阿里开源的语音合成模型族。
  • 支持 Voice Design(自然语言描述音色)
  • Voice Clone(3-10 秒参考音频克隆声线)
  • Custom Voice(预设音色)
Apple Silicon 有专门的 MLX 优化版本,直接跑在 Mac 上绰绰有余。
我花了个半小时搭了起来。模型第一次加载要 30-60 秒,但加载完之后,有不错的效果。
关键是——无限用,不花一分钱
notion image

Markdown 分块

博客文章本质上是 Markdown 格式,直接扔给 TTS 会有问题:
  • 图片链接、代码块会被念出来
  • 标题层级、列表结构没体现
  • 标点符号中英文混用导致断句位置不对
所以我在 MLX-Qwen3-TTS-WebUI-CN 里加了 Markdown 感知分块 功能:
输入:Markdown 文本 输出:保留结构的文本块(标题/段落/列表独立处理)
实现逻辑:
  • 用 mistune 解析 AST,识别标题(# ##)、列表(- 1.)、段落
  • 图片、代码块、表格直接跳过,不进 TTS
  • Emoji 先去掉,避免特殊字符干扰
  • YAML 元数据头(如 --- 之间的内容)自动剥离
  • 中英文标点分开处理,句号用中文 。!?
效果是:TTS 朗读出来的顺序和节奏,跟默读一篇博文的体验一致。

多人对话 TTS

上游项目 szkane/MLX-Qwen3-TTS-WebUI-CN 支持多人对话 TTS,每个角色可以选 Voice Design(自然语言描述音色)或者 Saved Voice(之前克隆过的音色)。
这个功能我不是经常用,但觉得挺适合做技术方案讲解或者播客风格内容的——两个人互相吐槽比一个人干念有趣多了。

预生成 + CDN

整体方案是预生成 + CDN 分发:
  1. 发布文章
  1. Qwen3-TTS 合成音频
  1. 上传 Vercel Blob
  1. URL 存入 Notion audioUrl 字段
用户访问时,博客直接加载静态音频,零 API 调用。
这种"预生成"模式比实时合成更适合博客场景——文章是静态内容,提前合成好,播放时无需等待,成本也更低。BBC 等媒体用 TTS 替代人工重录文章音频,方案已经非常成熟。
技术细节不展开了。核心是在 OpenClaw 的博客发布流程里加了一个步骤——每次填完 Notion 信息,OpenClaw 会问我要不要生成音频,我要,它就自动帮我合成、上传、填好 audioUrl 字段。

小蠢的音色

notion image
说到音色,我给小蠢也定制了一个。她是我在 OpenClaw 里的 AI 助手。
专属音色使用 Voice Design 生成——音色特征:"清亮活泼的女性少女音,声线清澈透亮,语调俏皮灵动,咬字清晰颗粒感十足,语速轻快跳跃,朗读文章时语气活泼开朗,绝不吞字,音色明亮如阳光。像一个嘴硬心软的资深程序媛,元气满满,偶尔毒舌吐槽,聪明又接地气。"。(这是她自己根据 IDENTITY.md 自己决定的)
生成效果出乎意料地好。咬字清晰,语气自然,机器感不强(反正跟 MiniMax 的没差)。
现在我写完文章,会让小蠢去念一遍。发出去的时候,文章不只有文字,还有声音版本。感觉博客一下子立体了很多。
(历史博客小蠢正在更新中…)

尾声

博客不只是给人看的,也可以给人听。
有时候在通勤路上,想起来某篇文章,直接点开听,比看屏幕舒服。语音版本不会替代阅读,但给了另一种消费内容的方式。
如果你也是技术博客作者,正在考虑给自己的站点加语音,本地 TTS 是个值得探索的方向。
可选方案很多,Qwen3-TTS、Index-TTS、F5-TTS、ChatTTS……挑一个适合自己硬件条件的,先跑起来试试。
说不定哪天,你的博客也会开口说话了。