この日記はGNSで生成しています。 |
_ ベロシティ先行指定はZ-MUSIC初期からあったはず。便利なんですけど、なぜかSPICEには採用しなかったな・・・なぜだろう?
_ SPICEを設計した頃のMMLってある意味「後ろ向き」で、あまり書式が変わってしまうと使ってもらえない。コンパイラも単純でシーケンシャルなものを実装するくらいで必要十分だった気がします。結果現在のような状態に。
_ トラック内トラックってのはおもしろい概念かも。今までのMMLコンパイラのようなシーケンシャルでなく、再帰的な処理構造が必要になるっつー点で、MMLコンパイラプログラマにとっては新しい概念と技術の導入が要求されますね。
_ ・・・構造を考えてみよう。
{
なら自分自身を再帰呼び出しして、得られたtrk_childへのポインタを持ったmix命令をt[t_no]に記録。
}
までコンパイル処理を続行。
こんな感じか。いや待てよ、いちばん根っこではミキシング処理をしないほうがいいかもしれない・・・というか選択可能(ミキシングするとformat0、しないとformat1のSMFを吐く)にすべきか。
_ で、最後に「ランニングステータス処理を施した新しいt[]を各トラックの最終出力結果として吐き出す」ということになるわけだ。
_ あ、この方法だとtrkに名前を与えられるようにして、その名前による定義済みtrkへのポインタを持ったmix命令を吐き出す・・・とすると、パート繰り返しの省略記述やリズムパターン的記法ができてしまうではないか。わはは、なかなかsmartだ。
_ この記法だと、「トラック番号も命令である」・・・すなわち命令解析フェーズで「数値」が来たら、それはトラック番号の切り替えを示す「命令」だということになる。つまり、トラック番号を書かなくても文法的にMMLを成立させることが可能になる(初期化時にトラック番号を1とする)。だから、
cdefg
だけで立派に「1トラックのMML」として成立することになる。
1 c2 2 e2 3 g2 1 <b2> 2 d2 3 g2 1 c2 2 f2 3 a2 1 c2 2 e2 3 g2
これもvalidだし、
{1 c4 2 r4e4e4 3 r4g4g4} {1 <b4> 2 r4d4d4 3 r4g4g4} {1 c4 2 r4f4f4 3 r4a4a4} {1 c4 2 r4e4e4 3 r4g4g4}
こんなのもできる。もちろん元ネタの葵萌えサンプルも意図通り行けるはず。
_ というわけで、この技は(次に新しいシーケンスシステムを作るときに)ネタとして頂いてしまおうかと・・・いーすか?
メールはこちらへ...[後藤浩昭 / Hiroaki GOTO / GORRY / gorry@hauN.org]