条件設定プラグイン

飯香@iicafiaxus (2012. 6. 5) (2012. 6. 6) (2012. 7. 8)

目的

特定の条件(たとえば、lyricが「」「」「」「」「」のいずれかであるとか、音高72以上であるなど)のときに、特定の設定(preutterance100にするなど)を適用するUTAU用プラグインです。

経緯

@usgb1221さんのつぶやきに私飯香が反応して作成しました。

上記の条件設定ができるようにすることがもともとの目的です。

足回りは「花篭」のモジュールを利用しています。

仕様概要

次のような2つの設定ファイルを用意します。

このプラグインは、選択範囲の各ノートについて、まず条件定義ファイルに基づいて、何という条件名に該当するのか調べます。そして、設定定義ファイルに基づいて、その条件名に設定された設定を実施します。

条件定義ファイルの概要

条件定義ファイルでは、VowelHighなどの任意の条件名を定義することができます。

[Vowel]
lyric=あ,い,う,え,お
prevowel!=-

[High]
notenum>=72

[Shortnote]
duration<=120

この例では、「Vowel」「High」「Shortnote」という3つの条件名を定義しています。そして、たとえば「High」とはnotenum(音高)が72以上であるノートのことである、といったことを定義しています。

詳しくは後の節で説明します。

設定定義ファイルの概要

設定定義ファイルでは、自分が定義したVowelHighなどの条件名に対し、その条件名に該当するノートへどのような設定を行いたいのかを記述します。

[Vowel]
preutterance-=250
voiceoverlap=100
stp+=250

[High]
#g-=4

[Shortnote]
preutterance=30
voiceoverlap=60
stp=270

この例では、「Vowel」「High」「Shortnote」のそれぞれについて、どのように設定するかを記述しています。たとえば、「High」についてはgフラグを4だけ引くというふうに指示しています。

これも、詳しくは後の節で説明します。

定義ファイルに共通の事項

文字コードはShift-JISを使用してください。改行コードはCR-LFです。(Windowsで普通にメモ帳などで作成すると上記のとおりになるはずです。)

見やすいように、任意に空行をあけたり、タブや空白を入れたりしてもOKです。等号の前後などに空白を入れることもできます(「notenum >= 72」のように)。

なお、半角の「;」があると、以降行末まで無視します(コメントが書けます)。

条件定義ファイル

条件定義ファイルの構成

条件定義ファイルは、いくつかの条件を並べたものです。条件というのは、先ほどの例で言うと

[Vowel]
lyric=あ,い,う,え,お
prevowel!=-
とか
[High]
notenum>=72
といった一個一個の部分のことです。

なお、例では空行で区切っていましたが、空行はなくてもかまいません。

条件の書き方と例

まず、条件名を「[Vowel]」のように[]で囲んで書きます。条件名はファイル内で重複しないようにしてください。

条件名のあとに条件式を書きます。先ほどの例で

[High]
notenum >= 72

というのは、「[High]」が条件名Highを定義している部分であり、そのHighの条件式として、notenum>=72、つまり音の高さが72(C5のことです)以上であるという条件を書いています。

もう少し例です。たとえば、durationが120以下であるノートに対して「ShortNote」という条件名を名づけたいのであれば

[ShortNote]
duration <= 120
と書きます。

lyricが「あ」「い」「う」「え」「お」のいずれかであるノートに対して「Vowel」という条件名を名づけたいのであれば

[Vowel]
lyric = あ,い,う,え,お
と書きます。このように、右辺の値を「,」で区切ってリストにすることができます。この場合は、lyricが「あ」「い」「う」「え」「お」のどれかであるという意味になります。

条件式の書き方

条件式の詳しい文法は以下のとおりです。

<値の名称> <等号> <値>

値の名称は、lyricやdurationなどです。どのような種類があるかは後述します。

等号は、「=」「>」「<」「>=」「<=」「!=」の6種類が使えます。それぞれ、「等しい」「大なり」「小なり」「以上」「以下」「等しくない」という意味です。

preutterance > 100	; 先行発声が100より大きい
voiceoverlap <= 20	; オーバーラップが20以下

