赞
踩
没专门学过也没做过就完全靠零散的概念记录吧
uv: 表示清音还是浊音,清音的话几乎没基频
能量: mel 谱 第一维加和求平均
aac 编码: 它和直接PCM的音频编码后有一定的时间差,不过应该是因为FFT的时候补数据造成的。比如分帧不够的时候需要补上数据,一般应该在最后差一点。
声码器:
lcp/mgc 系数是基于信号学的, 应该需要基频进行辅助
现在一般直接恢复mel谱
主要分为三部分:
前端模型、声学模型、声码器
其中声学模型可能还包括时长模型,不过得看具体的算法了。
除了以前的拼接式方法,现在主流的 TTS 有两类:
主要是把语音层面的模型变到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 帧率对齐,可以防止出现累计误差:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。