ドライバマクロ
ドライバ本体が持つマクロ機能で、演奏中に逐次解釈します。文字変数のように任意のMMLをメモリに登録しておくことができ、登録したマクロは曲の中で何度でも使えますので、データの省サイズ化に活用できます。
使用方法
[書式(行頭から)] !<str> 登録したいMML (OPM用) ?<str> 登録したいMML (PSG用)
<str>にはマクロ名が入ります。最大255文字で、任意の数字とアルファベットが使用可能です。大文字と小文字は区別され、別のマクロとして扱われます。定義されていないマクロを使用するとエラーが発生します。
[例] !Melo l8c4de fgab >c1 A !Melo ;トラックAで l8c4defgab>c1 が演奏される A !melo ;エラー (大文字と小文字が区別されるため)
リピート制御コマンドは、一つのドライバマクロ内で完結している必要があります。ドライバマクロの中と外をまたぐような指定はできません。
無限ループポイントは設定できません。
ドライバマクロ内から別のドライバマクロを呼び出すことはできません。
OPM/PSGトラックのデフォルト音長やオクターブ、音量などの設定は、ドライバマクロ内には引き継がれません。ドライバマクロ内とOPM/PSGトラックとの値は相互に影響せず、すべて初期値となります。lコマンド、vコマンド、Vコマンド、VOPコマンド、oコマンド、<コマンド、>コマンドを使う際はご注意ください。
[例] !B @0c8 !S @1b8 !T @2aaaa !X @3g2 A !B:r8!S:r8!B!B!S!B ;@0c8r8@1b8r8@0c8@0c8@1b8@0c8 相当 A !B4 !S4 !B8 !B8 !S8 !B8 ;エラー(「B4」や「S4」というマクロが登録されていないため) B l16aaa8[!T]a8aa ;l16aaa8[@2aaaa]a8aa ではなく l16aaa8[l4@2aaaa]l16a8aa 相当 C o5!X d4a4 ;o5@3g2d4a4 ではなく o4@3g2o5d4a4 相当
OPMとPSGでマクロ名は共用しますので、被らないように命名してください。たとえば「!hoge」と「?hoge」を同時に定義することはできません。
[例] ?FUGA cde 1 ?FUGA ;トラック1で cde が演奏される A ?FUGA ;エラー (OPMトラックでPSG用マクロを呼び出しているため)
マクロに登録するMMLを複数行にまたがって記述したい場合は、「{」 と 「}」 で括ってください。「{ 〜 }」 の中は改行可能エリアとなります。
[例] !hoge { v15 l8 o4 cdefgab>c^1 }
MML中では、マクロ名に使えない文字の直前までをマクロ名と認識します。このため、マクロ名とMMLが繋がっている場合、マクロが定義されていないとみなされ、エラーが発生することがあります。これを防ぐには半角空白やタブ、コロンなどの区切り記号をマクロ名の後ろに明示的に入れてください。
[例] A !hogea1&a2 ; × マクロ名を「!hogea1」と認識する。 ; エラーが発生する可能性がある。 A !hoge:a1&a2 ; ○ マクロ名を「!hoge」と認識する。 ; 「:」は空白と同じ扱い。