@rp:無限リピートエントリcegec
@rp
dfafd dfafd;
上記の場合、「dfafd dfafd」が無限リピート演奏されます。
無限リピートエントリを登録します。
このコマンドを記述したトラックでは、演奏がトラック終端に達したら、@rp を記述した時点に演奏ポイントが無条件ジャンプします。そのため、結果的に無限リピートになります。
無限リピートコマンドを使用する場合は、対象となるトラック内で「1回だけ」記述してください。
無限リピートコマンドは、テンポコマンドの使用状況と大きく関わっています。
理由は、各トラック間でのテンポ同期を確保するためです。
テンポ同期の都合、無限リピートの処理モードを、テンポコマンドの配置の仕方によって変えています。
このモードは、テンポコマンドが、演奏先頭(0 tick時点)にのみ存在する場合に該当します。
規制緩和モード の場合の @rp 使用条件:各トラックの tickカウント合計の状況は問われません。
@rp コマンドは、どのトラックでも自由な時点に配置できます。
以上により、無限リピートの自由度が高まりますが、音楽的におかしなリピートも可能になるため、ユーザー側でリピート状況を確認する必要があります。
このモードは、テンポコマンドが、演奏先頭だけでなく、それ以外の時点にも存在する場合に該当します。
厳密モードでは、テンポ同期を厳守する目的で、無限リピートに関する制限を厳しくしています。
厳密モード の場合の @rp 使用条件:無限リピート対象の、全てのトラックは、演奏tickカウント数の合計が一致している必要があります。
無限リピート対象の、全てのトラックにおいて、@rp を配置する時点(演奏開始からのtickカウント数)が一致している必要があります。
(※1)無限リピートしないトラックが混在する場合、無限リピートしないトラックの演奏tickカウント数の合計は、無限リピートするトラックのもの以下でなければなりません。
厳密モードによる制限の理由:テンポの変更は、演奏サンプリング周波数(384kHz)に依存した、内部音長である「絶対tickカウント数」の設定変更により実装されています。絶対tickカウント数の操作は、テンポ計算にのみ任されているので、ユーザーは普段意識する必要はありません。
複数回テンポ変更する無限リピート対象トラックで、厳密モードによって制限しないと、見かけ上テンポのつじつまを合わせたとしても、使用する音長の種類と個数の違いによって、簡単に内部音長である絶対tickカウント数が合わなくなって、テンポを同期させることができなくなります。(システム都合のテンポ非同期が発生します)
そのため、厳密モードでは、無限リピートで何周したとしても同期するよう、テンポ変更のタイミング、無限リピートエントリの位置、トラックの演奏tickカウント数の合計を合わせることを条件にしています。
(※1)の制限は、2周目以降のリピートに対応する同期が、無限リピートしないトラックに対して行えないために設けています。
@rpの優先配置@rp コマンドは、MMLコンパイル時、同時点(演奏開始からの累積tickカウント数が同じ時点)に存在する他のコマンドより前に配置されます。
@@"pls" v8 cdefg @@"saw" v12 @rp gfedc;
例えば、上記の記述の場合、見た目では
@@"saw" v12
が無限リピート開始時に実行されないように見えます。しかし、内部的には次のようになります。
@@"pls" v8 cdefg @rp @@"saw" v12 gfedc;
上記のように、@rp が同時点コマンド群の先頭に自動配置されるため、同時点のコマンドは
すべて無限リピートエントリ時に実行の対象になります。
この自動配置の目的は、テンポコマンドの実行もれ防止です。@rp と同時点にテンポコマンドが存在した場合の、実行もれを防止することで、テンポ同期が取れない状況が発生しないようにしています。
無限リピート開始時点において、MML擬似コマンドによる演奏設定は、常に無限リピート初回演奏の条件での適用になります。
MML擬似コマンドとは、例えば l4 などです。
l4 cdef @rp gab>c l1;
上記の場合、リピート始めの g は、常に l4 で演奏されてしまいます。
これは、MMLコンパイル時点で g が l4 でコンパイルされて音長が確定していて、トラック終端に l1 指定があったとしても、無限リピートでジャンプした先にある、既に生成済みの音符の音長に作用できないためです。
同様に、他のMML擬似コマンドも作用できない性質を持っています。これは無限リピート機能特有の問題です。
v13 l4 cdef @rp gab>c (2;
上記の場合、相対ボリューム(小かっこ)は、vコマンドの固定値に変換されているため、トラック終端に置いて無限リピートする場合、置いた1回分のみ有効です。
この例では記述上、繰り返すたびにボリュームが小さくなっていくかのように見えますが、実際には、次のように記述したのと同様の動作になります。
v13 l4 cdef @rp gab>c v11;
o < >nsこれら音程関連のコマンドは、音符生成時に参照され、音程番号に変換されて演奏データになるため、トラック終端に置いても、音長指定同様、リピート開始時の音符に作用できません。
q の分母指定@w の分母指定これらの分母指定も、トラック終端で分母を設定変更しても無限リピート開始時に作用できません。