1.语音合成的简介

传统的语音合成一般有两种做法。一种是基于波形拼接的,一种是基于参数合成的。

所谓波形拼接就是准备大量的不同情感不同语境的语音数据,在拼接的时候选取最适合的单元。单元拼接的算法的好处在于音质较高,声音还原度高。单元挑选的缺点在于需要大量的数据,合成不够灵活,没有办法做一些情绪变化。当无法挑选到满意单元的时候,会使得衔接及其不自然。而且模型较大,没有办法离线。

基于参数的语音合成指的是,构造上下文文本特征作为输入,再通过特征抽取获得语音数据的声学特征作为输出。用hmm或者dnn等算法学习输入到输出的映射关系。有了这个映射关系之后,对于任意输入文本,提取其文本特征后,就可以得到声学特征。再将声学特征输入到声码器,从而合成语音。基于参数的语音合成的好处在于模型较小,需要的数据量较少,而且可以很容易的对参数进行微调,从而得到不同的合成效果。缺点在于,声音是通过声码器得到的,音质会有所损失,情绪比较不饱满,对于一些声色较特殊的语音,设置没有办法还原。

2.UTAU是什么

UTAU是一款由饴屋/菖蒲(あめや・あやめ)氏开发的免费的歌声合成软件,2010年1月份(v0.2.60版之后)改为共享软件。UTAU的正式名称为“歌声合成工具UTAU”,采用的是波形拼接的模式。

x

x

3.UTAU的前身:人力 VOCALOID

人力VOCALOID指将现有人物或者角色的人声音频素材进行人工剪贴,利用调音软件实现像VOCALOID中一样唱歌的效果,这种艺术形式就叫做人力VOCALOID。与音MAD不同,人力VOCALOID往往注重于歌词的再现与歌唱。

制作人力 VOCALOID 步骤有:1.获取原始音频 2.按照音节切分 3.连接歌词 4. 编辑音高/长度 5.合成

(一般在制作的时候,采用Melodyne进行变换)

4.UTAU的运行过程

1.录音

