iicafiaxus

飯香 · @iicafiaxus

8th Jul 2012 from Twitlonger

「条件設定プラグイン」更新しました。
http://www1.axfc.net/uploader/Sc/so/360599.zip&key=utau

主な変更点は

---------------------------------------------------------------------

・stp=(preutterance)のような書き方ができるようになりました。
 設定式の右辺において()囲みで変数の名前を書くとその値になります。

・条件式で、当該ノートの「次のノート」や「前のノート」の値も参照できる
 ようになりました。

・原音設定値を参照することができるようになりました。


---------------------------------------------------------------------

条件設定プラグイン

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


■目的

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


■経緯

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

・破裂音は、先行発声を180減 オーバーラップを30に設定 STPを180増
・母音は、先行発声を250減 オーバーラップを100に設定 STPを250増
・それ以外は、先行発声を150減 オーバーラップを70に設定 STPを150増
・ただし、連続音で先行母音が「-」の場合と、
 先行発声を減らすと数値がマイナスになってしまいそうな場合は、
 何もせずにおく

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

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




■ 仕様概要


次のような2つの設定ファイルを用意します。
 ・条件定義ファイル(ama-if.txt)
 ・設定定義ファイル(ama-then.txt)

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


■条件定義ファイルの概要

条件定義ファイルでは、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]」が条件名であり、その条件式として、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。連続音の場合は「- あ」などになります。
baselyric Lyricのうち「あ」の部分。
prevowel Lyricのうち「-」の部分。

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

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

※ oto.iniを参照し、連続音か単独音かなどを随時に判定しています。
  そのため少々癖のある挙動をします。不審の場合はお尋ねください。


■高さ関係

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

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

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

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

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


■基本的な情報

duration ノートの長さ。四分音符が480で、音符の長さに比例します。
moduration modです。
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 preutteranceの略
ovl voiceoverlapの略
stp startpointの略
dur durationの略
mod modurationの略




■ 注意など


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

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


■必要なファイル

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

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

・破裂音は、先行発声を180減 オーバーラップを30に設定 STPを180増
・母音は、先行発声を250減 オーバーラップを100に設定 STPを250増
・それ以外は、先行発声を150減 オーバーラップを70に設定 STPを150増
・ただし、連続音で先行母音が「-」の場合と、
 先行発声を減らすと数値がマイナスになってしまいそうな場合は、
 何もせずにおく

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


■再配布など

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

自作された条件定義ファイル、設定定義ファイルの扱いは言うまでもなくご自由にどうぞ。
その際、プラグイン本体と一緒にして、一つのプラグインとして配布してもかまいません。
(「先行発声を○○で○○するプラグインです!」など)
ただし、定義ファイルのReadmeに加え、このプラグインのReadmeも同梱してください。
また、定義ファイルまで私が作成に関与したかのような言い方で紹介しないでください。
(実際に関与している場合はもちろんかまいません。)


■更新履歴

2012/06/06
・行頭、行末、等号やコンマの前後、[]の前後において空白やタブは無視されることに。
 ただし「+=」を「+ =」などとすることはできない。
・空行は無視されることに。 
・「;」でコメントが記述できることに。各行で「;」以降は無視されます。
・条件式で「>」「<」も等号として使えるように。意味は「大なり」「小なり」です。

2012/07/08
・既存の等号「>=」「<=」が動かなくなってしまっていたので修正。
・「@」で始まる条件名は、ノートがそこへ該当しても反応しないように。
・lyric、baselyricに対して「+=」は文字列結合を意味するように。
・stp=(preutterance)のような書き方ができるように。
 設定式の右辺において()囲みで変数の名前を書くとその値になります。
 ※計算はできません。計算したい場合は、2行に分けて、
   stp=(preutterance)
   stp-=20
  のようにする必要があります。
・条件式で、next.preutteranceやprev.preutteranceのように
 「next.」「prev.」を頭につけると「次のノートの」や「前のノートの」
 という意味になります。
 設定式の左辺では使えません。右辺で()囲みで使うことはできます。
・preutteranceO、voiceoverlapO、stpOが新設されました。
・preutteranceはpre、voiceoverlapはovlと書いてもよいようになりました。
 preR、preO、ovlR、ovlOも同じです。
・durationはdur、moduratinはmodと略せます。
・必要なファイルがなくてエラーになったときはダイアログを出すように。
・readmeを全面的にリライト。再配布のついてのコメントを追加。



Reply · Report Post