Spark-TTS:仅用一个编解码器,无需单独的声学模型
大多数基于 LLM 的 TTS 系统都需要在语言模型完成工作后再接入第二个模型——一个流匹配网络或扩散解码器,用来把预测的 token 转换成实际的声学细节。Spark-TTS 由 HKUST、Mobvoi、上海交通大学及其他多家机构的研究人员共同开发,彻底移除了这一第二阶段。它构建于 Qwen2.5 之上,直接从语言模型预测的编码中重建音频,并通过专门设计的编解码器实现这种直接重建,同时不牺牲质量或控制能力。
什么是 Spark-TTS?
Spark-TTS 是一套开源、基于 LLM 的文本转语音系统,首次发表于 2025 年 3 月的一篇论文,完全以 Qwen2.5 语言模型作为骨干。它的核心贡献是 BiCodec:一种单流语音编解码器,免除了大多数同类 LLM TTS 架构所依赖的独立声学生成模型,例如流匹配模型。其他方案通常需要预测多层堆叠的码本,再由专用解码器解释这些码本;而 Spark-TTS 的 LLM 所预测的编码可以直接映射为音频,把整个生成流程精简成更简单、计算效率更高的形式。
Spark-TTS 的功能优势
- 真正简化的架构。 生成声学特征时不需要单独的流匹配或扩散模型——音频直接从 LLM 预测的编码中重建,从而同时降低复杂度和推理成本。
- 零样本声音克隆,无需针对特定目标声音准备任何专门的训练数据,即可复刻目标说话人的声音。
- 独立的 Voice Creation 模式,只需控制参数就能生成完全合成的声音,完全不需要参考音频——这是一项与克隆真正不同的能力。
- 对表达方式的精细控制,既包括精确的音高数值和语速,也包括性别和整体说话风格等较粗粒度的控制。
- 中英双语支持,包括在同一次生成中进行跨语言语码转换的场景。
- 完全开放的研究流程,模型、训练代码以及专门构建的 VoxBox 数据集(100,000 小时带有详细属性标注的语音)均已公开发布。
BiCodec 的解耦 token 究竟如何工作
这是 Spark-TTS 能够在不放弃控制能力的前提下实现简化的关键设计选择,值得直接了解。BiCodec 将语音拆分为两种互补的 token:低码率的语义 token 用于承载语言内容(说了什么),固定长度的全局 token 用于承载说话人特有属性(谁在说,以及以什么风格说)。由于这两类 token 彼此清晰分离,而不是相互纠缠,Qwen2.5 骨干配合思维链生成方法,可以在一定程度上独立操控它们:调整全局 token 会改变声音特征而不干扰语言内容,反之亦然。这种解耦正是同一套底层表示能够同时支持粗粒度控制(选择性别或整体说话风格)和细粒度控制(设定精确音高数值或语速)的原因,而不必为不同控制层级分别设计机制。
两种模式:Voice Cloning 与 Voice Creation
Spark-TTS 围绕两套真正不同的工作流构建,而不是只有一种。Voice Cloning 接收一段参考音频及其转录文本,并以该说话人的声音生成新语音——这就是标准的零样本克隆用例。Voice Creation 则从相反方向工作:你不需要提供参考录音,而是指定控制参数(性别、音高、语速、风格),模型便会生成完全符合这些设定的合成声音,整个过程完全不涉及真实人物的声音。第二种模式对于需要保持一致的虚拟说话人身份的项目确实很有用,例如品牌助手声音或游戏角色,因为无需先寻找真实配音演员、取得其许可或进行录音。
开始使用 Spark-TTS
- 克隆仓库并设置 Python 3.12 环境。 运行
git clone https://github.com/SparkAudio/Spark-TTS.git,然后创建并激活专用 conda 环境(conda create -n sparktts -y python=3.12 && conda activate sparktts),再通过pip install -r requirements.txt安装依赖。 - 下载模型权重。 使用
huggingface_hub库中的snapshot_download("SparkAudio/Spark-TTS-0.5B", local_dir="pretrained_models/Spark-TTS-0.5B"),或者通过git lfs install && git clone https://huggingface.co/SparkAudio/Spark-TTS-0.5B pretrained_models/Spark-TTS-0.5B直接克隆。 - 通过 CLI 运行克隆推理。
python -m cli.inference --text "text to synthesize." --device 0 --save_dir "path/to/save/audio" --model_dir pretrained_models/Spark-TTS-0.5B --prompt_text "transcript of the prompt audio" --prompt_speech_path "path/to/prompt_audio"可直接从命令行完成基本的声音克隆工作流。 - 启动同时支持 Voice Cloning 和 Voice Creation 的 WebUI。
python webui.py --device 0会打开支持两种工作流的浏览器界面——Voice Cloning 接受上传的参考片段或实时录音,Voice Creation 则直接提供控制参数。 - 查看用于生产部署的 Triton/TensorRT-LLM 参考方案。 项目专门为准备从本地实验转向生产级服务的团队记录了 Nvidia Triton 与 TensorRT-LLM 部署路径。
获得更好效果的技巧
- 不需要特定真实人物的声音时,使用 Voice Creation 而不是克隆。 如果项目只需要一个稳定且独特的虚拟说话人,通过控制参数生成声音,可以避开克隆真实参考声音时伴随的许可和同意问题。
- 为克隆提供准确的提示文本转录。 CLI 同时要求参考音频及与之匹配的转录文本,因此准确的转录能让模型在生成时更可靠地分离语言内容与说话人身份。
- 尝试精细的音高和语速控制,而不是只依赖粗粒度设置。 BiCodec 的解耦 token 专门支持精确调整,因此使用具体数值而不只是宽泛的风格类别,才是这款模型的控制能力真正区别于仅依赖参考音频的克隆系统之处。
- 如果内容需要跨语言语码转换,请直接测试。 这是明确支持的场景,而不是边缘用例,因此在假设中英混合内容能获得稳定一致的质量之前,值得先直接验证你的具体内容。
Spark-TTS 与其他基于 LLM 的克隆模型对比
| Spark-TTS | CosyVoice3 | F5-TTS | |
|---|---|---|---|
| 核心机制 | 单流 BiCodec,LLM 直接生成音频 | 有监督语义 token + 流匹配 | Diffusion Transformer + 流匹配 |
| 是否需要单独的声学模型 | 否 | 是(流匹配阶段) | 是(核心生成阶段) |
| 零样本克隆 | 是 | 是 | 是 |
| 完全合成的声音创建(无参考音频) | 是,设有专用模式 | 不是专用功能 | 不是专用功能 |
| 精细音高/语速控制 | 是,通过解耦 token 实现 | 基于指令 | 不是专用功能 |
| 语言 | 中文、英文(语码转换) | 9 种语言 + 18 种中文方言 | 主要面向英文 |
| 许可证 | CC-BY-NC-SA-4.0(非商业、相同方式共享) | 开放,可使用托管 API | CC-BY-NC(非商业) |
Spark-TTS 的特定定位,是将架构简洁性与真正的双用途灵活性结合起来——单流设计砍掉了大多数同类系统仍然需要的整个模型阶段,而 Voice Creation 模式又覆盖了多数以克隆为中心的模型无法直接处理的用例:在完全不使用真实参考声音的情况下创建合成声音。
常见问题
Spark-TTS 的架构与其他基于 LLM 的 TTS 模型有何不同?
它使用 BiCodec,一种单流编解码器,让 Qwen2.5 骨干能够预测直接映射为音频的编码,从而省去大多数同类系统作为额外生成阶段所需的独立流匹配或扩散模型。
Spark-TTS 能否在没有任何参考音频的情况下创建声音?
可以——这正是 Voice Creation 模式的特定用途。它根据性别、音高和语速等控制参数生成完全合成的声音,完全不需要参考录音。
Spark-TTS 是否支持英语和中文以外的语言?
其文档和训练重点是中英双语,包括在同一次生成中进行跨语言语码转换;更广泛的语言支持并不属于核心版本。
Spark-TTS 可以免费用于商业用途吗?
未经单独许可则不可以。它采用 CC-BY-NC-SA-4.0 许可证发布,将使用范围限制为非商业用途并要求相同方式共享;其文档也明确把预期用途限制在研究、教育和合法应用,同时禁止未经授权的声音克隆或冒充。
Spark-TTS 进行声音克隆需要多少参考音频?
文档中的工作流使用一段简短的参考音频及与之匹配的转录文本;它不像某些其他模型那样严格规定确切的最短时长,但克隆流程所依据的仍是一段清晰且具有代表性的样本。
使用参考音频生成相似声音
如果你想完成目标相近的浏览器声音克隆流程,可以使用 Echora 的声音克隆。上传你自己的声音,或你已获得明确授权使用的参考音频,输入最多 5,000 个字符的新文本,即可生成力求贴近参考声音的新语音。