[!Note]
本仓库包含算法基础设施和一些简单示例。[!Tip]
关于面向终端用户的扩展产品,请参考社区维护的索引仓库 Awesome-ChatTTS。
你可以在此处查看代码库的图解可视化:链接。
ChatTTS 是一个专为对话场景(如 LLM 助手)设计的文本转语音模型。
详细描述可参考 Bilibili 上的这个视频。
[!Important]
发布的模型仅供学术研究使用。
2noise 组织下创建新仓库)代码基于 AGPLv3+ 许可证发布。
模型基于 CC BY-NC 4.0 许可证发布。它仅供教育和研究使用,不得用于任何商业或非法目的。作者不保证信息的准确性、完整性或可靠性。本仓库中使用的信息和数据仅供学术和研究目的。数据来源于公开可用的渠道,作者不对数据主张任何所有权或版权。
ChatTTS 是一个强大的文本转语音系统。然而,负责任且合乎道德地利用这项技术非常重要。为了限制 ChatTTS 的使用,我们在训练 4 万小时模型时添加了少量高频噪声,并尽可能使用 MP3 格式压缩音频质量,以防止恶意行为者可能将其用于犯罪目的。同时,我们内部训练了一个检测模型,并计划在未来将其开源。
欢迎随时提交 GitHub issues/PRs。
关于模型和路线图的正式咨询,请通过 open-source@2noise.com 联系我们。
点击此处加入。
git clone https://github.com/2noise/ChatTTS
cd ChatTTS
pip install --upgrade -r requirements.txt
conda create -n chattts python=3.11
conda activate chattts
pip install -r requirements.txt
pip install safetensors vllm==0.2.7 torchaudio
[!Warning]
请勿安装!
TransformerEngine 的适配目前正在开发中,尚无法正常运行。
仅出于开发目的安装。更多详情请参见 #672 #676。[!Note]
安装过程非常缓慢。
pip install git+https://github.com/NVIDIA/TransformerEngine.git@stable
[!Warning]
请勿安装!
根据此问题,当前 FlashAttention-2 会降低生成速度。
仅出于开发目的安装。[!Note]
支持的设备请参见 Hugging Face 文档。
pip install flash-attn --no-build-isolation
执行以下命令时,请确保位于项目根目录下。
python examples/web/webui.py
音频将保存为
./output_audio_n.mp3
python examples/cmd/run.py "你的文本 1。" "你的文本 2。"
pip install ChatTTS
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 = ["在此处输入您的第 1 段文本", "在此处输入您的第 2 段文本"]
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)
###################################
# 从高斯分布中采样一个说话人。
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, # top P 解码
top_K = 20, # top 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 = 'What is [uv_break]your favorite english food?[laugh][lbreak]'
wavs = chat.infer(text, skip_refine_text=True, params_refine_text=params_refine_text, params_infer_code=params_infer_code)
"""
在某些 torchaudio 版本中,第一行代码有效,而在其他版本中,第二行代码有效。
"""
try:
torchaudio.save("word_level_output.wav", torch.from_numpy(wavs[0]).unsqueeze(0), 24000)
except:
torchaudio.save("word_level_output.wav", torch.from_numpy(wavs[0]), 24000)
inputs_en = """
chat T T S is a text to speech model designed for dialogue applications.
[uv_break]it supports mixed language input [uv_break]and offers multi speaker
capabilities with precise control over prosodic elements like
[uv_break]laughter[uv_break][laugh], [uv_break]pauses, [uv_break]and intonation.
[uv_break]it delivers natural and expressive speech,[uv_break]so please
[uv_break] use the project responsibly at your own risk.[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)
| **男声** | **女声** |
| [男声](https://github.com/2noise/ChatTTS/assets/130631963/e0f51251-db7f-4d39-a0e9-3e095bb65de1) | [女声](https://github.com/2noise/ChatTTS/assets/130631963/f5dcdd01-1091-47c5-8241-c4f6aaaa8bbd) |
对于 30 秒的音频片段,至少需要 4GB 的 GPU 内存。对于 4090 GPU,它每秒可以生成大约 7 个语义标记对应的音频。实时因子(RTF)约为 0.3。
这是自回归模型(如 bark 和 valle)常见的问题。通常很难避免。可以尝试多次采样以找到合适的结果。
在当前发布的模型中,唯一的标记级别控制单元是 [laugh]、[uv_break] 和 [lbreak]。在未来的版本中,我们可能会开源具有额外情绪控制能力的模型。