値は、100や20のような数値であったり、「あ」のような文字列であったりします。また「(preutterance)」のように()で囲んで値の名称を記述することもできます。

preutterance > (voiceoverlap)	; 先行発声がオーバーラップより大きい

値は、コンマ区切りでリストにすることもできます。

lyric = あ,い,う,え,お
preutterance > (voiceoverlap), 100

コンマ区切りのリストは、どれか1つに一致すればよいという意味になります。よって、「lyric = あ,い,う,え,お」はLyricがあ、い、う、え、おのどれかであるという意味になります。また、「preutterance > (voiceoverlap), 100」は、先行発声がオーバーラップよりも大きいかまたは先行発声が100よりも大きいという意味になります。

ただし、等号が「!=」である場合は、上記のとおりではなく、

lyric != あ,い,う,え,お

これは「Lyricがあ、い、う、え、おのいずれでもない」という意味になります。

条件の判定

1つの条件名に対して、条件式を2つ以上書いた場合は、すべてを満たす場合のみその条件名に該当することになります。たとえば

[LowLong]
notenum<=60
duration>=1920
という記述があると、この条件名「LowLong」には、「notenumが60以下であって、かつ長さが1920以上」のノートが該当することになります。

ファイルの中で条件が2つ以上ある場合、ノートがどの条件名に該当するかは、上から順に調べます。たとえば

[LowLong]
notenum<=60
duration>=1920

[Vowel]
lyric=あ,い,う,え,お
上記のようになっている場合、もしあるノートがLowLongの条件とVowelの条件を両方満たすとしたら、そのノートはLowLongの条件を満たしていると判定され、LowLongの設定だけが実施されます。(Vowelの設定は実施されません。)

設定定義ファイルの書き方

設定定義ファイルの構成

設定定義ファイルも、条件定義ファイルと同様、条件名とそれに続いていくつかの設定式を記述します。

たとえば、「Vowel」という条件名に該当しているノートに対して、「先行発声50、オーバーラップ100、stp250」にしたい場合は

[Vowel]
preutterance=50
voiceoverlap=100
stp=250
と記述します。また、「High」という条件名に該当しているノートに対して、フラグgを4ほど引きたい場合は
[High]
#g-=4
と書きます。この「preutterance=50」などを設定式といいます。

設定式の書き方

設定式の詳しい文法は以下のとおりです。

<値の名称> <等号> <値>

たとえば

preutterance=100
これはpreutteranceを100にするという設定です。

等号は「=」だけでなく「+=」「-=」もあります。それぞれ、元の値に足す、元の値から引くという意味です。

preutterance += 100	; 先行発声を100増やす
voiceoverlap -= 20	; オーバーラップを20減らす

値は、100や20のような数値であったり、「あ」のような文字列であったりします。また「(preutterance)」のように()で囲んで値の名称を記述することもできます。

設定の挙動

同じ値の名称に対して2回以上設定式を書くこともできます。この場合、上から順に実施されます。たとえば

preutterance = (voiceoverlap)
preutterance -= 20
これは、オーバーラップより20ほど小さい値を先行発声に設定しています。

なお、条件定義ファイルにあった条件名が、設定定義ファイルにない場合は、その条件名に該当するノートは、プラグイン実行前のままになります。

条件定義ファイルでなんの条件にも該当しなかったノートも同じです。

値の名称について

値の名称として以下のものが使えます。

Lyric関係

lyricノートのLyric。連続音の場合は「- あ」などになります。
baselyricLyricのうち「あ」の部分。
prevowelLyricのうち「-」の部分。

いずれも、条件式でも設定式でも使えます。

文字列なので、条件式で「>」「<」「>=」「<=」は使えません。設定式で「+=」は文字列の追加の意味になります。「-=」は使えません。

高さ関係

keyname「C4」「C#4」などの音高の名称です。
notenum「60」「61」などの音高の値です。

いずれも、条件式でも設定式でも使えます。

notenumは、C4が60に相当し、半音あがるごとに1ずつ大きな値になります。

