音楽には同じパターンが何度も出現することが多々あります。その様なパターンの入力を何度も何度も行うのは単調で苦痛な作業であり、かえって入力ミスも増えます。そこでMuseでは、既に入力したパターンを中括弧{ }でくくって領域を定義し、その領域に任意の名前を付けることで、再度同じパターンを使用したくなった場合に、その名前の入力だけで済ます機構を設けました。この様な機構は一般に“マクロ”と呼ばれています。ここでは、領域を指定するマクロ記述を“定義マクロ”と呼び、それを任意の位置に再現するマクロ記述を“展開マクロ”と呼ぶことにします。それぞれの書式は以下の通りです。
マクロ名は自由な命名が可能です。ただし、スペース・タブ・改行・全角文字・半角カタカナ・半角縦棒|の、キャンセル文字群は無視されます。セミコロン;および感嘆符!は、コメント記述文字として解釈されるので使えません。
マクロは、今まで紹介したあらゆる指定記述とは本質的にレベルが異なり、演奏時の音出しや文字表示を指示するものではありません。あくまでも、定義マクロの領域内に入っている記述が展開マクロの位置に、展開マクロで指定した繰返し回数分、あたかも存在するかのように解釈されるだけです。
一般にマクロというと、定義マクロ部分は実行されず定義に徹するのが普通ですが、Museでは、定義マクロ部分も通常の記述部分と同様に演奏されます。この思想により、一度書いた部分を気軽にマクロ定義でくくっていけます。逆に定義マクロを定義のみとし演奏させたくない場合については、次節で紹介する演奏パターンの部品化を参照して下さい。では講釈はこの位にして、とにかく記述例を示してみることにします。
★クラリネットをこわしちゃった(フランス童謡) %280 \- @K V080 P49 S0 T0 Q00 R40 W0 @M V120 P70 S0 T0 Q10 R60 W0 @N V120 P72 S0 T0 Q20 R60 W0 @Z P1 #K0 o6 v80 #M0 o4 v80 #N0 o4 v120 *TEXT"ここから、冒頭のマクロの定義開始です" $Macro1{ #K0┃'F'1&┃'F' ┃'F'& ┃'F'2._4┃ ┃'F'1&┃'F' ┃'F'& ┃'F'2._4┃ #M0┃f4fff┃fffs┃l2.s4 ┃f2d4_ ┃ ┃f4fff┃fffs┃l2.s4 ┃f2d4_ ┃ #N0┃f4fff┃fffs┃l2.s4 ┃f2d4_ ┃ ┃l4lll┃lllc┃<d2.>c4┃l2f4_ ┃ *TEXT"これは、セーニョ部分のマクロ定義です" $Macro2{ #K0┃'F'1 ┃'D7>>' ┃'Gm7'& ┃'Gm7'2_ ┃ ┃'C7>>'1& ┃'C7>>' ┃'F'& ┃'F'2_ ┃ ┃'F'1& ┃'F'4_2. ┃'F'1& ┃'F'1 ┃ ┃'F'1& ┃'F' ┃'D7>>' ┃'Gm'4'D7>>''Gm'2┃ ┃'C7>>'1& ┃'C7>>'& ┃'C7>>' ┃ #M0┃l2l4.//l8// ┃f+4rmf+ ┃s2s4.//s8//┃s2_ ┃ ┃s4//ss4.//f8┃m4drm ┃f2f4.//f8//┃f2_ ┃ ┃l2.s4 ┃f4___ ┃l2.s4 ┃f4__<d> ┃ ┃l4l8ll4<d> ┃l4l8ll4<d>┃<rd>cl ┃slcc ┃ ┃s4s8ss4c ┃s4s8ss4c ┃<d>cls ┃ #N0┃<d2d4.//d8//┃r4d>cl ┃c2c4.//c8//┃c2_ ┃ ┃c4//cc4.//c8┃<d4>cls ┃l2l4.//l8//┃l2_ ┃ ┃<d2.>c4 ┃l4___ ┃<d2.>c4 ┃l4__<d> ┃ ┃l4l8ll4<d> ┃l4l8ll4<d>┃<rd>cl ┃slcc ┃ ┃s4s8ss4c ┃s4s8ss4c ┃<d>cls ┃ } #K0 ┃'F'2_┃ #M0 ┃f1 ┃ #N0 ┃f1 ┃ } *TEXT"冒頭のマクロを再現します" ${Macro1} *TEXT"マクロを抜けました" #K0┃'F'1&┃'F' ┃'F'& ┃'F' ┃ ┃'F'1&┃'F' ┃'F'& ┃'F' ┃ ┃'F'1&┃'F' ┃'F'& ┃'F' ┃ #M0┃f4fff┃ffff ┃ffff ┃fffs┃ ┃l2.s4┃f2d ┃f4fff ┃ffff┃ ┃f4fff┃fffs ┃l2.s4 ┃f2d ┃ #N0┃f4fff┃ffff ┃ffff ┃fffs┃ ┃l2.s4┃f2d ┃l4lll ┃llll┃ ┃l4lll┃lllc ┃<d2.>c4┃l2f ┃ *TEXT"セーニョに戻ります" ${Macro2} *TEXT"最後に、コーダを演奏します" #K0┃'F'4_'C7>>'_┃'F'__2┃ #M0┃f4//_<d>_ ┃<f>__2┃ #N0┃f4//_<d>_ ┃<f>__2┃ *TEXT""_1`2 $Drum{ ;ドラムのマクロ(次節でも使用します) #Z0 $Set{v60 [o4r+]0 ,4,8,,4,}17 v127_2o3l2 ${Set} v127_2o3d+2 ${Set}25 v127_2o2r+2 ${Set} v127_2o3l+2 ${Set}8 o4 v127 [l+<l>]1 l+,l+ ,, l+l+l+l+ [l+<l>], ${Set}9 v127_2o5s2 ${Set} v127_2o5f+2 ${Set}7 ,4_,_,__2 }
定義マクロの{ }の中には、今まで出てきたあらゆる記述記号を包含できます。また、音符の連結&までを記述しておき、展開マクロの次の音と連結させることも可能です。このようにマクロはかなり柔軟な記述ができるので、楽典に山の様に存在する繰返し記述(反復記号・1カッコ・2カッコ・セーニョ・ダルセーニョ・コーダ・ダカーポ・フィーネ等)を、これ一発で表現できます。また繰返し回数は、特にパーカッションで威力を発揮します。上記例は1小節分のパターンを$Setで定義しておき、あとは必要な小節分回数で展開しています。
定義マクロは入れ子が何階層でも記述できます。例えば、上記の例で、$Macro1の中に、$Macro2が含まれていますし、ドラムのマクロ$Drumの中にも、$Setが含まれています。ただし、定義マクロの中にそれ自身の展開マクロを記述すると無限ループが生成するため、文法エラーとなります。