用于日常对话的生成语音模型。
[!注意]
此代码库包含算法基础架构和一些简单示例。
[!提示]
有关扩展的最终用户产品,请参阅由社区维护的索引代码库 Awesome-ChatTTS。
ChatTTS 是一个专为 LLM 助手等对话场景设计的文本转语音模型。
您可以参考**Bilibili 上的此视频**获取详细说明。
[!重要]
发布的模型仅供学术用途。
2noise
org 中提交新的代码库)代码采用 AGPLv3+
许可证发布。
模型采用 CC BY-NC 4.0
许可证发布。本模型旨在用于教育和研究,不得用于任何商业或非法用途。作者不保证信息的准确性、完整性或可靠性。本代码库中使用的信息和数据仅供学术和研究之用。数据来自公开来源,作者不主张对数据的任何所有权或版权。
ChatTTS 是一个强大的文本转语音系统。然而,负责任地、合乎道德地使用这项技术至关重要。为了限制 ChatTTS 的使用,我们在训练这个 40,000 小时模型时添加了少量高频噪声,并使用 MP3 格式尽可能地压缩音频质量,以防止恶意行为者将其用于犯罪目的。与此同时,我们已经内部训练了一个检测模型,并计划在未来将其开源。
欢迎随时在 GitHub 上提交问题/PR。
如需正式咨询模型和路线图,请通过 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
[!警告]
请勿安装!
TransformerEngine 的适配版本目前正在开发中,目前无法正常运行。
仅用于开发目的。更多详情请参阅 #672 #676
[!注意]
安装过程非常缓慢。
pip install git+https://github.com/NVIDIA/TransformerEngine.git@stable
[!警告]
请勿安装!
目前,根据此问题,FlashAttention-2 会降低生成速度。
仅用于开发目的。
[!注意]
请参阅 Hugging Face 文档 查看支持的设备。
pip install flash-attn --no-build-isolation
执行以下命令时,请确保您位于项目根目录下。
python examples/web/webui.py
它会将音频保存到
./output_audio_n.mp3
python examples/cmd/run.py "Your text 1." "Your text 2."
pip install ChatTTS
pip install git+https://github.com/2noise/ChatTTS
pip install -e .
导入 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)
#####################################
# 从高斯模型中采样说话人。
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)
<详情打开>
<摘要>
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)
男声 |
女声 |