欣淇
发布于 2026-05-29 / 0 阅读
0
0

⭐ ChatTTS:39,355 stars

🎙️ ChatTTS:开源对话式语音合成模型,4万小时训练打造自然对话体验

你试过用TTS生成对话语音吗?大多数开源模型合成的语音听起来像机器人念稿,缺乏真实对话中的语气变化、停顿和情感表达。如果你正在做语音助手、有声书或对话机器人,一定遇到过这个问题。

项目核心数据

ChatTTS是一个专为对话场景设计的文本转语音模型,由2noise团队开源。项目基于10万+小时中文和英文音频数据训练,开源版本是4万小时预训练模型(未经过SFT微调)。代码采用AGPLv3+协议,模型采用CC BY-NC 4.0协议,仅限学术和研究用途。

三大核心功能拆解

1. 对话式语音合成

与普通TTS不同,ChatTTS针对对话任务优化,支持多说话人交互。你可以让同一个模型生成不同角色的语音,实现自然的对话流程。

2. 细粒度韵律控制

模型能预测和控制笑声、停顿、语气词等韵律特征。你可以在文本中插入特殊标记来控制输出效果:
- [oral_0][oral_9]:控制口语化程度
- [laugh_0][laugh_2]:控制笑声强度
- [break_0][break_7]:控制停顿长度

3. 更优的韵律表现

在韵律方面,ChatTTS超过了大多数开源TTS模型。它能够理解上下文语境,生成更自然的语调和节奏。

实操步骤:5分钟上手

安装

pip install ChatTTS

基础使用:生成两段语音

import ChatTTS
import torch
import torchaudio

chat = ChatTTS.Chat()
chat.load(compile=False)

texts = ["你好,今天天气真不错。", "是啊,很适合出去散步。"]

wavs = chat.infer(texts)

for i in range(len(wavs)):
    try:
        torchaudio.save(f"output{i}.wav", torch.from_numpy(wavs[i]).unsqueeze(0), 24000)
    except:
        torchaudio.save(f"output{i}.wav", torch.from_numpy(wavs[i]), 24000)

高级用法:控制说话人音色和韵律

# 随机采样一个说话人特征
rand_spk = chat.sample_random_speaker()

params_infer_code = ChatTTS.Chat.InferCodeParams(
    spk_emb = rand_spk,
    temperature = .3,
    top_P = 0.7,
    top_K = 20,
)

# 句子级别控制:添加口语化、笑声和停顿
params_refine_text = ChatTTS.Chat.RefineTextParams(
    prompt='[oral_2][laugh_0][break_6]',
)

wavs = chat.infer(
    texts,
    params_refine_text=params_refine_text,
    params_infer_code=params_infer_code,
)

启动Web界面

python examples/web/webui.py

避坑指南

  1. 不要安装FlashAttention-2:当前版本下,FlashAttention-2会降低生成速度,仅限开发目的时安装。

  2. 不要安装TransformerEngine:适配工作尚未完成,目前无法正常运行。

  3. 模型仅供学术使用:开源模型添加了高频噪声并压缩了音频质量,防止恶意使用。如果你需要商业用途,需要联系官方获取授权。

  4. 保存说话人特征:使用sample_random_speaker()生成的特征向量可以保存下来,下次生成时传入相同的spk_emb值,就能保持音色一致。

要点总结

ChatTTS解决了对话场景下TTS的自然度问题,4万小时训练数据让它在韵律表现上远超同类开源模型。你可以通过细粒度控制标记精确调节语音效果,也可以随机采样不同说话人实现多角色对话。但要注意,目前版本仅支持中文和英文,且开源模型做了质量限制。如果你是做学术研究或非商业项目,这是目前最好的对话式TTS选择。


评论