特定の条件(たとえば、lyricが「あ」「い」「う」「え」「お」のいずれかであるとか、音高が72以上であるなど)のときに、特定の設定(preutteranceを100にするなど)を適用するUTAU用プラグインです。
@usgb1221さんのつぶやきに私飯香が反応して作成しました。
上記の条件設定ができるようにすることがもともとの目的です。
足回りは「花篭」のモジュールを利用しています。
次のような2つの設定ファイルを用意します。
このプラグインは、選択範囲の各ノートについて、まず条件定義ファイルに基づいて、何という条件名に該当するのか調べます。そして、設定定義ファイルに基づいて、その条件名に設定された設定を実施します。
条件定義ファイルでは、Vowel、Highなどの任意の条件名を定義することができます。
[Vowel] lyric=あ,い,う,え,お prevowel!=- [High] notenum>=72 [Shortnote] duration<=120
この例では、「Vowel」「High」「Shortnote」という3つの条件名を定義しています。そして、たとえば「High」とはnotenum(音高)が72以上であるノートのことである、といったことを定義しています。
詳しくは後の節で説明します。
設定定義ファイルでは、自分が定義したVowel、Highなどの条件名に対し、その条件名に該当するノートへどのような設定を行いたいのかを記述します。
[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 | |
baselyric | |
prevowel |
いずれも、条件式でも設定式でも使えます。
文字列なので、条件式で「>」「<」「>=」「<=」は使えません。設定式で「+=」は文字列の追加の意味になります。「-=」は使えません。
keyname | |
notenum |
いずれも、条件式でも設定式でも使えます。
notenumは、C4が60に相当し、半音あがるごとに1ずつ大きな値になります。
keynameは文字列ですが、条件式で「>」なども使えます。この場合、右辺は「keyname>60」などと数字で指定してください。設定式で「+=」は文字列の追加の意味になります。「-=」は使えません。
notenumは数値ですので、すべての等号が使えます。
duration | |
moduration | |
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なども同じです。
pre | |
ovl | |
stp | |
dur | |
mod |
「*=」は実装見合わせました。「/」と同じくフラグ名になる可能性があるので。
テストはしましたが念のため大切なustはバックアップを取っておいてください。
ama.exe | プラグイン本体 |
---|---|
plugin.txt | プラグイン定義(必要ならいじってください) |
setting.txt | いじらないでください(花篭設定ファイル) |
subst.txt | いじらないでください(代替定義ファイル) |
ama-if.txt | 条件定義ファイル(いじってください) |
ama-then.txt | 設定定義ファイル(いじってください) |
条件定義ファイル、設定定義ファイルは、初期状態では以下の定義が入っています。
ただし、二次配布の場合、上記と異なっているかもしれません。二次配布の説明書があれば、そちらもあわせてご覧ください。
再配布はご自分の責任でどうぞ。ただし、このReadmeを同梱してください。
自作された条件定義ファイル、設定定義ファイルの扱いは言うまでもなくご自由にどうぞ。その際、プラグイン本体と一緒にして、一つのプラグインとして配布してもかまいません。(「先行発声を○○で○○するプラグインです!」など)
ただし、定義ファイルのReadmeに加え、このプラグインのReadmeも同梱してください。また、定義ファイルまで私が作成に関与したかのような言い方で紹介しないでください。(実際に関与している場合はもちろんかまいません。)
[
]
の前後において空白やタブは無視されることに。ただし「+=
」を「+ =
」などとすることはできない。
;
」でコメントが記述できることに。各行で「;
」以降は無視されます。
>
」「<
」も等号として使えるように。意味は「大なり」「小なり」です。
>=
」「<=
」が動かなくなってしまっていたので修正。
@
」で始まる条件名は、ノートがそこへ該当しても反応しないように。
+=
」は文字列結合を意味するように。
stp=(preutterance)
のような書き方ができるように。設定式の右辺において(
)
囲みで変数の名前を書くとその値になります。
stp=(preutterance) stp-=20のようにする必要があります。
next.preutterance
やprev.preutterance
のように「next.
」「prev.
」を頭につけると「次のノートの」や「前のノートの」という意味になります。設定式の左辺では使えません。右辺で(
)
囲みで使うことはできます。
preutteranceO
、voiceoverlapO
、stpO
が新設されました。
preutterance
はpre
、voiceoverlap
はovl
と書いてもよいようになりました。preR
、preO
、ovlR
、ovlO
も同じです。
duration
はdur
、moduration
はmod
と略せます。