ChatTTS用于日常对话的生成式语音模型

ChatTTS

用于日常对话的生成语音模型。

简介

[!注意]
此代码库包含算法基础架构和一些简单示例。

[!提示]
有关扩展的最终用户产品,请参阅由社区维护的索引代码库 Awesome-ChatTTS

ChatTTS 是一个专为 LLM 助手等对话场景设计的文本转语音模型。

支持语言

  • 英语
  • 中文
  • 即将推出...

亮点

您可以参考**Bilibili 上的此视频**获取详细说明。

  1. 对话式 TTS:ChatTTS 针对对话类任务进行了优化,可实现自然且富有表现力的语音合成。它支持多说话人,方便进行交互式对话。
  2. 细粒度控制:该模型可以预测和控制细粒度的韵律特征,包括笑声、停顿和感叹词。
  3. 更佳的韵律:ChatTTS 在韵律方面超越了大多数开源 TTS 模型。我们提供预训练模型以支持进一步的研究和开发。

数据集和模型

[!重要]
发布的模型仅供学术用途。

  • 主模型使用超过 100,000 小时的中英文音频数据进行训练。
  • HuggingFace 上的开源版本是一个经过 4 万小时预训练的模型,无需 SFT。

路线图

  • 开源 4 万小时基础模型和 spk_stats 文件。
  • 流式音频生成。
  • 开源 DVAE 编码器和零样本推理代码。
  • 多情绪控制。
  • ChatTTS.cpp(欢迎在 2noise org 中提交新的代码库)

许可证

代码

代码采用 AGPLv3+ 许可证发布。

模型

模型采用 CC BY-NC 4.0 许可证发布。本模型旨在用于教育和研究,不得用于任何商业或非法用途。作者不保证信息的准确性、完整性或可靠性。本代码库中使用的信息和数据仅供学术和研究之用。数据来自公开来源,作者不主张对数据的任何所有权或版权。

免责声明

ChatTTS 是一个强大的文本转语音系统。然而,负责任地、合乎道德地使用这项技术至关重要。为了限制 ChatTTS 的使用,我们在训练这个 40,000 小时模型时添加了少量高频噪声,并使用 MP3 格式尽可能地压缩音频质量,以防止恶意行为者将其用于犯罪目的。与此同时,我们已经内部训练了一个检测模型,并计划在未来将其开源。

联系方式

欢迎随时在 GitHub 上提交问题/PR。

正式咨询

如需正式咨询模型和路线图,请通过 open-source@2noise.com 联系我们。

在线聊天

1. QQ 群(中文社交应用)
  • 群 1,808364215
  • 群 2,230696694
  • 群 3,933639842
  • 群 4,608667975
2. Discord 服务器

点击此处加入。

开始

克隆代码库

bash 复制代码
git clone https://github.com/2noise/ChatTTS
cd ChatTTS

安装要求

1. 直接安装

bash 复制代码
pip install --upgrade -r requirements.txt

2. 通过 conda 安装

bash 复制代码
conda create -n chattts python=3.11
conda activate chattts
pip install -r requirements.txt

可选:安装 vLLM(仅限 Linux)

bash 复制代码
pip install safetensors vllm==0.2.7 torchaudio

不推荐 可选:如果使用 NVIDIA GPU,请安装 TransformerEngine(仅限 Linux)

[!警告]
请勿安装!
TransformerEngine 的适配版本目前正在开发中,目前无法正常运行。
仅用于开发目的。更多详情请参阅 #672 #676

[!注意]
安装过程非常缓慢。

bash 复制代码
pip install git+https://github.com/NVIDIA/TransformerEngine.git@stable

不推荐 可选:安装 FlashAttention-2(主要针对 NVIDIA GPU)

[!警告]
请勿安装!
目前,根据此问题,FlashAttention-2 会降低生成速度。
仅用于开发目的。

[!注意]
请参阅 Hugging Face 文档 查看支持的设备。

