SMCには、マクロ機能が搭載されています。マクロ機能とは、「特定の文字列に対して名前を付けられる機能」のことで、数個のMMLからなる文字列を短い名前で定義することで入力の簡易化をはかったり、エクスクルーシブパラメータなどの一見わかりにくい文字の羅列に意味のある名前を付けてわかりやすくすることができます。
マクロは、使用前に内容を定義する必要があります。登録には、#DEFINE命令を使用します。以下は、“OCTAVE”という名前のマクロに“CDEFGAB<C>”という内容を定義する例です。
#DEFINE OCTAVE:CDEFGAB<C>
定義したマクロは、任意の場所で使用することができます。使用したい場所で、“${{マクロ名}:}”と書くと、その部分は定義した内容に置き換えられます。以下は、上で定義したマクロを実際に使用する例です。
3 ${OCTAVE:}
マクロ名は、漢字を含む任意の文字列が使用できます。大文字と小文字、全角と半角などをすべて区別します。マクロ内容は、漢字を含む任意の文字列が使用でき、前に定義したマクロも使用できます。
マクロには、引数を与えることができます。マクロ内容に“?1”・“?2”・“?3”…という表記をすることで、その部分には1・2・3…番めの引数をそのまま置くことができます。また、“?0”という表記をすることで、いくつか与えられた引数のすべてをそのまま置くことができます。引数は、マクロ使用時に“${{マクロ名}:{引数1},{引数2},{引数3…}}”という書きかたをすることで与えることができます。引数の区切りとしてではなく、引数として“,”を与えたい場合は、“\,”と表記します。
以下は、引数付きマクロをいくつか使用する例です。
; ローランドGSエクスクルーシブパラメータのマクロを定義 #DEFINE XX:X$F0,$41,$10,$42,$12,@S1,?0,@C1,$F7 ; マスターボリュームのマクロを定義 #DEFINE MASTER-VOLUME:${XX:$40,$00,$04,?1} ; XXマクロでGSリセットを送る 3 ${XX:$40,$00,$7F,$00} ; MASTER-VOLUMEマクロで音量を0にする 3 ${MASTER-VOLUME:0}
特殊なマクロ名として、半角の“G”〜“Z”・“g”〜“z”が用意されています。これらは、使用するときに“${{マクロ名}:}”だけでなく、“$G”〜“$Z”・“$g”〜“$z”という表記ができます。これらはショートカットマクロと呼び、ひんぱんに使用するマクロにこの表記を使うと便利です。
以下は、ショートカットマクロでリズムセクションを書く例です。
; リズム名マクロを定義 #define k:o2c ; Bass drum #define s:o2d ; Snare drum #define l:o2f+ ; Hihat close ; リズムセクション ; 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 3 l16 $k r r r r r r r $k r$k r r r r r 4 l16 r r r r $s r r r r r r r $s r r r 5 l16 $l$l$l$l $l$l$l$l $l$l$l$l $l$l$l$l
SMCは、通常マクロに対して再定義を行なうとwarningメッセージを出力します。これは暗に「SMCはこのようなMMLの使用方法を勧めない」ことを示します。ですが、ショートカットマクロに対しては再定義を行なっても何のメッセージも出力しません。これを利用して、フレーズの繰り返しや複数トラックで同じになるMMLを省略表記するなどの用途にショートカットマクロを使うことができます。
; 輪唱のサンプル #define k:cdef edcr efga gfer 3 $k 4 rrrr rrrr $k #define k:crcr crcr cdef edcr 3 $k rrrr rrrr 4 $k