简介:ChatTTS是目前最火的语音生成模型,在语音合成中表现出超高质量和流畅度。在上一期简单介绍了ChatTTS的本地部署方法和webui使用。这次将更深入地探讨如何利用ChatTTS实现更高级的文本到语音(TTS)转换功能,帮助你更好地掌握ChatTTS。
目录
ChatTTS进阶使用教程
1.conda创建环境
conda create -n tuling python==3.10
conda install pytorch==2.2.2 torchvision==0.17.2 torchaudio==2.2.2 pytorch-cuda=11.8 -c pytorch -c nvidia
2.下载ChatTTS源码
conda activate tuling
git clone https://github.com/2noise/ChatTTS.git
cd ChatTTS
pip install -r requirements.txt
3.下载模型文件
pip install modelscope
输入python进入python环境
依次输入两行代码:
from modelscope import snapshot_download
model_dir = snapshot_download('pzc163/chatTTS',local_dir="./chatTTS")
下载好之后输入quit()退出python环境
4.简单调用
新建一个demo1.py,其中的代码如下所示:
import ChatTTS
import scipy
chat = ChatTTS.Chat()
chat.load('custom', custom_path='./chatTTS', compile=False)
texts = ["我是i鹰斯坦,爱吃红烧肉,"]#可通过加,的方式缓解结尾突兀的问题
wavs = chat.infer(texts)
scipy.io.wavfile.write(filename = "output.wav", rate = 24_000, data = wavs[0].T)
运行效果:
在demo的同一级目录下,已经生成了语音的output.wav文件。
5.音色库
源码里的抽卡音色真的看运气,很难抽到自己满意的音色,可以前往音色库ChatTTS稳定音色 (modelscope.cn)进行试听,然后将自己满意的音色保存到本地,然后读取音色模型文件。网站音色部分如下,通过点击不同的seed_id,再试听下方生成的音频,如果觉得满意就点击表格下方的下载,将音色模型下载到本地。
参数解释
- rank_long: 长句文本的音色稳定性评分。
- rank_multi: 多句文本的音色稳定性评分。
- rank_single: 单句文本的音色稳定性评分。
- score: 音色性别、年龄、特征的可能性,越高越准确。
- gender age feature: 音色的性别、年龄、特征。
参数仅供参考,建议还是通过试听选择,然后将音色模型保存到ChatTTS目录下。
6.进阶调用
新建一个demo2.py,其中的代码如下所示:
import ChatTTS
import scipy
import torch
chat = ChatTTS.Chat()
chat.load('custom', custom_path='./chatTTS', compile=False)
# 随机生成音色,俗称抽奖,抽的我心碎了
# rand_spk = chat.sample_random_speaker()
# 读取保存的音色模型
spk = chat._encode_spk_emb(torch.load('./seed_2155_restored_emb.pt'))
params_infer_code = ChatTTS.Chat.InferCodeParams(
spk_emb = spk, # add sampled speaker
temperature = .3, # using custom temperature
top_P = 0.7, # top P decode
top_K = 20, # top K decode
)
text = '最初的鸟儿是不会飞翔的,飞翔是他们勇敢跃入峡谷的奖励,重要的是勇气,是它让你们成为世上最初的飞鸟。'
###################################
text1 = chat.infer(text, refine_text_only=True)
# refine_text_only=True:自动添加语气词
# [oral_0]:连接词,嗯呐,哦,就是之类的词
# [laugh_0]:笑声
# [break_0]:停顿
print(text1)
wavs = chat.infer(text1, params_infer_code=params_infer_code)
scipy.io.wavfile.write(filename = "output.wav", rate = 24_000, data = wavs[0].T)
这里在推理的使用了refine_text_only=True参数,能为我们输入的文本自动添加语气词和停顿以及笑声, 运行效果如下。可以看出原本的文本中间加入了很多[uv_break]的部分,使得语气更加真实。
所用源码已上传: ChatTTS源码进阶调用资源