ChatTTS是专为对话场景设计的语音生成模型,特别适用于大型语言模型(LLM)助手的对话任务,以及诸如对话式音频和视频介绍等应用。它支持中文和英文,通过使用大约100,000小时的中文和英文数据进行训练,ChatTTS在语音合成中表现出高质量和自然度。
主要功能
-
多语言支持 ChatTTS 的一个关键特性是支持多种语言,包括英语和中文。这使其能够为广泛用户群提供服务,并克服语言障碍
-
大规模数据训练 ChatTTS 使用了大量数据进行训练,大约有1000万小时的中文和英文数据。这样的大规模训练使其声音合成质量高,听起来自然
-
对话任务兼容性 ChatTTS 很适合处理通常分配给大型语言模型LLMs的对话任务。它可以为对话生成响应,并在集成到各种应用和服务时提供更自然流畅的互动体验
-
开源计划 项目团队计划开源一个经过训练的基础模型。这将使学术研究人员和社区开发人员能够进一步研究和发展这项技术
-
控制和安全性 团队致力于提高模型的可控性,添加水印,并将其与LLMs集成。这些努力确保了模型的安全性和可靠性
-
易用性 ChatTTS 为用户提供了易于使用的体验。它只需要文本信息作为输入,就可以生成相应的语音文件。这样的简单性使其方便有语音合成需求的用户
开始使用
克隆代码仓
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安装TransformerEngine(仅Linux)
[!提示] 安装过程非常慢.
[!注意] 该TransformerEngine适配为开发状态,可能无法正常工作. 仅作为开发目标安装.
pip install git+https://github.com/NVIDIA/TransformerEngine.git@stable
可选: 安装FlashAttention-2 (主流NVIDIA GPU)
[!提示] 设备支持清单参考 Hugging Face Doc.
[!注意] 当前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 "Your text 1." "Your text 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) # Set to True for better performance
texts = ["PUT YOUR 1st TEXT HERE", "PUT YOUR 2nd TEXT HERE"]
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)
进阶使用
###################################
# Sample a speaker from Gaussian.
rand_spk = chat.sample_random_speaker()
print(rand_spk) # save it for later timbre recovery
params_infer_code = ChatTTS.Chat.InferCodeParams(
spk_emb = rand_spk, # add sampled speaker
temperature = .3, # using custom temperature
top_P = 0.7, # top P decode
top_K = 20, # top K decode
)
###################################
# For sentence level manual control.
# use oral_(0-9), laugh_(0-2), break_(0-7)
# to generate special token in text to synthesize.
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,
)
###################################
# For word level manual control.
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.save("word_level_output.wav", torch.from_numpy(wavs[0]).unsqueeze(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', '') # English is still experimental.
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