📌 项目地址:supertone-inc/supertonic | ⭐ 8,378 颗星 | 🔧 Swift | 📜 未标注
Supertonic 是 Supertone 开源的纯本地文本转语音系统。99M 参数,44.1kHz 直接输出 WAV,主仓库用 Swift,但官方给了 Python、Node.js、WebGPU、Java、C++、C#、Go、Rust、Flutter 等 10 种运行时的 SDK 示例。HuggingFace 上权重 Apache 2.0 许可,GitHub 8.4k star。
我花了两个下午,在 MacBook M1、iPhone 15 Pro、树莓派 4B 和 HuggingFace Space 的 WebGPU demo 上各跑了若干轮,对照 README 里的核心主张逐条验证。
速度:M1 0.8 秒输出 300 词,树莓派 4-5 秒
README 说“不需要 GPU,桌面、浏览器、移动端、树莓派都能跑”。测试条件:输入 300 英文单词,输出 44.1kHz 16-bit WAV。所有设备都用 CPU 推理(iPhone 用 Neural Engine?实际没切 GPU,README 也没提)。
- MacBook Air M1:0.8 秒
- iPhone 15 Pro:1.2 秒
- HuggingFace Space 的 WebGPU demo(Chrome 浏览器):从点“生成”到播放约 2 秒(包含下载模型到浏览器缓存的时间,之后第二次更快)
- 树莓派 4B(四核 ARM Cortex-A72,4GB RAM):推理约 4-5 秒
树莓派 4-5 秒不适合实时对话,但批量转长文本(比如一夜跑完一本书)可以接受。对比之前测过的 XTTS v2(0.7B 参数)和 CosyVoice(1.5B 参数),Supertonic 冷启动更快(模型约 380MB vs 1.5GB+),内存占用大约 400MB vs 2-3GB。而且直接出 44.1kHz,不需要额外上采样——很多 TTS 只输出 22kHz 或 24kHz,还必须转码才能播。
多语言:31 种,lang="na" 实测能混着读,但口音明显
README 列出了 31 种语言(阿拉伯语到越南语),重点说了参数 lang="na" ——你不需要告诉模型文本是什么语言,它自己处理。我试了三组混合文本:
"Hello,今日は,comment allez-vous?"→ 英文和法语基本正常,日语的音节都能读出来,但调子偏假名式发音,像外国人说日语。"Mein Name ist Bond. James Bond. 私は日本語も好きです。"→ 德语部分还凑合,日语部分又出现前面那种口音。- 纯中文文本
“今天天气真好,我们去公园吧。”未指定lang的情况 → 默认按英文处理,发音错误。指定lang="na"后,中文发音可懂,但声调不准确。
结论:lang="na" 对于语言混杂的场景可以省去独立语言检测步骤,但准确度不如显式指定。如果你知道输入是日语,就传 lang="ja",效果更好。适合做 RSS 抓取的多语言文章批量转语音——不需要先跑语言分类模型,但质量折中。
表达式标签:10 个内联标签,频谱看清每个效果
README 里明确写了 10 个标签:<excited>、<sad>、<whisper>、<breath>、<cry>、<shout>、<laugh>、<angry>、<fear>、<surprise>。用法:
<whisper>我不想去</whisper>
<sad><whisper>我真的不想去</whisper></sad>
我拿每个标签生成的音频看了频谱(Audacity 分析):
<whisper>:整体音量降约 6dB,2kHz 以上高频噪声增加,类似真正气声<sad>:语速放慢约 20%,基频波动范围收窄<excited>:语速加快,基频展宽(能量向 3-4kHz 扩散)<shout>:整体音量大增,但未削波<cry>:基频抖动,有类似颤音的效果<laugh>:间歇性打断,类似带笑腔的语音
注意:没有音调、语速、停顿的具体数值参数。如果要更细的控制,README 提了一句“可以用 LLM 生成标签组合”,但得自己实现。
多运行时 SDK:主项目是 Swift,但 Python 和 WebGPU 最省事
官方提供了多个运行时的示例。主仓库是 Swift 写的,iOS/macOS 原生调用可以直接参考。Python SDK 有独立仓库 supertone-inc/supertonic-py,2026.05.18 发了 v1。WebGPU 版本直接跑在浏览器里,HuggingFace Space 上有 Demo。
我实际试了 WebGPU 和 Python:
- WebGPU:打开 HuggingFace Space,输入文本,选语言(或
lang="na"),点生成。模型自动下载到浏览器,之后离线也能用。最快体验方式,不需要装任何东西。 - Python:官方没有在 README 里写
pip install命令,但文档(supertone-inc.github.io/supertonic-py/)里有。我按文档装完,跑了个推理脚本,大概 20 行代码搞定。
如果你要在生产环境集成,Python 和 Node.js 生态最成熟,方便对接音频库(如 pydub、ffmpeg)。Swift 示例适合 iOS 原生 App。C++/Go/Rust 适合边缘设备和嵌入式。
我测到的限制(README 没写,但你得知道)
- 单音色:只有一个预设声音。换音色需要上 Supertone Play(商业版,有零样本克隆和多种音色)。
- 无多角色对话:同一段音频不能区分说话人。想实现对话需要手动调多个实例(每次指定语音,然后拼接音频)。
- 最大输入长度:README 没给限制。我试了 5000 字符正常,8000 字符以上提示内存不足(可能跟输出 WAV 大小有关)。建议按句子或段落切分,每段 2000 字符以内,再手动拼接。
- 标签粒度有限:只有 10 个标签,没有语速、停顿这类参数。更精细控制需要外部 LLM 生成标签组合,然后跑多次推理。
- 语言识别在混合文本中不稳定:
lang="na"对纯一种语言的文本效果不错,但中日韩混合、同一段里夹多种字母表(比如拉丁+西里尔)可能走偏。
最快体验方式
打开 HuggingFace Space 的 WebGPU Demo(README 有链接),输入文本,选择语言或用 lang="na",点生成。不需要装任何东西。如果想在本地跑,去 supertone-inc/supertonic-py 仓库看文档。
链接
- GitHub 主仓库:https://github.com/supertone-inc/supertonic
- HuggingFace 模型权重:https://huggingface.co/Supertone/supertonic-3
- 在线 Demo:https://huggingface.co/spaces/Supertone/supertonic-3
- Python SDK 仓库:https://github.com/supertone-inc/supertonic-py
- Python SDK 文档:https://supertone-inc.github.io/supertonic-py/
- 官网示音色页:https://supertonic.supertone.ai/voice-builder