UTAU向けエンジン「VS4U」の内部処理と周波数表の仕組みについて解説します。
伸縮器(resampler)は原音・周波数表を読み込み、パラメータに従い音声ファイルを出力します。
伸縮器は主に以下の処理を行います。
※処理内容はエンジンによって異なります。
VS4Uの内部処理は、以下の5つに分けられます。
時間方向に波形を伸縮します。 波形を伸縮することで長さ(再生時間)が変化しますが、 このとき波の周期も変化するため、ピッチが変化します。 また、倍音の周期にも影響があるため、フォルマントが変化します。
1波長単位に分割し、間隔を変えて配置します。 間隔の変更に応じて長さ(再生時間)が変化します。 波の周期が変わるためピッチが変化しますが、倍音の周期への影響は少ないため、 フォルマントはあまり変化しません。
波の数が変わるため、長さ(再生時間)が変化します。 波の周期は変わらないため、ピッチ、フォルマントは変化しません。
上記処理1〜3を組み合わせることで、ピッチ、フォルマント、長さを自由に変更できます。 変更する対象が3種類、独立な操作が3種類あるため、各操作における変更量が自動的に決まります。 (要するにTD-PSOLAです。)
1〜3の処理でピッチ、フォルマント、長さを自由に変更できますが、 「処理2:1波長単位での再配置」でフォルマントが変化してしまうことがあるため、FFTを使用して フォルマントを修正します。
音量や周波数特性が変化します。ピッチ、長さ(再生時間)への影響はありません。 フィルタによってはフォルマントが多少変化することがあります。
上記のピッチシフト・タイムストレッチの処理によって、原音に含まれる各周波数成分がどのように変化するかを見てみます。
ピッチシフト処理によって波の数が変わらず、波長が変化するため、正常にピッチシフトを行うことができます。 タイムストレッチ処理を行っても波形が崩れません。
ピッチシフト処理によって波長があまり変化せず、波の数を増減させることでピッチシフトの影響を吸収します。 タイムストレッチ処理を行っても波形が崩れません。
ピッチシフト処理がされているように見えますが、タイムストレッチ処理によって波形が崩れてしまいます。
以上より、以下の3点が言えます。
VS4Uは「処理1:波形の伸縮」および「処理2:1波長単位での再配置」で1波長分の波形の切り出しのために、原音の基本周波数を使用しています。 (周波数表の周波数から分割サイズを算出します。) 基本周波数の解析には非常に多くの計算量が必要であるため、時間がかかりますが、一度解析しておけば原音が変わらない限り再度解析する必要はありません。 このため、初回に解析結果を周波数表に保存しておき、次回以降は解析処理を省くことで処理を高速化します。
※周波数表に保存されている情報はエンジンによって異なります。ピッチマーク、音声の周期成分/非周期成分を保存しているエンジンもあります。
1オクターブ下や1オクターブ上に誤推定されることがあります。 長くなるので推定方法に関する説明は省略します。
周波数表の周波数が本来の周波数よりも低い場合、本来の周波数(=ピッチシフトしたい周波数)がフォルマントが維持される領域に入ってしまいます。 このため、ピッチを変更できなくなります。ただし、タイムストレッチは可能です。
A4のサイン波の周波数表をA2に書き換え、A3に配置すると以下のようになります。 ピッチをA2からA3に1オクターブあげていますが、A4はフォルマントが維持される領域であるため、ピッチが変更されずA4に聞こえます。
本来の周波数よりも低くなる誤推定が発生しても、タイムストレッチは正常にできるため、 ピッチシフトしたうえで誤推定がないか確認する必要があります。
周波数表の周波数が本来の周波数よりも高い場合、本来の周波数(=ピッチシフトしたい周波数)が タイムストレッチもピッチシフトもできない領域に入ってしまいます。
A4のサイン波の周波数表をA6に書き換えA6に配置し、時間方向に引き伸ばすと以下のようになります。 タイムストレッチ処理により本来存在しない周波数成分が発生します。
周波数表が波打っているからと言って真っすぐになるように修正したり、 自動的にビブラートをかけられるようにするなどの目的で意図的にずらすと正常にピッチシフト、タイムストレッチできなくなります。 周波数表は原音に忠実であるべきです。
周波数表を非常に低い周波数に書き換えることで、息音素に含まれるほとんどの成分をフォルマント維持領域に入れることができます。 ピッチシフトはできませんが、ノイズ等が発生せず生成できるようになります。 また、タイムストレッチにもある程度対応できるようになります。
VS4Uには、息音素用にWフラグが用意されています。 「W-2」を指定すると、周波数表を低い周波数に書き換えたうえでピッチシフトを無効化するため、 息音素の劣化を抑えることができます。