简介
[!注意] 该仓库包含算法基础结构和一些简单示例。
[!提示] 有关扩展终端用户产品,请参阅社区维护的索引仓库 Awesome-ChatTTS。
ChatTTS 是一个专门为对话场景设计的文本到语音模型,例如 LLM 助手。
支持的语言
- 英语
- 中文
- 敬请期待...
亮点
你可以参考 Bilibili 上的这个视频 了解详细描述。
- 对话型 TTS:ChatTTS 优化用于基于对话的任务,实现自然且富有表现力的语音合成。它支持多位说话者,促进互动对话。
- 精细控制:该模型可以预测并控制精细的韵律特征,包括笑声、停顿和插话。
- 更好的韵律:ChatTTS 在韵律方面超越了大多数开源 TTS 模型。我们提供预训练模型以支持进一步的研究和开发。
数据集与模型
[!重要] 发布的模型仅供学术研究使用。
- 主模型使用超过 10 万小时的中英文音频数据进行训练。
- 在 HuggingFace 上开源的版本是一个 40,000 小时的预训练模型,不含 SFT。
路线图
- 开源 40k 小时基础模型和 spk_stats 文件。
- 流式音频生成。
- 开源 DVAE 编码器和零样本推理代码。
- 多情感控制。
- ChatTTS.cpp(欢迎在
2noise
组织中创建新仓库)
许可证
代码
代码已在 AGPLv3+
许可证下发布。
模型
模型已在 CC BY-NC 4.0
许可证下发布。仅供教育和研究使用,不得用于任何商业或非法用途。作者不保证信息的准确性、完整性或可靠性。本仓库中使用的信息和数据仅供学术和研究用途。这些数据来自公开可用的资源,作者不主张对数据拥有任何所有权或版权。
免责声明
ChatTTS 是一个强大的文本到语音系统。然而,负责任且道德地使用这项技术非常重要。为了限制 ChatTTS 的使用,我们在 40,000 小时模型的训练中加入了一小部分高频噪声,并尽可能地使用 MP3 格式压缩音频质量,以防止恶意用户潜在地将其用于犯罪目的。同时,我们内部训练了一个检测模型,并计划在未来开源。
联系方式
欢迎通过 GitHub 提交 issue 或 PR。
正式咨询
如需关于模型和路线图的正式咨询,请通过 open-source@2noise.com 联系我们。
在线聊天
1. QQ 群(中国社交 APP)
- 群 1,808364215
- 群 2,230696694
- 群 3,933639842
- 群 4,608667975
2. Discord 服务器
点击 这里 加入。
快速入门
克隆仓库
git clone https://github.com/2noise/ChatTTS
cd ChatTTS
安装依赖
1. 直接安装
pip install --upgrade -r requirements.txt
2. 从 conda 安装
conda create -n chattts
conda activate chattts
pip install -r requirements.txt
可选:如果使用 NVIDIA GPU(仅限 Linux),安装 TransformerEngine
[!注意] 安装过程非常缓慢。
[!警告] TransformerEngine 的适配目前正在开发中,现阶段无法正常运行。 仅适用于开发目的安装。
pip install git+https://github.com/NVIDIA/TransformerEngine.git@stable
可选:安装 FlashAttention-2(主要是 NVIDIA GPU)
[!注意] 查看 Hugging Face 文档 中的支持设备列表。
[!警告] 根据 此问题,当前的 FlashAttention-2 将降低生成速度。 仅适用于开发目的安装。
pip install flash-attn --no-build-isolation
快速开始
确保在执行以下命令时处于项目根目录。
1. 启动 WebUI
python examples/web/webui.py
2. 使用命令行推理
它将音频保存到
./output_audio_n.mp3
python examples/cmd/run.py "你的文本1" "你的文本2"
安装
- 从 PyPI 安装稳定版本
pip install ChatTTS
- 从 GitHub 安装最新版本
pip install git+https://github.com/2noise/ChatTTS
- 从本地目录以开发模式安装
pip install -e .
基本用法
import ChatTTS
import torch
import torchaudio
chat = ChatTTS.Chat()
chat.load(compile=False) # 设置为 True 以提高性能
texts = ["在此输入你的第一个文本", "在此输入你的第二个文本"]
wavs = chat.infer(texts)
for i in range(len(wavs)):
torchaudio.save(f"basic_output{i}.wav", torch.from_numpy(wavs[i]).unsqueeze(0), 24000)
高级用法
###################################
# 从高斯采样器中采样一个说话者。
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,