可能是目前最好的开源 text to speech 模型, 不同于以往机械生硬的 text to speech 模型, ChatTTS 专注于生成对话场景的语音, 生成的语音也会自然的出现停顿等模拟 conversation 的效果.

项目地址: https://github.com/2noise/ChatTTS

演示视频(强烈推荐): https://www.bilibili.com/video/BV1zn4y1o7iV

原理

ChatTTS 与最近很多新出现的 TTS 模型一样, 也是一个自回归模型了, 与 LLM 类似. 每个语音被以某种编码器转换成了 token, 整个模型可以端到端, 直接用语音数据和字幕数据训练, 保留了 speech 空间的更多可能性, 使得生成的语音非常的生动多变自然.

模型在处理时, 分为两个步骤:

  1. RefineText : 为 text 加入 类似: oral_(0-9), laugh_(0-2), break_(0-7) 的模拟口头表达的控制词
  2. InferCode: 生成 audio token

模型权重分为两个版本:

  1. 开源版本: 在 40000 小时语音上训练得来的预训练版本, 未经微调的
  2. 闭源版本: 计划是需要使用 API 访问

安全

这里之所以会出现闭源版本, 主要是出于安全(防滥用)考虑:

为了限制ChatTTS的使用,我们在训练这个40,000小时模型时,加入了一小部分高频噪音,并尽可能使用MP3格式压缩音频质量,以防止恶意行为者可能将其用于犯罪目的。同时,我们已经在内部训练了一个检测模型,并计划在未来开源。

目前 ChatTTS 的开源版本, 并不能选择音色, 而是以“抽卡”的形式进行的, 在 demo 代码里, 我们可以看到:

rand_spk = chat.sample_random_speaker()

这段代码的作用就是随机出一个 speaker embedding, 也就是一个人设声音的特征值. 记住这个特征值, 就可以在下一次的生成中, 使用该声音

限制

  1. 目前的模型稳定性一般, 就像 LLM 会有幻觉, ChatTTS 有时会自行理解 text 认为是有两个人在对话, 从而生成两个不同的人在对话的 Speech Audio, 想要理想效果, 也需要抽卡.
  2. 模型目前只支持 [laugh][uv_break], and [lbreak] 三个 control token,

总结

目前 ChatTTS 无需 GPU, 可以使用 CPU 即可推理. 按照 Github 说明可以快速安装试用, 还不赶快试试抽一些可爱的音色出来陪你聊天吗?