ChatTTS:新手入门指南与详细使用教程
项目背景
一个名为 ChatTTS 文本转语音项目爆火出圈,引来大家极大的关注。短短三天时间,在 GitHub 上已经斩获了 9.2 k 的 Star 量。
ChatTTS是专门为对话场景设计的文本转语音模型,例如LLM助手对话任务。它支持英文和中文两种语言。最大的模型使用了10万小时以上的中英文数据进行训练。
在现阶段来说,可以说是TTS领域天花板级的存在了,既可以生成语音,还能够控制笑声,停顿等,同时还能支持多人说话。比起其他开源模型,可以说得上是秒杀级别的存在。
特点是:
-
对话式 TTS: ChatTTS针对对话式任务进行了优化,实现了自然流畅的语音合成,同时支持多说话人。
-
细粒度控制: 该模型能够预测和控制细粒度的韵律特征,包括笑声、停顿和插入词等。
-
更好的韵律: ChatTTS在韵律方面超越了大部分开源TTS模型。同时提供预训练模型,支持进一步的研究。
官方github地址:github.com/2noise/Chat…
在线体验地址:chattts.com/
本文档介绍该工具如何使用,相信跟着操作,你也可以生成自己的语音。
如何安装
- 拉取官方代码到本地
git clone git@github.com:2noise/ChatTTS.git
- 安装conda环境
conda create --name chat-tts python=3.11
conda activate chat-tts
- 安装依赖
cd 2noise/ChatTTS
pip install -r requirements.txt
- 下载ChatTTS模型库
import ChatTTS
from IPython.display import Audio
chat = ChatTTS.Chat()
chat.load_models()
执行以上代码,会从hugginface拉取所需要的模型库到本地
huggingface模型地址:
或者到huggingface上手动拉取到本地
基本用法
运行一个基本样例
可以参考代码中提供的example.ipynb文件
这里在jupyter环境中运行代码
完整代码
import torch
torch._dynamo.config.cache_size_limit = 64
torch._dynamo.config.suppress_errors = True
torch.set_float32_matmul_precision('high')
import ChatTTS
from IPython.display import Audio
chat = ChatTTS.Chat()
chat.load_models()
texts = ["So we found being competitive and collaborative was a huge way of staying motivated towards our goals, so one person to call when you fall off, one person who gets you back on then one person to actually do the activity with.",]*3 \
+ ["我觉得像我们这些写程序的人,多多少少可能会对开源有一种情怀在吧我觉得开源是一个很好的形式。现在其实最先进的技术掌握在一些公司的手里的话,就他们并不会轻易的开放给所有的人用。"]*3
wavs = chat.infer(texts)
Audio(wavs[3], rate=24_000, autoplay=True)
高阶用法
定制化参数
可以设置语速,输出的随机程度
以及细粒度的韵律特征,包括笑声、停顿和插入词等
代码如下
params_infer_code = {'prompt':'[speed_5]', 'temperature':.3}
params_refine_text = {'prompt':'[oral_2][laugh_0][break_6]'}
wav = chat.infer('四川美食可多了,有麻辣火锅、宫保鸡丁、麻婆豆腐、担担面、回锅肉、夫妻肺片等,每样都让人垂涎三尺。', \
params_refine_text=params_refine_text, params_infer_code=params_infer_code)
Audio(wav[0], rate=24_000, autoplay=True)
固定音色
记录随机生成的音色,将音色作为参数传递给模型使用,这里用rand_spk存储
代码
rand_spk = chat.sample_random_speaker()
params_infer_code = {'spk_emb' : rand_spk, }
wav = chat.infer('四川美食确实以辣闻名,但也有不辣的选择。比如甜水面、赖汤圆、蛋烘糕、叶儿粑等,这些小吃口味温和,甜而不腻,也很受欢迎。', \
params_refine_text=params_refine_text, params_infer_code=params_infer_code)
Audio(wav[0], rate=24_000, autoplay=True)
综合使用
设置音色、随机度等参数以及细粒度的韵律特征,包括笑声、停顿和插入词等共同控制生成语音
代码
import torch
torch._dynamo.config.cache_size_limit = 64
torch._dynamo.config.suppress_errors = True
torch.set_float32_matmul_precision('high')
import ChatTTS
from IPython.display import Audio
chat = ChatTTS.Chat()
chat.load_models()
import torch
std, mean = torch.load('ChatTTS/asset/spk_stat.pt').chunk(2)
rand_spk = torch.randn(768) * std + mean
params_infer_code = {
'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
}
inputs_cn = """
chat T T S 是一款强大的对话式文本转语音模型。它有中英混读和多说话人的能力。
chat T T S 不仅能够生成自然流畅的语音,还能控制[laugh]笑声啊[laugh],
停顿啊[uv_break]语气词啊等副语言现象[uv_break]。这个韵律超越了许多开源模型[uv_break]。
请注意,chat T T S 的使用应遵守法律和伦理准则,避免滥用的安全风险。[uv_break]'
""".replace('\n', '')
params_refine_text = {
'prompt': '[oral_2][laugh_0][break_4]'
}
audio_array_cn = chat.infer(inputs_cn, params_refine_text=params_refine_text)
问题
- 在生成语音的过程中会出现CUDNN_STATUS_NOT_SUPPORTED问题
解决办法:
cuDNN不支持的类型,禁用cuDNN
torch.backends.cudnn.enabled = False
- 无法下载huggingface模型库
可以使用haggingface-download-accelerator库下载
用法
python hf_download.py --model 2Noise/ChatTTS
即可下载模型到本地,下载成功后再chat.load_models()
转载自:https://juejin.cn/post/7375004154881638415