bash 复制代码
pip install flash-attn --no-build-isolation

快速入门

执行以下命令时,请确保您位于项目根目录下。

1. 启动 WebUI

bash 复制代码
python examples/web/webui.py

2. 通过命令行进行推断

它会将音频保存到 ./output_audio_n.mp3

bash 复制代码
python examples/cmd/run.py "Your text 1." "Your text 2."

安装

  1. 从 PyPI 安装稳定版本
bash 复制代码
pip install ChatTTS
  1. 从 GitHub 安装最新版本
bash 复制代码
pip install git+https://github.com/2noise/ChatTTS
  1. 以开发模式从本地目录安装
bash 复制代码
pip install -e .

基本用法

python 复制代码
导入 ChatTTS
导入 torch
导入 torchaudio

chat = ChatTTS.Chat()
chat.load(compile=False) # 设置为 True 以获得更佳性能

texts = ["PUT YOUR 1st TEXT HERE", "PUT YOUR 2nd TEXT HERE"]

wavs = chat.infer(texts)

for i in range(len(wavs)):
"""
在某些版本的 torchaudio 中,第一行代码有效,但在其他版本中,第二行代码也有效。
"""
try:
torchaudio.save(f"basic_output{i}.wav", torch.from_numpy(wavs[i]).unsqueeze(0), 24000)
except:
torchaudio.save(f"basic_output{i}.wav", torch.from_numpy(wavs[i]), 24000)

高级用法

python 复制代码
#####################################
# 从高斯模型中采样说话人。

rand_spk = chat.sample_random_speaker()
print(rand_spk) # 保存以便后续音色恢复

params_infer_code = ChatTTS.Chat.InferCodeParams(
spk_emb = rand_spk, # 添加采样说话人
temperature = .3, # 使用自定义温度
top_P = 0.7, # 解码最高 P 值
top_K = 20, # 解码最高 K 值
)

#####################################
# 用于句子级别的手动控制。

# 使用 oral_(0-9)、laugh_(0-2)、break_(0-7)
# 在文本中生成特殊标记进行合成。
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,
)

#####################################
# 用于单词级手动控制。

text = '[uv_break]你最喜欢的英国食物是什么?[笑][lbreak]'
wavs = chat.infer(text, skip_refine_text=True, params_refine_text=params_refine_text, params_infer_code=params_infer_code)
"""
在某些版本的 torchaudio 中,第一行代码可以正常工作,但在其他版本中,第二行代码也可以正常工作。
"""
尝试:
torchaudio.save("word_level_output.wav", torch.from_numpy(wavs[0]).unsqueeze(0), 24000)
例外:
torchaudio.save("word_level_output.wav", torch.from_numpy(wavs[0]), 24000)

<详情打开>
<摘要>

示例:self简介

python 复制代码
inputs_en = """
chat T T S 是一款专为对话应用设计的文本转语音模型。
[uv_break]它支持混合语言输入,[uv_break]并提供多说话人功能,
能够精确控制韵律元素,例如
[uv_break]笑声、[uv_break]停顿、[uv_break]和语调。
[uv_break]它能够提供自然且富有表现力的语音,[uv_break]因此,请
[uv_break]自行承担风险,负责任地使用该项目。[uv_break]
""".replace('\n', '') # 英语仍处于实验阶段。

params_refine_text = ChatTTS.Chat.RefineTextParams(
prompt='[oral_2][laugh_0][break_4]',
)

audio_array_en = chat.infer(inputs_en, params_refine_text=params_refine_text)
torchaudio.save("self_introduction_output.wav", torch.from_numpy(audio_array_en[0]), 24000)

男声

女声

男声说话者

女声

关于项目

ChatTTS是一款适用于日常对话的生成式语音模型,它针对对话式任务进行了优化,能够实现自然且富有表现力的合成语音。它支持多个说话者,便于生成互动式对话。
AGPL-3.0
Python
37,940
4106
211
2024-05-28
2025-07-06

增长趋势 - stars