見やすいMMLを!


  1. TR、TRLコマンド
  2. トラックのタイムポインター
  3. LAST_PTR
  4. 最後に

MMLの欠点の一つに、後から見直して、どこに何が書いてあるか分かり難い、いったいどういう曲構成になっているのか、という俯瞰性の悪さがあげられます。

そこで、"kfm"では、できるだけMMLを見やすく管理するための工夫をしました。
・1つは、ベロシティー(v),ゲートレイト(q),発音タイミングの先行指定コマンド。
・もう1つは、演奏を時系列に見る事が出来るようにするTR,TRLコマンドです。


・TR、TRLコマンド

これら、TRとTRLは、各トラックを横一列に並べて書けるというコマンドです。

TR|TRL("track0","track1","track2","track3","track4","track5","track6", ... )
一番左端から、0番トラック、1番トラック、2番トラック・・・に書き込むということになっています。 "TR"と"TRL"の違いは、MML最後にトラックを同期するかどうかです。

"TR"は、トラックを同期しません。
"TRL"は、すべてのトラックのタイムポインタを1番最後に書き込まれているトラックに揃えます。

この例だと、見づらいのであまり意味がありませんが、例です。

TR("","cdefgagfe","efgab>c<bag","gab>cdedc<b","","ccccccccc")
TRL("o4c1","o5e1","o6g1")

トラックの書き込みに、マクロを使うと、曲の全体が奇麗に見渡せるようになります。マクロは、メモリの許す限りいくらでも定義できるので、有効に利用してください。

_m(A1,"@0l8o4cdefgfed")
_m(B1,"@0l8o4efgabagf")
_m(A2,"eeeeffff")
_m(B2,"ggggaaaa")

TRL("",A1,"",B1,A1)
TRL("",A2,"",B1,A2)

・トラックのタイムポインター

"kfm"は、MMLソースを、はじめの方から順々に読んでいくのですが、その時、各トラックについて、タイムポインターに沿って、イベントを書き込んでいるのです。

基本的に、タイムポインターを進めるのは、ノートオン(c,d,e,f,g,a,b,n)と、休符の時だけです。その他の、REV、M、B・・・というものについては、当然ですがタイムポインターを進めません。

そのタイムポインターを強制的に移動させるのが、"PTR"コマンドです。前回変数の項で触れませんでしたが、変数に" ~n=ptr "という形で、トラックのタイムポインターを、変数に代入します。

@27 ~1=ptr l1o5q16 cd PTR=~1 ef PTR=~1 ga PTR=~1 b>c<

解説をしますと、変数1に現在のタイムポインターを代入します。全音符で"cd"を発音します。再びタイムポインタを変数1の位置(一番始めの時)に戻します。全音符で"ef"と発音します。再びポインタを戻し、"ga"と、発音後、再度ポインタを戻して、"b>c<"と発音するのです。


・LAST_PTR

LAST_PTRは、すべてのトラックのタイムポインタを、その一番大きな数字に同期してしまうコマンドです。MMLでは、トラック毎の同期が面倒だと常々実感していまして、この機能をつけました。

TR("l4ccc","l4eee","l4ggg gag")
TR("e4","g4",">c4<"){タイムポインタがずれている}

r1

LAST_PTR
TR("l4ccc","l4eee","l4ggg gag") LAST_PTR
TR("e4","g4",">c4") LAST_PTR

そして、この"TR"と"LAST_PTR"の機能を足したのが"TRL"なのです。

TRL("l4ccc","l4eee","l4ggg gag")
TRL("e4","g4",">c4")

最後に

古くから、MMLをご存知の方は、もう気付かれていると思いますが、この"TRL"、昔のBASICで言うところの「PLAY」文です。マクロが、BASICの文字列変数(しかも$のついたやつ!)・・・そう考えたら、やはり、"kfm"もまだまだ、以前の環境を再現したに過ぎないのかも。

より良いMML表記方法の追求と、独自の音楽製作環境の再現のため、皆さんのご意見をどんどん取り入れて、"kfm"は、どんどん進化していきたいと思っています。ぜひ、ご意見、ご感想を、 mine@uninet.com.cn クジラ飛行机まで、お送りください!


次のページへ / 目次へ