歌唱合成ツール UTAU に付属する resampler.exe に渡すパラメーター(コマンドライン引数)について、最近のバージョンの情報を網羅的にまとめているサイトが見当たらなかったので、ここでまとめてみた。UTAU 0.4.16 に付属の resampler.exe Ver14.02r について記している。

本稿は公式なものではなく、間違っている情報があるかもしれないことに注意。間違いを見つけた方は教えていただけると助かります。

resampler.exe を起動する際のパラメーターの構文は、
resampler.exe <input file> <output file> <pitch percent> <velocity> [<flags> [<offset> <length require> [<fixed length> [<end blank> [<volume> [<modulation> [<pitch bend>...]]]]]]]
[] で括られたパラメーターは省略可能。<flags>~<pitch bend> までを全部省略することもできるし(一番外側の [] を省略)、<flags> を残して <offset>~<pitch bend> までを省略することもできる(2 番目の [] を省略)。省略できるのは後方のパラメーターのみなので、<flags> を省略して次の <offset> は省略しない、というようなことはできない。

各パラメーターについて


名前概要
input file文字列原音ファイル名
C:\Voice\春歌ナナ\か.wav

UTAU 音源の原音ファイル。歌唱したい歌詞に対応した原音 WAVE ファイルを指定する。

連続音音源なら「C:\Voice\ぱみゅ\_かかきかく.wav」などとなる。

名前概要
output file文字列出力ファイル名
C:\Project\春風ソング.cache\1_か_C4_wNAwRt.wav

歌唱合成結果を保存する WAVE ファイル。

名前概要
pitch percent文字列音高
G#4

PitchPercent歌唱する音程を指定する。

表記は UTAU の GUI(左側のピアノロール)と同じで、音名とオクターブ数字を用いる。オクターブ数字は、大きい方が高い音となる。

名前概要
velocity小数子音速度
100

子音部(固定範囲)の伸縮率。0~200 の範囲で指定可能で、100 で伸縮なし。

値が大きいほど速度が上がり、時間軸上では縮小される。子音速度 0 で時間軸上 2 倍、200 で半分。

UTAU では、子音速度の比率で STP・先行発声・オーバーラップを伸縮している模様。また、食い込み補正(後述)の計算は伸縮後に行う。

名前概要
flags文字列フラグ
g-3Y90

音符のプロパティで指定できるフラグの他、下記が使用できる模様。
  • N: No formant filter
  • G: (Re)Genetate frequency list
  • T: Export text frequency list

名前概要
offset小数オフセット
5.0

原音設定の左ブランクに相当する。単位はミリ秒。

名前概要
length require整数音長
550

音の長さをミリ秒単位で指定する。

例えば、テンポ 60 において四分音符であれば、音符としての長さは 1,000 ミリ秒となる。UTAU ではこの他に、以下のような要素を加味して length require を算出している模様。
  1. 音符としての長さ+先行発声(食い込み補正前)-後続先行発声(食い込み補正後)+後続オーバーラップ(食い込み補正後)+50
  2. 計算結果が fixed length より小さい場合は fixed length にする
  3. 50 単位で四捨五入(24 捨 25 入)する

名前概要
fixed length小数子音部
115.0

原音設定の子音部に相当する。単位はミリ秒。

名前概要
end blank小数右ブランク
247.0

原音設定の右ブランクに相当する。単位はミリ秒。

名前概要
volume小数音量
100

音量を % 単位で指定する。

名前概要
modulation小数モジュレーション
0

原音の音の揺らぎをどれだけ残すかを % 単位で指定する。

0 を指定すれば、原音の音程が揺らいでいても、<pitch percent> で指定した音程で安定する。

名前概要
pitch bend文字列ピッチベンド
!120 AA#88#ABAKAbA0BSB2Cc

ピッチ曲線を「!<テンポ> <ピッチ文字列>」で表現する。

ピッチ文字列は、2 文字で 1 つのピッチベンド点を表す。<pitch percent> で指定した音高からのピッチのずれ(セント単位)を 12 ビット符号付き整数(マイナス値の場合は、4096-n で OK)で表した上で、Base 64 エンコードをして ASCII 2 文字にする。

例えば、1 セント高いピッチの場合は、
1(10 進数)→ 000000 000001(12 ビット 2 進数)→ AB(Base64)
となり、逆に、1 セント低いピッチの場合は、
-1(10 進数)→ 4096-1 = 4095(10 進数)→ 111111 111111(12 ビット 2 進数)→ //(Base64)
となる。

ピッチ指定の間隔は四分音符の 96 分の 1 で、その間隔ごとのピッチベンド点を、ASCII 2 文字で連ねていく。

例えば、<pitch percent> が C4 で、ピッチ文字列が AAABAC なら、
ド→ドより 1 セント高い音→ドより 2 セント高い音
のように推移していく。

同じ高さの点が続く場合は、Base64 の直後に「#回数#」を付加する。

例えば、1 セント高い音が 50 回続くなら、
AB#50#
となる。

ピッチ文字列が 2 文字の場合は、末尾に AA を付与するかもしれないが未確認。

ピッチベンドの先頭の位置は、音符の先頭 - 先行発声 - STP。

食い込み補正について

食い込み補正先行発声が大きく、直前の音符の長さが短い場合、直前の音符よりも先に発声されてしまうという状況が発生する可能性がある。

例えば、テンポ 360 で四分音符の「あ」「い」が続いている場面を考える。テンポ 360 において四分音符は 167 ミリ秒の長さがあるが、「い」の先行発声が 200 ミリ秒だとすると、「い」の方が先に発生されてしまう(ここでは「あ」の先行発声は 0 ミリ秒と仮定する)。

そういうおかしな状況が発生しないよう、UTAU では、直前の音符の半分の長さ以上に先行発声が食い込んでいる場合は、直前の音符が半分生き残るように、先行発声などの長さを調整する。

例の状況では、先行発声を約 83 ミリ秒にして、「あ」が半分発生されるようにする。

この補正のことを、(俺は勝手に)食い込み補正と呼んでいる。食い込み補正の処理は以下。

◆食い込み補正の発動条件

先行発声-オーバーラップ > 直前の音符の長さの半分
であれば発動

◆食い込み補正率

食い込み補正率 = 直前の音符の長さの半分÷(先行発声-オーバーラップ)

◆食い込み補正後の数値

食い込み補正後の先行発声 = 補正前の先行発声×食い込み補正率
食い込み補正後のオーバーラップ = 補正前のオーバーラップ×食い込み補正率
食い込み補正後の STP = 補正前の先行発声-補正後の先行発声

関連記事


参考 URL


更新履歴

  • 2014/03/23 デルタさん・masao さんのアドバイスを含め length require について加筆。その他いくつか更新。