语音合成 TTS 相关的一些总结

没专门学过也没做过就完全靠零散的概念记录吧

参考资料

TTS背后的技术原理——前端和后端系统

音频基础

uv: 表示清音还是浊音,清音的话几乎没基频
能量: mel 谱 第一维加和求平均
aac 编码: 它和直接PCM的音频编码后有一定的时间差,不过应该是因为FFT的时候补数据造成的。比如分帧不够的时候需要补上数据,一般应该在最后差一点。

声码器:
lcp/mgc 系数是基于信号学的, 应该需要基频进行辅助
现在一般直接恢复mel谱

基础

主要分为三部分:
前端模型、声学模型、声码器
其中声学模型可能还包括时长模型,不过得看具体的算法了。
除了以前的拼接式方法,现在主流的 TTS 有两类:

  • 基于 tacotron 这种没有对齐信息
  • 基于fast-speech ,需要有个时长预测模型
    上面主要是按照声学模型区分开。

声学模型:

主要是把语音层面的模型变到mel 特征或者类似的语音特征
这里其实是之前研究的重点,主要也是各种深度网络可以发挥作用的地方。

声码器:

把声学模型输出恢复到最终的采样点
有基于信号的,也有基于神经网路的。
一般为了快就是用lpcnet,深度学习上面就有很多, wavnet, mel-gan, paralle-wav-gan 这些

前端:

前端的内容也比较多,可以想象一下,输入是非常多样的,如何抽取必要的信息用于生成语音就是前端做的事情。
基本的前端输出就是音素序列,最好还得加入一些韵律边界(prosody) 因为需要让合成的语音有抑扬顿挫的感觉。

韵律词、韵律短语、语调短语、分词边界
前端还要解决多音字这些的问题。

对于英文一般目前使用G2P_en (grapheme to phoneme) 这个库就行。(一般写在 preprocess_english 这个函数里)
但是中文的话就需要分词模型,多音字模型,之类的。

高级

前端中最好能加入词级别的信息,这样生成的音色更好。或者针对特定语言加入一些其他的特征。
还有如果要达到对话的效果,比如”延音“和”有声停顿“,可以做这方面的预测然后加入到输入特征中。

声码器这里可以加入风格信息,帮助产生某种类型风格的语音。 如 GST 等。

VC 这个方向是希望尽可能分离原始语音的各种特征,把内容信息拿出来,然后再加入其它特征,获得与原始输入时间一样的输出。 一般都用KL,主要是希望尽可能丢掉音频相关信息保留文本信息。

拓展应用

虚拟人

TTS是文本预测mel 谱之类的声学系数,如果能预测唇形系数之类的就能做虚拟人人了。

当然上面那种做法需要的数据量比较大,一般不会这么做,往往是通过语音识别模型过一些无标注的干净的视频数据,获得文本和表情对齐的数据,然后训练一个音素到表情的模型P2E。而TTS主要是在测试的时候知道播报语音的时长就能使用P2E模型预测出表情系数的。至于如何获得,如果使用tacotron模型的话,建模粒度小一些,获得音频frame与phone的 attention 信息后做一个维特比解码就行。
类似这样
在这里插入图片描述

phone 帧率对齐,可以防止出现累计误差:
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值