シーケンス - 特殊
@m1on @m1off
SCCチャンネルで特殊モードを設定します。@m1onは周波数を書き込んだときに、波形の頭から再生するモードになります。@m1offで通常モードになります。
周波数を書き込んだ時に位相がリセットされるので、ピッチエンベロープを使用すると、まともな音になりません。
@m2on @m2off
SCCチャンネルで特殊モードを設定します。@m2onは@seで波形を切り換えたときに、波形を頭から再生します。@m2offで通常モードになります。
@m3on @m3off
音を発音する時に波形を頭から再生します。@m3offで通常モードになります。
@m1onと違い1音単位なので、ピッチエンベロープを掛けることができます。
@pcm2on @pcm2off
s5= @w100 o8 v15 bagfe
s4でのみ使用可能な特殊コマンドです。@pcm2onで同じPCMをs4とs5で同時に発音し、音量を大きくします。メガROMSCCの1ch分音色データレジスタが少ない制限を逆手に取り、同時発音するので全くずれること無く発音します。@pcm2offで解除します。
このモードに入ると、s5は基本的にコントロールできず、s4に従います。s5で音量だけはコントロール可能でs4でv15,s5でv15とすると出力されるPCMのダイナミックレンジがv15の2倍になります。ただし、聴感上は少し大きくなった程度にしか感じません。
基本的にs4とs5は同じ演奏をするMMLを書きます。ボリュームだけは組み合わせて細やかに調整することが可能です。
@vadjon @vadjoff
ADPCMの音量は256段階もありますが、音量カーブがリニアなので聴感上は音量が大きいほど細かく、小さいほど荒く感じます。
例えば、@va100=[ @255,1 : -1,1]のボリュームエンベロープをv255で実行したときはなかなか減衰せず、v32で実行したときはあっという間に消音する事になります。
そのままでは、ボリュームエンベロープを適用しにくいので、PSGの音量カーブの様に、値が大きいほど増減幅が大きく、小さいほど細かくなる様に補正をドライバ側で掛けます。
ドライバ側で掛けるので複雑な計算ではなく、大雑把で簡単な計算ですが、これにより、ある程度ボリュームエンベロープが実用的になります。
補正が掛かるのは、@vaの相対指定のみであり、絶対指定やvコマンドには無効です。
@amon @amoff
@amonで振幅変調の深度フラグを1にし、@amoffで0にします。
0=1db,1=4.8dbとなりますが、blueMSXでは再現されません。
@vibon @viboff
@vibonでビブラートの深度フラグを1にし、@viboffで0にします。
0=7セント,1=14セントとなりますが、blueMSXでは再現されません。
; // /* */
//コメント
/*コメント
コメント
*/
コメントコマンドです。;と//はその行の終わりまでコメントとし、/*は*/までコメントとします。
@offsets @offsete
@offsetsでオフセットを開始します。このコマンドの次の音長計算にクロック値を加算します。加算時クロックが0以下や65536以上になるとエラーになります。@offseteでオフセットを終了します。次の音長計算でオフセット分を相殺します。
クロック値の範囲は-32768〜32767。@offseteコマンドとセットにして使用します。
t120@offsets100 cde @offsete f16
とした場合、最初のcにクロック100が加算されます。そして@offseteでf16から100クロック引かれます。しかしt120でf16の場合100クロック引くとマイナスになってしまうのでエラーになります。
%
強制テンポ合わせ、もしくはオフセットコマンドです。クロック値を用いて使用するとオフセットコマンド、単独で使用すると強制テンポ合わせコマンドとして働きます。
強制テンポ合わせコマンドの場合、演奏参加チャンネルの全てがこのコマンドを実行するまで、音を鳴らしながら停止します。必ず全チャンネル、同時に演奏する箇所に挿入して下さい。
オフセットコマンドとして使用する場合、クロック値の範囲は-32768〜32767で、@offsetsとの違いはずれたままでコンパイルがエラーにならない点にあります。
@no @on
@noがコンパイル拒否コマンドで、シーケンスデータのどこかにこのコマンドを書き込むと、コンパイル時そのチャンネルはデータに出力されません。テストで、そのチャンネルを一時的に消したい場合に使います。
内部的にはコンパイルの解釈はされていますので、このコマンドを使用してもコンパイル時間は変わりません。
@onはコンパイル許可コマンドで、@noの反対の動作を行います。
1チャンネルでもこのコマンドを使用すると、このコマンドを使用したチャンネル以外、@no使用状態になります。
例えばs1,s3で@onを使用すると、s1,s3だけがコンパイル対象となります。
@info
コンパイル時にそのコマンドの位置の情報を出力します。出力されるのはクロック地と、パラメータで、パラメータの詳細は音源ごとに異なります。
その地点でのクロック値がでますので、各チャンネルにこのコマンドを書いておけば、クロックの比較、確認ができ入力したMMLがずれていないか等をチェックできます。デバッグ用のコマンドです。
/
マクロコマンドです。マクロ定義名はダブルクォーテーションで囲んだ文字列と、囲んでいない文字列が使用可能です。囲まない場合は、定義名の後ろに空白か行末がくる必要があります。
例:
/m1 /m2 /m3
/"m1"/"m2"/"m3"
また、囲まない場合マクロ定義名に大文字は指定できません。それはコンパイル時に小文字として処理されるからで、大文字として解釈したい場合はダブルクォーテーションで囲む必要があります。
例えばマクロ"ABC"が定義されているとして、/ABCは/abcと解釈され、マクロ"abc"は定義されていないのでエラーとなります。/"ABC"とすると回避できます。
マクロ定義名には$chという変数が使えます。これは解析時にそのチャンネル名が入るという物で、p1=/"$chmacro"はp1=/"p1macro"として、s1=/"$chmacro"はs1=/"s1macro"として扱われます。
共通の記述をしていても、チャンネルによって呼び出すマクロを変えたい場合に使えます。
@epton @eptoff
他音源専用命令を実行した場合、通常はエラーになりますが、@eptonとすると他音源専用命令は無視されることになります。デフォルトはoff。
例:f1=@va100 @v100 cde
[@eptoff] OPLLチャンネルで@vaは使えないのでエラー発生。
[@epton] @va100を無視し@v100以降は通常通りコンパイルされる。
コンパイラは無視する命令でも解釈しながらコンパイルしていて、定義名が必要なコマンドやq2定義名を指定できないコマンドで定義名を書かなかったりq2定義名を書いたりした場合にはエラーを出します。無視する場合でも次のMMLコマンドを探す為には、定義名込みで無視する必要があり、その定義名が無かったり、不必要な定義名が有ったりした場合は次のMMLコマンドを探せ無いのでエラーになります。
ただし詳細には解釈せず、その定義名を定義していない場合等にはエラーを出しません。
@p{} @sm{} @ss{} @f{} @y{} @ad{}
限定コンパイルを行います。{}で括った内容は該当チャンネルでのみ適用され、他のチャンネルでは無視されます。{}で括れるのは1行以内に限定されます。該当チャンネルは
- @p{}……p1~p3
- @sm{}……s1~s5
- @ss{}……s6~s10
- @f{}……f1~f9
- @y{}……y1~f9
- @ad{}……ad
となっています。
例:
@p{cde}@f{fga}c
PSGチャンネルではcdecとコンパイルされ、OPLLチャンネルではfgacとコンパイルされ、その他のチャンネルではcとだけコンパイルされる。