【第2章】 Museコーディングの手引き

■より高度な記述

  1. 領域を指定し繰返し演奏させる

    音楽には同じパターンが何度も出現することが多々あります。その様なパターンの入力を何度も何度も行うのは単調で苦痛な作業であり、かえって入力ミスも増えます。そこでMuseでは、既に入力したパターンを中括弧{ }でくくって領域を定義し、その領域に任意の名前を付けることで、再度同じパターンを使用したくなった場合に、その名前の入力だけで済ます機構を設けました。この様な機構は一般に“マクロ”と呼ばれています。ここでは、領域を指定するマクロ記述を“定義マクロ”と呼び、それを任意の位置に再現するマクロ記述を“展開マクロ”と呼ぶことにします。それぞれの書式は以下の通りです。

    《定義マクロ》→$マクロ名{‥‥ ここに内容が入る ‥‥}繰返回数
    《展開マクロ》→$ {マクロ名}繰返回数

    マクロ名は自由な命名が可能です。ただし、スペース・タブ・改行・全角文字・半角カタカナ・半角縦棒|の、キャンセル文字群は無視されます。セミコロン;および感嘆符!は、コメント記述文字として解釈されるので使えません。

    マクロは、今まで紹介したあらゆる指定記述とは本質的にレベルが異なり、演奏時の音出しや文字表示を指示するものではありません。あくまでも、定義マクロの領域内に入っている記述が展開マクロの位置に、展開マクロで指定した繰返し回数分、あたかも存在するかのように解釈されるだけです。

    (注)定義マクロで指定される“繰返回数”は、マクロの定義域に含まれません。あくまでも、中括弧{ }で囲まれた内容が、展開マクロ側で利用されます。なお、定義側も展開側も繰返し回数を省略すると1と見なします。

    一般にマクロというと、定義マクロ部分は実行されず定義に徹するのが普通ですが、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が含まれています。ただし、定義マクロの中にそれ自身の展開マクロを記述すると無限ループが生成するため、文法エラーとなります。