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
最后强调一下,这个项目真不错!值得研究一下!