用于日常对话的生成语音模型。
English |简体中文|日本语| Русский | 俄罗斯西班牙语|法语| 한국어
笔记
该存储库包含算法基础结构和一些简单的示例。
提示
对于扩展的最终用户产品,请参阅社区维护的索引库 Awesome-ChatTTS。
ChatTTS是专门针对LLM助手等对话场景设计的文本转语音模型。
详细介绍可以参考B站的视频。
重要的
发布的模型仅用于学术目的。
2noise
组织中的新存储库)该代码在AGPLv3+
许可证下发布。
该模型在CC BY-NC 4.0
许可下发布。它仅供教育和研究用途,不得用于任何商业或非法目的。作者不保证信息的准确性、完整性或可靠性。本存储库中使用的信息和数据仅用于学术和研究目的。数据来自公开来源,作者不主张对数据的任何所有权或版权。
ChatTTS 是一个功能强大的文本转语音系统。然而,负责任且合乎道德地利用这项技术非常重要。为了限制ChatTTS的使用,我们在40,000小时的模型训练过程中添加了少量高频噪声,并尽可能使用MP3格式压缩音频质量,以防止恶意行为者可能利用它进行犯罪目的。同时,我们内部训练了一个检测模型,并计划未来开源。
GitHub 问题/PR 始终受到欢迎。
有关模型和路线图的正式咨询,请通过[email protected]联系我们。
点击此处加入。
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 .
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 )):
"""
In some versions of torchaudio, the first line works but in other versions, so does the second line.
"""
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 )
###################################
# 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 )
"""
In some versions of torchaudio, the first line works but in other versions, so does the second line.
"""
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 ' , '' ) # 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 )
男性演讲者 | 女演讲者 |
介绍_en_m.webm | 介绍_en_f.webm |
对于 30 秒的音频剪辑,至少需要 4GB GPU 内存。对于 4090 GPU,它每秒可以生成对应于大约 7 个语义标记的音频。实时系数 (RTF) 约为 0.3。
这是自回归模型(对于树皮和山谷)通常会出现的问题。一般情况下很难避免。人们可以尝试多个样品来找到合适的结果。
在当前发布的模型中,唯一的令牌级控制单元是[laugh]
、 [uv_break]
和[lbreak]
。在未来的版本中,我们可能会开源具有额外情绪控制功能的模型。