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

Posted 长虹剑

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了语音合成 TTS 相关的一些总结相关的知识,希望对你有一定的参考价值。

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

参考资料

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

音频基础

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

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

基础

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

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

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

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

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

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

高级

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

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

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

拓展应用

虚拟人

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

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

phone 帧率对齐,可以防止出现累计误差:

以上是关于语音合成 TTS 相关的一些总结的主要内容,如果未能解决你的问题,请参考以下文章

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

使用PP-TTS实现语音合成

zhihutheirTTS1

语音合成模块 文本转TTS 真人发音 SYN6288

微信学习总结 15 百度语音合成

VC++基于微软语音引擎开发语音识别总结