keynameは文字列ですが、条件式で「>」なども使えます。この場合、右辺は「keyname>60」などと数字で指定してください。設定式で「+=」は文字列の追加の意味になります。「-=」は使えません。

notenumは数値ですので、すべての等号が使えます。

基本的な情報

durationノートの長さ。四分音符が480で、音符の長さに比例します。
modurationmodです。
intensityノートの強さ。

いずれも、条件式でも設定式でも使えます。また、いずれも数値なのですべての等号が使えます。

原音設定(現在値)

preutterance先行発声
voiceoverlapオーバーラップ
startpoint開始位置

ノートの「音符のプロパティ」で値がセットされていればその値を意味し、セットされていなければ(クリア)原音設定の値を意味します。

いずれも数値なのですべての等号が使えます。また、いずれも、条件式でも設定式でも使えます。

原音設定(相対値)

preutteranceR先行発声の相対値
voiceoverlapRオーバーラップの相対値
startpointR開始位置の相対値

これらは、oto.iniで設定されたデフォルトとの相対値を表します。

たとえば、oto.iniでは先行発声100となっていて、音符のプロパティで70となっていたら、このノートのpreutteranceRの値は-30です。

いずれも数値なのですべての等号が使えます。また、いずれも、条件式でも設定式でも使えます。

原音設定(デフォルト値)

preutteranceO先行発声のデフォルト値
voiceoverlapOオーバーラップのデフォルト値
startpointO開始位置のデフォルト値

これらは、oto.iniで設定されたデフォルト値を表します。

たとえば、oto.iniでは先行発声100となっていて、音符のプロパティで70となっていたら、このノートのpreutteranceOの値は100です。

いずれも数値なのですべての等号が使えますが、設定式で値を設定することはできません。(設定式の右辺で()つきで使用することはできます。)

フラグ

#で始まる値の名称は、フラグを表します。たとえば、gフラグの値は「#g」、Hフラグの値は「#H」などと表します。

いずれも数値なのですべての等号が使えます。また、いずれも、条件式でも設定式でも使えます。

任意の属性値

上記以外の名称は、ユーザ指定の属性値と解釈されます。(UTAUでは、$で始まる属性値を自分で作って使うことができますので、そのようなものを想定しています。)

前または後ろのノート

値の名称の頭に「prev.」をつけると、それは当該ノートではなくてその直前のノートについての値になります。

たとえば、条件式で

[AfterR]
prev.lyric = R

これは、前のノートのLyricがRであるという意味の条件になります。(つまり、「Rの直後のノート」を抽出する条件です。)

同じように、「next.」をつけると、当該ノートの直後のノートについての値のことになります。

略表記

次のように省略できます。preRなども同じです。
prepreutteranceの略
ovlvoiceoverlapの略
stpstartpointの略
durdurationの略
modmodurationの略

注意など

「*=」は実装見合わせました。「/」と同じくフラグ名になる可能性があるので。

テストはしましたが念のため大切なustはバックアップを取っておいてください。

必要なファイル

ama.exeプラグイン本体
plugin.txtプラグイン定義(必要ならいじってください)
setting.txtいじらないでください(花篭設定ファイル)
subst.txtいじらないでください(代替定義ファイル)
ama-if.txt条件定義ファイル(いじってください)
ama-then.txt設定定義ファイル(いじってください)

条件定義ファイル、設定定義ファイルは、初期状態では以下の定義が入っています。

ただし、二次配布の場合、上記と異なっているかもしれません。二次配布の説明書があれば、そちらもあわせてご覧ください。

再配布など

再配布はご自分の責任でどうぞ。ただし、このReadmeを同梱してください。

自作された条件定義ファイル、設定定義ファイルの扱いは言うまでもなくご自由にどうぞ。その際、プラグイン本体と一緒にして、一つのプラグインとして配布してもかまいません。(「先行発声を○○で○○するプラグインです!」など)

ただし、定義ファイルのReadmeに加え、このプラグインのReadmeも同梱してください。また、定義ファイルまで私が作成に関与したかのような言い方で紹介しないでください。(実際に関与している場合はもちろんかまいません。)

更新履歴

2012/06/05

2012/06/06

2012/07/08