Part.I Introduction

ChatTTS (Chat Text To Speech) 是专门为对话场景设计的文本转语音模型,例如LLM助手对话任务。它支持英文和中文两种语言。最大的模型使用了10万小时以上的中英文数据进行训练。在 HuggingFace 中开源的版本为4万小时训练且未SFT的版本。

在这里插入图片描述
开发 ChatTTS 的团队称:突破开源天花板!ChatTTS 有如下特点:

在这里插入图片描述
ChatTTS 文本转语音示例如下

B 站_ChatTTS 示例

Part.II 一键安装部署

Chap.I 下载

建议使用『ChatTTS 一键本地安装!目前最简单高效的部署方案【文本转语音】』进行安装部署,使用的是 123 云盘,近 3G 压缩包分分钟下完。

在这里插入图片描述
1、下载好后解压,得到如下文件,双击app.exe,会自动进行环境配置。

在这里插入图片描述
2、环境配置好后会在浏览器中弹出来使用接口(http://127.0.0.1:9966/)。
在这里插入图片描述

Chap.II 使用

参数的含义如下:

  • text:指的是需要转换成语音的文字内容。
  • Refine text:选择是否自动对输入的文本进行优化处理。
  • 随机度:一个控制输出随机性的参数,数值越大,生成的语音随机性越高,这可能导致生成的语音质量有时更好,有时更差。
  • 音色选择:默认值为2222,这是一个数字参数,用于选择声音的类型。可选的数字有2222、7869、6653、4099、5099,可以任选其一,或者输入其他数字以随机选择声音。
  • 定制声音:这是一个正整数参数,用于定制声音的音调和音色。如果设置了此值,将优先使用,而忽略声音选择参数。
  • 提示设置(Prompt):用于添加笑声、停顿等效果。例如,可以设置为[oral_2][laugh_0][break_6]

在这里插入图片描述
合成好之后即可下载

Chap.III 存在的问题

这种方法虽然简单,但是看不到程序内部运行的逻辑,也没有办法更改程序本身的代码,出现问题也没有行之有效的解决方案。笔者在尝试的时候就遇到了一些问题,如下:

1、无法识别[lauge]等提示词
2、前面几秒声音乱入。

Part.III 手动部署

https://github.com/2noise/ChatTTS/tree/main/docs/cn

克隆仓库

git clone https://github.com/2noise/ChatTTS
cd ChatTTS

安装依赖

pip install --upgrade -r requirements.txt

Chap.I 快速使用

建议先执行一遍

python examples/cmd/run.py "Your text 1."

快速使用:命令行交互(生成的音频将保存至 ./output_audio_n.mp3)

python examples/cmd/run.py "Your text 1." "Your text 2."

快速使用:WebUI 可视化界面

python examples/web/webui.py

在这里插入图片描述

PS:建议文字数目不要超过150个。长文本后面就是在瞎说。

Chap.II 开发教程

安装ChatTTS的Python 包,方法有如下三种

1、从 PyPI 安装稳定版

pip install ChatTTS

2、从 GitHub 安装最新版

pip install git+https://github.com/2noise/ChatTTS

3、从本地文件夹安装开发版

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)

Reference

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