将日语(中文发音的列表整理出来,进行录音。下图为日语发音的必要音节。

x

2.音频导入编辑器,导入音高,长度(midi)文件

x

3.对midi进行细致调整(调教)

x

4.使用内置工具进行音高,长度变换。(Resampler)

x

5.使用内置工具进行单音拼接(wavtool)

x

Resampler工作原理

声音波形与音调的关系:变速不变调,变调不变速。

单纯拉伸会使音调变低,而缩短会使音调变高。

x

声波的周期表示着音高,单纯进行拉伸就会使周期变长。

x

x

但是单纯拉伸会使音调变低,所以在这里考虑的是用某种东西把缺少的部分补充起来

x

那我们考虑下,假如有这样的波形

x

要进行这样的拉伸

x

就只能将前一周期复制一遍

x x

这个方法虽然简陋,但是可以完美填补空白区域。

但是实际状态下,波形不可能这么光滑与简单,接缝的地方还会出现噪音。

于是重叠一部分,再用交叉淡入,这样会更好

x

这就完成了变调不变速,变速不变调(overlap-add)的算法。

音频伸缩的方法


x x

刚才说明的是,输入红○○的移动速度和输出○侧的是相等的,通过把输入红○○侧的速度调整到与输出黑○相对合适的速度,就可以改变音高。 这种方法的好处是长度的伸缩比率正好是黑○的速度,音高的变化由红○○的速度决定,这存在于音高和长度的参数相互独立的时候。

所以方法就是:在原始音频数据的各点取得正确的周期(所取周期的正确性是这个方法的关键),并扩展所取得的周期。

但是这样是不够的。

x

由上图可知:频谱会随着音调的高低而移动,其次,在频谱中:

x

因此,我们可以计算原始音频的这个曲线:

x

使得输出音频的这个曲线和原始音频的重合就好了 x 那么,怎么求输出音频的曲线呢:

方法一:调低FFT的点数

x

问题:

输出端的音高较低时,频谱的特性结构存在于低频区域

x

N=128 时,由于低频处的特性已被破坏,如果以此曲线为基准,留下的将是错误的特性.

x

而且,输出在极高频处为锯齿状,这时候无关紧要的特性反而会带来噪音增加等问题

x

方法二:在不减少点数的情况下,按照图像的“渐变”对频谱进行频率方向的平滑操作

x

这种情况下,调整平滑函数使之适合音高,就避免了那些问题。

从这个图来看,把“输入/输出”与原来的频谱进行乘法运算,就可以判断好坏的程度。 x

x

x

x

恢复曲线特性后的结果

x

完成!

Resampler参数:

x

string input;string gen;string genfile;string temp;string pitchPercent;double velocity;string flags;double offset;double lengthReq;double fix;double blank;double volume;double modulation;string tempo;string pit;

Wavtool工作原理

将Resampler生成的音频拼接在一起,去除接缝的噪音。 x

x

使用方法:

x

例子:

x

wavtool参数:

x

string outfile; string infile; double offset; string length; double p1; double p2; double p3;double v1; double v2; double v3; double v4;double ovr; double p4; double p5; double v5;

一个完整的命令行例子:(来自星璇)

@echo off
resampler.exe "F4\xin_xin_xin.wav" "temp$$$.wav" F#4 100 "B0Y0" 1597.67 250 215.88 -379.041 100 0 !110 AA#59#
wavtool.exe "temp.wav" "temp$$$.wav" 0 [email protected] 0 26.1 108.1 0 100 100 0 26.113 0
resampler.exe "F4\qin_qin_qin.wav" "temp$$$.wav" F#4 100 "B0Y0" 1331.745 500 256.769 -275.016 100 0 !110 AA#59#
wavtool.exe "temp.wav" "temp$$$.wav" 0 [email protected]+153.968 0 108.1 15 0 100 100 0 108.11 0
resampler.exe "F4\qian_qian_qian.wav" "temp$$$.wav" G#4 100 "B0Y0" 1610.929 250 243.33 -383.789 100 0 !110 +c#3#AA#56#
wavtool.exe "temp.wav" "temp$$$.wav" 0 [email protected] 0 10.7 83.3 0 100 100 0 10.682 0
resampler.exe "F4\nian_nian_nian.wav" "temp$$$.wav" G#4 100 "B0Y0" 1214.407 600 334.519 -391.286 100 0 !110 AA#59#
wavtool.exe "temp.wav" "temp$$$.wav" 90.575 [email protected]+191.899 0 83.3 15.8 0 100 100 0 83.253 0
resampler.exe "F4\nian_nian_nian.wav" "temp$$$.wav" F#4 100 "B0Y0" 1585.801 0 190.192 -344.618 100 0 !110 AA#35#
wavtool.exe "temp.wav" "temp$$$.wav" 0 [email protected] 0 15.8 25.8 0 100 100 0 15.826 0
resampler.exe "F4\yan_wu.wav" "temp$$$.wav" F#4 100 "B0Y0" 624.436 550 403.855 -467.718 100 0 !110 AA#35#
wavtool.exe "temp.wav" "temp$$$.wav" 286.134 [email protected]+56.019 0 25.8 25.3 0 100 100 0 25.819 0
resampler.exe "F4\wo_wo_wo.wav" "temp$$$.wav" G#4 100 "B0Y0" 1535.949 150 204.261 -468.785 100 0 !110 +c#6#AA#29#
wavtool.exe "temp.wav" "temp$$$.wav" 0 [email protected] 0 25.3 55.8 0 100 100 0 25.322 0
resampler.exe "F4\mo_mo_mo.wav" "temp$$$.wav" G#4 100 "B0Y0" 1269.146 400 240.245 -286.875 100 0 !110 AA#35#
wavtool.exe "temp.wav" "temp$$$.wav" 99.047 [email protected]+95.999 0 55.8 17 0 100 100 0 55.784 0
resampler.exe "F4\men_men_men.wav" "temp$$$.wav" F#4 100 "B0Y0" 1574.635 50 161.893 -325.436 100 0 !110 Bk#4#AA#31#
wavtool.exe "temp.wav" "temp$$$.wav" 0 [email protected] 0 17 39.6 0 100 100 0 17.013 0
resampler.exe "F4\shen_shen_shen.wav" "temp$$$.wav" F#4 100 "B0Y0" 1204.323 400 307.2 -386.218 100 0 !110 AA#35#
wavtool.exe "temp.wav" "temp$$$.wav" 167.902 [email protected]+39.641 0 39.6 33.6 0 100 100 0 39.641 0
resampler.exe "F4\shi_shi_shi.wav" "temp$$$.wav" D#4 100 "B0Y0" 865.907 150 263.297 -425.241 100 0 !110 DI#4#Bk#7#AA#24#
wavtool.exe "temp.wav" "temp$$$.wav" 11.693 [email protected]+33.596 0 33.6 52.1 0 100 100 0 33.596 0
resampler.exe "B3\zhi_xi.wav" "temp$$$.wav" D#4 100 "B0Y0" 609.219 400 287.318 -362.447 100 0 !110 AA#35#
wavtool.exe "temp.wav" "temp$$$.wav" 126.513 [email protected]+71.446 0 52.1 26.1 0 100 100 0 52.076 0
resampler.exe "F4\xin_xin_xin.wav" "temp$$$.wav" F#4 100 "B0Y0" 1597.67 250 215.88 -379.041 100 0 !110 84#6#+c#8#AA#45#
wavtool.exe "temp.wav" "temp$$$.wav" 0 [email protected] 0 26.1 101.1 0 100 100 0 26.113 0
resampler.exe "D4\xin_xin_xin.wav" "temp$$$.wav" F#4 100 "B0Y0" 1268.842 500 292.249 -362.194 100 0 !110 AA#59#
wavtool.exe "temp.wav" "temp$$$.wav" 6.137 [email protected]+188.64 0 101.1 26.1 0 100 100 0 101.088 0
resampler.exe "F4\xin_xin_xin.wav" "temp$$$.wav" F#4 100 "B0Y0" 1597.67 200 215.88 -379.041 100 0 !110 AA#59#
wavtool.exe "temp.wav" "temp$$$.wav" 0 [email protected] 0 26.1 61.6 0 100 100 0 26.113 0
resampler.exe "F4\in_ri.wav" "temp$$$.wav" F#4 100 "B0Y0" 690.326 600 326.814 -391.286 100 0 !110 AA#59#
wavtool.exe "temp.wav" "temp$$$.wav" 105.169 [email protected]+163.9 0 61.6 23.3 0 100 100 0 61.562 0
resampler.exe "B4\ren_ren_ren.wav" "temp$$$.wav" F4 100 "B0Y0" 1610.126 100 187.124 -310.119 100 0 !110 AA#59#
wavtool.exe "temp.wav" "temp$$$.wav" 0 [email protected] 0 23.3 45.3 0 100 100 0 23.343 0
resampler.exe "D4\lun_lun_lun.wav" "temp$$$.wav" F4 100 "B0Y0" 1218.515 650 352.766 -409.533 100 0 !110 AA#59#
wavtool.exe "temp.wav" "temp$$$.wav" 164.028 [email protected]+149.763 0 45.3 19.4 0 100 100 0 45.277 0
resampler.exe "F4\lei_lei_lei.wav" "temp$$$.wav" F#4 100 "B0Y0" 1551.163 50 182.003 -308.746 100 0 !110 AA#35#
wavtool.exe "temp.wav" "temp$$$.wav" 0 [email protected] 0 19.4 45.9 0 100 100 0 19.387 0
resampler.exe "F4\ei_yi.wav" "temp$$$.wav" F#4 100 "B0Y0" 463.258 450 335.937 -399.8 100 0 !110 AA#35#
wavtool.exe "temp.wav" "temp$$$.wav" 198.086 [email protected]+67.863 0 45.9 26.4 0 100 100 0 45.949 0
resampler.exe "F4\ye_ye_ye.wav" "temp$$$.wav" D#4 100 "B0Y0" 869.238 100 256.687 -417.527 100 0 !110 DI#2#Bk#7#AA#26#
wavtool.exe "temp.wav" "temp$$$.wav" 0 [email protected]+4.524 0 26.4 43.4 0 100 100 0 26.438 0
resampler.exe "F4\ye_ci.wav" "temp$$$.wav" D#4 100 "B0Y0" 567.356 400 279.822 -299.651 100 0 !110 AA#35#
wavtool.exe "temp.wav" "temp$$$.wav" 151.682 [email protected]+43.431 0 43.4 15 0 100 100 0 43.431 0
resampler.exe "D4\cai_cai_cai.wav" "temp$$$.wav" F#4 100 "B0Y0" 1563.421 150 192.37 -322.123 100 0 !110 84#3#+c#8#AA#48#
wavtool.exe "temp.wav" "temp$$$.wav" 4.75 [email protected] 0 8.9 52.3 0 100 100 0 8.944 0
resampler.exe "F4\ai_ni.wav" "temp$$$.wav" F#4 100 "B0Y0" 578.82 650 367.361 -424.737 100 0 !110 AA#59#
wavtool.exe "temp.wav" "temp$$$.wav" 154.957 [email protected]+156.493 0 52.3 18.6 0 100 100 0 52.319 0
resampler.exe "D4\niao_niao_niao.wav" "temp$$$.wav" F#4 100 "B0Y0" 1535.717 200 240.348 -352.868 100 0 !110 AA#59#
wavtool.exe "temp.wav" "temp$$$.wav" 0 [email protected] 0 18.6 60 0 100 100 0 18.595 0
resampler.exe "F4\dao_dao_dao.wav" "temp$$$.wav" F#4 100 "B0Y0" 1104.928 600 300.104 -338.574 100 0 !110 AA#59#
wavtool.exe "temp.wav" "temp$$$.wav" 72.235 [email protected]+181.811 0 60 15 0 100 100 0 60.03 0
resampler.exe "F4\da_da_da.wav" "temp$$$.wav" F#4 100 "B0Y0" 1491.406 100 163.45 -435.407 100 0 !110 AA#35#
wavtool.exe "temp.wav" "temp$$$.wav" 0 [email protected] 0 7.9 70.3 0 100 100 0 7.913 0
resampler.exe "D4\xia_xia_xia.wav" "temp$$$.wav" F#4 100 "B0Y0" 1294.542 350 262.547 -314.649 100 0 !110 AA#35#
wavtool.exe "temp.wav" "temp$$$.wav" 61.221 [email protected]+82.29 0 70.3 21.4 0 100 100 0 70.292 0
resampler.exe "F4\xia_xia_xia.wav" "temp$$$.wav" G#4 100 "B0Y0" 1565.003 150 272.181 -534.727 100 0 !110 +c#5#AA#30#
wavtool.exe "temp.wav" "temp$$$.wav" 0 [email protected]+9.367 0 21.4 70.4 0 100 100 0 21.365 0
resampler.exe "F4\ha_ha_ha.wav" "temp$$$.wav" G#4 100 "B0Y0" 1282.443 350 221.036 -280.793 100 0 !110 AA#35#
wavtool.exe "temp.wav" "temp$$$.wav" 50.971 [email protected]+89.929 0 70.4 24.5 0 100 100 0 70.407 0
resampler.exe "F4\hai_hai_hai.wav" "temp$$$.wav" F#4 100 "B0Y0" 1569.974 0 172.539 -315.47 100 0 !110 Bk#6#AA#29#
wavtool.exe "temp.wav" "temp$$$.wav" 0 [email protected]+5.014 0 24.5 24.2 0 100 100 0 24.537 0
resampler.exe "B4\ai_yi.wav" "temp$$$.wav" F#4 100 "B0Y0" 533.203 500 360.266 -421.697 100 0 !110 AA#35#
wavtool.exe "temp.wav" "temp$$$.wav" 244.153 [email protected]+50.531 0 24.2 27.5 0 100 100 0 24.211 0
resampler.exe "D4\you_you_you.wav" "temp$$$.wav" D#4 100 "B0Y0" 1389.225 50 181.774 -305.16 100 0 !110 DI#2#Bk#7#AA#26#
wavtool.exe "temp.wav" "temp$$$.wav" 0 [email protected]+1.221 0 27.5 37.6 0 100 100 0 27.541 0
resampler.exe "F4\pou_pou_pou.wav" "temp$$$.wav" D#4 100 "B0Y0" 1002.513 350 319.482 -349.227 100 0 !110 AA#35#
wavtool.exe "temp.wav" "temp$$$.wav" 176.238 [email protected]+37.604 0 37.6 15 0 100 100 0 37.604 0
resampler.exe "B3\piao_piao_piao.wav" "temp$$$.wav" F#4 100 "B0Y0" 1435.926 300 281.401 -412.167 100 0 !110 84#2#+c#8#AA#49#
wavtool.exe "temp.wav" "temp$$$.wav" 39.124 [email protected] 0 5 108.1 0 100 100 0 3.793 0
resampler.exe "F4\pao_pao_pao.wav" "temp$$$.wav" F#4 100 "B0Y0" 1167.321 450 275.066 -358.544 100 0 !110 AA#59#
wavtool.exe "temp.wav" "temp$$$.wav" 0 [email protected]+138.346 0 108.1 15 0 100 100 0 108.11 0
resampler.exe "B3\piao_piao_piao.wav" "temp$$$.wav" G#4 100 "B0Y0" 1435.926 250 281.401 -412.167 100 0 !110 +c#2#AA#57#
wavtool.exe "temp.wav" "temp$$$.wav" 0 [email protected] 0 5.9 74.7 0 100 100 0 5.855 0
resampler.exe "B3\mao_mao_mao.wav" "temp$$$.wav" G#4 100 "B0Y0" 1230.68 550 293.971 -333.505 100 0 !110 AA#59#
wavtool.exe "temp.wav" "temp$$$.wav" 66.658 [email protected]+180.736 0 74.7 16.2 0 100 100 0 74.73 0
resampler.exe "F4\mei_mei_mei.wav" "temp$$$.wav" F#4 100 "B0Y0" 1613.292 200 152.68 -312.174 100 0 !110 Bk#4#AA#55#
wavtool.exe "temp.wav" "temp$$$.wav" 0 [email protected] 0 16.2 86.6 0 100 100 0 16.222 0
resampler.exe "F4\mei_mei_mei.wav" "temp$$$.wav" F#4 100 "B0Y0" 1247.978 600 336.546 -387.231 100 0 !110 AA#59#
wavtool.exe "temp.wav" "temp$$$.wav" 90.286 [email protected]+192.586 0 86.6 16.2 0 100 100 0 86.58 0
resampler.exe "F4\mei_mei_mei.wav" "temp$$$.wav" G#4 100 "B0Y0" 1613.292 200 152.68 -312.174 100 0 !110 +c#4#AA#55#
wavtool.exe "temp.wav" "temp$$$.wav" 0 [email protected] 0 16.2 91.9 0 100 100 0 16.222 0
resampler.exe "F4\ei_yi.wav" "temp$$$.wav" G#4 100 "B0Y0" 463.258 600 335.937 -399.8 100 0 !110 AA#59#
wavtool.exe "temp.wav" "temp$$$.wav" 83.956 [email protected]+191.861 0 91.9 22.9 0 100 100 0 91.898 0
resampler.exe "F4\yin_yin_yin.wav" "temp$$$.wav" F#4 100 "B0Y0" 1634.862 150 196.246 -372.71 100 0 !110 Bk#5#AA#54#
wavtool.exe "temp.wav" "temp$$$.wav" 0 [email protected] 0 22.9 60.3 0 100 100 0 22.948 0
resampler.exe "F4\in_te.wav" "temp$$$.wav" F#4 100 "B0Y0" 541.313 600 354.793 -393.313 100 0 !110 AA#59#
wavtool.exe "temp.wav" "temp$$$.wav" 130.792 [email protected]+170.384 0 60.3 15 0 100 100 0 60.267 0
resampler.exe "F4\te_te_te.wav" "temp$$$.wav" F#4 100 "B0Y0" 1611.914 200 216.114 -441.155 100 0 !110 AA#59#
wavtool.exe "temp.wav" "temp$$$.wav" 0 [email protected] 0 6.7 94.7 0 100 100 0 6.726 0
resampler.exe "F4\e_wu.wav" "temp$$$.wav" F#4 100 "B0Y0" 673.093 550 264.574 -321.341 100 0 !110 AA#59#
wavtool.exe "temp.wav" "temp$$$.wav" 16.282 [email protected]+199.48 0 94.7 15 0 100 100 0 94.695 0
resampler.exe "F4\wang_wang_wang.wav" "temp$$$.wav" F#4 100 "B0Y0" 1598.239 100 159.702 -291.482 100 0 !110 AA#35#
wavtool.exe "temp.wav" "temp$$$.wav" 0 [email protected] 0 11.5 54.4 0 100 100 0 11.547 0
echo 合成完成
pause

参考资料: 3月25日、数学ソフトウェアとフリードキュメント XIVで行った講演で使用した資料です 百度百科













本作品
 
UTAU:从音符到歌声采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。
基于 http://www.GloomyGhost.com/2018/08/14/utautts.html上的作品创作。


赞赏