一款适用于日常对话的生成式语音模型。
NOTE
注意此版本可能不是最新版,所有内容请以英文版为准。
部署使用视频
NOTE
这个仓库包含算法架构和一些简单的示例。
TIP
由本仓库衍生出的用户端产品,请参见由社区维护的索引仓库 Awesome-ChatTTS。
ChatTTS 是一款专门为对话场景(例如 LLM 助手)设计的文本转语音模型。
你可以参考 Bilibili 上的这个视频,了解本项目的详细情况。
IMPORTANT
此仓库仅供学术用途。
本项目旨在用于教育和研究目的,不适用于任何商业或法律目的。作者不保证信息的准确性、完整性和可靠性。此仓库中使用的信息和数据仅供学术和研究目的。数据来自公开来源,作者不声称对数据拥有任何所有权或版权。
ChatTTS 是一款强大的文本转语音系统。但是,负责任和道德地使用这项技术非常重要。为了限制 ChatTTS 的使用,我们在 40,000 小时模型的训练过程中添加了少量高频噪声,并使用 MP3 格式尽可能压缩音频质量,以防止恶意行为者将其用于犯罪目的。同时,我们内部训练了一个检测模型,并计划在未来开源它。
欢迎随时提交 GitHub issues/PRs。
如需就模型和路线图进行合作洽谈,请发送邮件至 open-source@2noise.com。
点击加入 Discord。
git clone https://github.com/2noise/ChatTTS
cd ChatTTS
pip install --upgrade -r requirements.txt
conda create -n chattts
conda activate chattts
pip install -r requirements.txt
NOTE
安装过程可能耗时很长。
WARNING
TransformerEngine 的适配目前正在开发中,运行时可能会遇到较多问题。仅推荐出于开发目的安装。
pip install git+https://github.com/NVIDIA/TransformerEngine.git@stable
NOTE
支持设备列表详见 Hugging Face Doc.
pip install flash-attn --no-build-isolation
确保在执行以下命令时,处于项目根目录下。
python examples/web/webui.py --server_port 3389
生成的音频将保存至
./output_audio_n.mp3
python examples/cmd/run.py Your text 1. Your text 2.
fastapi dev examples/api/main.py --host 0.0.0.0 --port 3389
python examples/api/client.py
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) # Set to True for better performance
texts = [PUT YOUR 1st TEXT HERE, PUT YOUR 2nd TEXT HERE]
wavs = chat.infer(texts)
torchaudio.save(output1.wav, torch.from_numpy(wavs[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(output2.wav, torch.from_numpy(wavs[0]), 24000)
inputs_en =
chatTTS 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(output3.wav, torch.from_numpy(audio_array_en[0]), 24000)
男性音色 |
女性音色 |
对于 30 秒的音频片段,至少需要 4GB 的 GPU 内存。 对于 4090 GPU,它可以每秒生成大约 7 个语义 token 对应的音频。实时因子 (RTF) 约为 0.3。
这是一个通常发生在自回归模型(例如 bark 和 valle)中的问题,通常很难避免。可以尝试多个样本以找到合适的结果。
在当前发布的模型中,可用的 token 级控制单元是 [laugh]
, [uv_break]
和 [lbreak]
。未来的版本中,我们可能会开源具有更多情绪控制功能的模型。