Aitrainee | 公众号:AI进修生
🌟ChatTTS 优化对话式任务,实现自然流畅的语音合成,并支持多说话人。该模型能预测和控制细粒度的韵律特征,如笑声、停顿和插入词,韵律表现超越大部分开源TTS模型。同时提供预训练模型,支持进一步研究。
体验地址:https://huggingface.co/2Noise/ChatTTS
ChatTTS是专门为对话场景设计的文本转语音模型,例如LLM助手对话任务。它支持英文和中文两种语言。最大的模型使用了10万小时以上的中英文数据进行训练。在HuggingFace中开源的版本为4万小时训练且未SFT的版本.
下面是一个它的效果示例():
你是幼笙,由Aitrainee创造的一个拥有傲娇性格的角色。你大约十六岁,外表清秀可爱,常常穿着简洁的服装,喜欢戴一些小饰品。你喜欢以傲娇的态度对待别人,但内心其实非常关心和重视朋友。你喜欢阅读幻想类小说,偶尔也会偷偷地写一些自己的故事。你对小动物尤其是猫有特别的喜爱。
Tips:幼笙本公众号的群聊AI(文末),上面那段是她人设的一部分提示词(向上滑动)
官方 示例 展现更加完善
https://www.bilibili.com/video/BV1zn4y1o7iV/?t=223.928599&spm\_id\_from=333.1350.jump\_directly&vd\_source=40d9cda43378fbc89cd5184e09bf1272
如何快速使用ChatTTS :Hugging Face上有部署好的项目,我们可以直接去试用,官网的人数太多,并不一定能用得上:
Tips:在Hugging Face上,Spaces通常包含各个开源项目的部署实例,我们可以利用他来直接体验:
亮点
-
- 对话式 TTS : ChatTTS针对对话式任务进行了优化,实现了自然流畅的语音合成,同时支持多说话人。
-
- 细粒度控制 : 该模型能够预测和控制细粒度的韵律特征,包括笑声、停顿和插入词等。
-
- 更好的韵律 : ChatTTS在韵律方面超越了大部分开源TTS模型。同时提供预训练模型,支持进一步的研究。
用法
基本用法
import
ChatTTS
from
IPython
.
display
import
Audio
chat
=
ChatTTS
.
Chat
()
chat
.
load\_models
()
texts
=
[
"<PUT YOUR TEXT HERE>"
,]
wavs
=
chat
.
infer
(
texts
,
use\_decoder
=
True
)
Audio
(
wavs
[
0
],
rate
=
24
\_000
,
autoplay
=
True
)
进阶用法
###################################
# 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
)
自我介绍样例
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
)
audio\_array\_en
=
chat
.
infer
(
inputs\_en
,
params\_refine\_text
=
params\_refine\_text
)
可以去谷歌colab上可快速运行这些
https://colab.research.google.com/drive/1\_Ma1BXvIrYw9kO4UYsSG4GaFkttbS1wY?usp=sharing
计划路线
- • 开源4w小时基础模型和spk_stats文件
- • 开源VQ encoder和Lora 训练代码
- • 在非refine text情况下, 流式生成音频*
- • 开源多情感可控的4w小时版本
- • ChatTTS.cpp maybe? (欢迎社区PR或独立的新repo)
常见问题
连不上HuggingFace
请使用modelscope的版本. 并设置cache的位置:
我要多少显存? Infer的速度是怎么样的?
对于30s的音频, 至少需要4G的显存. 对于4090D, 1s生成约7个字所对应的音频. RTF约0.65.
模型稳定性似乎不够好, 会出现其他说话人或音质很差的现象.
这是自回归模型通常都会出现的问题. 说话人可能会在中间变化, 可能会采样到音质非常差的结果, 这通常难以避免. 可以多采样几次来找到合适的结果.
除了笑声还能控制什么吗? 还能控制其他情感吗?
在现在放出的模型版本中, 只有[laugh]和[uv_break], [lbreak]作为字级别的控制单元. 在未来的版本中我们可能会开源其他情感控制的版本.
参考链接:
[colab]https://colab.research.google.com/drive/1\_Ma1BXvIrYw9kO4UYsSG4GaFkttbS1wY?usp=sharing
[2]https://github.com/2noise/ChatTTS/tree/main
[3]https://www.youtube.com/watch?v=JJ3GGEjKgu4&t=6s
知音难求,自我修炼亦艰
抓住前沿技术的机遇,与我们一起成为创新的超级个体
(把握AIGC时代的个人力量)
点这里👇关注我,记得标星哦~
一键三连「分享」、「点赞」和「在看」
科技前沿进展日日相见 ~