AI语音:ChatTTS 真有点东西啊!

今天要介绍一个最近刚出的语音合成项目,效果非常惊艳

发布三天已经有9K的Star了,听过的都说好。

 

演示视频

 

这效果怎么样?逼真吗?

这个项目的名字叫ChatTTS,一个充满情感的语音合成项目!

简介

ChatTTS是一款专为对话场景设计的语音生成模型,适用于AI助手对话、对话语音和视频介绍,支持中英文。

它优化了对话任务,实现自然流畅的多说话人语音合成,并能控制细粒度的韵律特征,如笑声、停顿和插入词。

ChatTTS在韵律方面表现卓越,提供预训练模型,支持进一步研究。

亮点

  • 对话式TTS: ChatTTS针对对话式任务进行了优化,实现了自然流畅的语音合成,同时支持多说话人。
  • 细粒度控制:该模型能够预测和控制细粒度的韵律特征,包括笑声、停顿和插入词等。
  • 更好的韵律:ChatTTS在韵律方面超越了大部分开源TTS模型。同时提供预训练模型,支持进一步的研究。

这些亮点,在同类型开源项目中却是非常突出。

用法

项目主页提供了一些代码实例,便于快速体验。运行下面代码前记得克隆项目,安装req文件里面的依赖。

基本用法

#导入库:import ChatTTS和from IPython. display import Audio。
import ChatTTS
from IPython.display import Audio

#初始化ChatTTS:创建一个ChatTTS对象chat= ChatTTS. Chat()。
chat = ChatTTS.Chat()

#加载模型:使用chat. load_models()加载预训练模型。
chat.load_models()

#设置文本:定义要转换为语音的文本列表texts=["< PUT YOUR TEXT HERE>",]。
texts = ["<PUT YOUR TEXT HERE>",]

#生成语音:使用chat. infer( texts, use_decoder= True)将文本转换为语音波形数据。
wavs = chat.infer(texts, use_decoder=True)

#播放语音:通过Audio( wavs[0], rate=24_000, autoplay= True)播放生成的语音。
Audio(wavs[0], rate=24_000, autoplay=True)

 

基本用法总共7行代码,全是使用默认参数,非常简单。如果需要自定义一些参数,可以参考进阶代码。

 

进阶用法

 
###################################
# Sample a speaker from Gaussian.
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
}

###################################
# 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 = {
  'prompt': '[oral_2][laugh_0][break_6]'
} 

wav = chat.infer("<PUT YOUR TEXT HERE>", params_refine_text=params_refine_text, params_infer_code=params_infer_code)

###################################
# For word level manual control.
# use_decoder=False to infer faster with a bit worse quality
text = 'What is [uv_break]your favorite english food?[laugh][lbreak]'
wav = chat.infer(text, skip_refine_text=True, params_infer_code=params_infer_code, use_decoder=False)

进阶代码主要加载了一个pt文件,然后构建了params_refine_text和params_infer_code这两个参数。
通过参数设置,可以更加精准的控制生成效果。

 

计划路线

  •  开源4w小时基础模型和spk_stats文件
  •  开源VQ encoder和Lora训练代码
  •  在非refine text情况下,流式生成音频*
  •  开源多情感可控的4w小时版本
  •  ChatTTS.cpp maybe? (欢迎社区PR或独立的新repo)

从介绍中可以看到,已经开源了4万小时的基础模型和spk_stats文件。

接下来还有开源编码器和微调代码,包括流式生成,多情感可控版本,设置可能会有更高效的C代码版本。

可以期待一下啊。

 

常见问题

以下是官方总结的一些常见问题,可以参考一下。

连不上HuggingFace

请使用modelscope的版本。并设置cache的位置

我要存多少钱?Infer的速度是怎么样的?

对于30s的音频,至少需要4G的显存。对于4090D,1s生成约7个字所对应的音频。RTF约0.65。

模型稳定性似乎不够好,会出现其他说话人或音质很差的现象。

这是自回归模型通常都会出现的问题。说话人可能会在中间变化,可能会采样到音质非常差的结果,这通常难以避免。可以多采样几次来找到合适的结果。

除了笑声还能控制什么吗?还能控制其他情感吗?

现在放出的模型版本中,只有[ laugh]和[ uv_break],[ lbreak]作为字级别的控制单元。在未来的版本中我们可能会开源其他情感控制的版本。

 

相关资源

整理了一些扩展内容。包括官方完整的演示视频,在线体验地址,和Colab笔记本。

官方演示视频:

在线体验地址:

https://huggingface.co/spaces/Dzkaka/ChatTTS

Colab笔记本:

https://github.com/dream80/TonyColab

最后强调一下,这个项目真不错!值得研究一下!

 

小尾巴==========================
公众号:托尼不是塔克
交流群
知识星球
==============================