UTAU 渲染脚本
原文链接(日语) 原作者:delta_kuro
声明
本文依据个人分析所写,因此可能存在少量不严谨。另外,翻译过程中补充了一些内容。
渲染脚本的位置
临时文件夹
一般地,UTAU 启动后,会在系统环境变量为 TEMP 的路径下创建后台工作目录 utauX
(X为正整数,由于utau可以多开,按启动顺序依次递增),用来存放合成脚本文件。
一般是这样一个文件夹:C:\user\<user名>\AppData\Local\Temp\utau1\
脚本文件
一般会产生以下两个文件。
- temp.bat
- temp_helper.bat
如果使用了 UTAU 的多核渲染,那么不会产生 helper,会产生以下文件,具体数量与线程数相同。
- temp.bat
- temp1.bat
- temp2.bat
- temp3.bat
- ...
渲染脚本的作用
单核处理
temp.bat
- 从UTAU直接启动
- 将各种参数存在批处理的变量中
- 对于休止符,直接启动wavtool
temp_helper.bat
- 从temp.bat中启动
- 将temp.bat中设定的参数发送给resampler和wavtool
多核处理
temp.bat
- 一次性调用合成器,在最后启动。
其他批处理文件
- 在合成开始后同时启动重采样器,并行进程。
- 所有进程结束后启动
temp.bat
。
本文只讨论单核渲染的批处理文件。
渲染脚本的内容
temp.bat 页首
@rem project
工程文件名
@set loadmodule
模块的设定?似乎一直是空白的
@set tempo
工程曲速
@set samples
采样频率
@set oto
音源文件夹的完整路径
@set tool
合成引擎 (wavtool)的完整路径
@set resamp
重采样引擎(resampler) 的完整路径
@set output
temp.wav的相对路径
@set helper
temp_helper.bat的路径
@set cachedir
缓存文件夹的路径
@set flag
全局Flags
@set env
默认音量包络
@set stp
定义变量stp
@del "%output%" 2>nul
如果temp.wav存在,则将它删掉
"2>nul"指的是不输出错误信息
@mkdir "%cachedir%" 2>nul
创建缓存文件夹
temp.bat 正文
对于休止符
@"%tool%" "%output%""%oto%\R.wav" 0 480@120+0.0 0 0
直接调用wavtool
- 第一个参数:输出文件
- 第二个参数:在原音设定文件夹下的R.wav
(似乎用这个来识别休止符)
- 第三个参数:stp
(休止符为0)
- 第四个参数:输出的实际长度
- 格式:音长@tempo+校正值
- 校正值 = 先行声音(校正后)+ 末端偏移
详见 咬合校正- 第五个参数(以及后面一堆):音量包络
(对于休止符:0 0)
对于除休止符以外的音符
@set params=100 0 !120 AA#5# [必填]
设定音调参数
- 第一个参数:音量
- 第二个参数:移调
- 第三个参数:曲速
(格式:!tempo)
- 第四个参数:音高曲线字符串
@set flag="g5"
设定 Flags
- 一般是全局flags在后,音符flags在前
- 出现同一个参数时,只有第一个有效
- 当出现 e 或者 E 时,在前面添加反斜杠
@set env=0 5 35 0 100 100 0 70 0 10 100 [必填]
音量包络(除了休止符,有三种格式,任选其一)
- p1 p2 p3 v1 v2 v3 v4 ove
- p1 p2 p3 v1 v2 v3 v4 ove p4
- p1 p2 p3 v1 v2 v3 v4 ove p4 p5 v5
@set stp=150
设定 stp 数值
@set vel=100【必填】
辅音速度
@set temp="%cachedir%\1_あ_C4_OkgOOW.wav"【必填】
缓存文件的路径
- 文件名是
[ust音符序号]_[歌词]_[音阶]_[六位英文数字].wav
- 歌词中的
半角空格
会被替换为“+”
,“*”
替换为“$”
,“?”
替换为“=”
,正反斜杠
替换为下划线
,其他文件名敏感符号直接忽略。- 乱码后缀意义不明(可能是随机生成)
- 当对同一个音符进行操作后,通过改变文件名来区分缓存,这种方法比较好。
@echo ##########------------------------------(1/4)【必填】
显示合成进度
@call %helper% "%oto%_おおうえあ.wav" C4 480@120+70.0 30 3170.884 600 50.0 -1169.19 0【必填】
temp_helper.bat的启动指令
- 第1个参数:采样的文件名("%oto%\あ.wav")
- 第2个参数:渲染目标音阶名(C4)
- 第3个参数:音符长度(与休止符相同)(480@120+70.0)
- 第4个参数:先行发声(30)
- 第5个参数:偏移(3170.884)
- 第6个参数:resampler输出的声音长度(600)
- 与wavtool结合前,没有经过裁剪直接输出的长度
- (第3个参数换算为ms后的长度+stp)/50,四舍五入以后再乘以50
- 第7个参数 固定范围(50.0)
- 第8个参数 右侧空白(-1169.19)
- 第9个参数 序号(0)
- 多线程合成时这个参数如果错误可能引起问题
temp_helper.bat 内容
[与ust无关的指令]
@if exist %temp%goto A
如果存在缓存文件,那么跳过重采样步骤
@if exist"%cachedir%%9_.wav" del "%cachedir%%9_.wav"
如果有相同序号但不同名称的文件,则删除
@"%resamp%"%1 %temp% %2 %vel% %flag% %5 %6 %7 %8 %params%
启动重采样引擎(之前已经讲过)
:A
提供给第一行跳跃的标签
@"%tool%""%output%" %temp% %stp% %3 %env%
启动合成引擎(与休止符一样)
temp.bat 页脚
[与ust无关的指令]
@if not exist"%output%.whd" goto E
@if not exist"%output%.dat" goto E
检查是否生成了 temp.whd 和 temp.dat。如果没有,跳过以下步骤。
当temp_helper.bat正在被调用时,还没有生成temp.wav,temp.whd与temp.dat已经生成了。
copy /Y"%output%.whd" /B + "%output%.dat" /B "%output%"
将 temp.whd 和 temp.dat 合并为 temp.wav。
#whd可能是
wav head
的意思。
del "%output%.whd"
del"%output%.dat"
删除temp.whd与temp.dat。
:E
跳过合并与删除过程的标签。