最近看了些方法,整理了下。
需要环境:Debain/Ubuntu x86_64系统
首先下载训练包:https://pan.baidu.com/s/1i6huEaD
下载后解压
先编译hts_engine_API,然后编译SPTK和HTS_for_HTK.编译时需要csh和libx11,记得安装。apt里就有
编译hts_engine_API和SPTK后一定要make install,HTS_for_HTK可以不用install
然后打开hts-train-demo文件夹,打开data,替换相应文件
raw文件夹为音频文件,格式为:480000Hz Little Endian 跳过前2位
可以使用ffmpeg进行转换:
ffmpeg -i input.wav -f s16le -ar 48000 -acodec pcm_s16le output.raw
label/full放入音乐的完整label,可以用Sinsy-remix导出
sinsy -x dic -m jp.htsvoice -w c -o output.lab -l infile.xml
-x 指定发音表所在文件夹
-m 指定任意一个htsvoice(不影响输出结果,必须指定一个htsvoice是bug)
-w 指定语言,j代表日语,c代表中文
注:如果需要使用其他语言进行训练,需要更改question文件(只需更改开头的音素不封,也就是LL-Phone到RR-Phone的区域),具体请查看:关于HTS问题集(question)的解析(一)
label/mono指定的歌词和对应时间,元音和辅音要拆开来,时间一定要准确,否则影响音源合成效果
注意:pau这个音的作用类似UTAU里的R,代表无声的范围,不能缺少。sil是用来填补曲子还没开始前的“上一个音”的空位
具体怎么写可以参照官方的例子
开始训练,需要的时间较长(6-12小时),建议在screen里运行
screen -S train
配置时一定要指定HTK的位置
./configure --with-hts-search-path=../HTS_for_HTK/htk/HTKTools
然后就可以开始make了
make all
如果训练时,perl提示找不到对应类,请手动执行下面的指令:
perl scripts/Training.pl 当前的绝对路径/scripts/Config.pm
大约6小时训练完成
训练结果在voice文件夹内