Navigation Log - なびろぐ -
1999/03/01

...X680x0 spirit inside...

この日記はGNSで生成しています。
この日記の画像はOPTPiX webDesigner Ver.4で生成しています。

hauN
Go amazon.co.jp

■ご注文リストから■ [一覧]
■Amazonギフト券■ [購入]
コクヨ クリヤーブック 固定式 青 A4縦 40枚 ラ-B40B []
コクヨ クリヤーブッ...
Amazonほしい物リスト


1999/03/01 (月)

MML

_ ベロシティ先行指定はZ-MUSIC初期からあったはず。便利なんですけど、なぜかSPICEには採用しなかったな・・・なぜだろう?

_ SPICEを設計した頃のMMLってある意味「後ろ向き」で、あまり書式が変わってしまうと使ってもらえない。コンパイラも単純でシーケンシャルなものを実装するくらいで必要十分だった気がします。結果現在のような状態に。

_ トラック内トラックってのはおもしろい概念かも。今までのMMLコンパイラのようなシーケンシャルでなく、再帰的な処理構造が必要になるっつー点で、MMLコンパイラプログラマにとっては新しい概念と技術の導入が要求されますね。

_ ・・・構造を考えてみよう。

  1. 親コンテキストへのポインタpcontextを引数と呼び出される。
  2. トラック構造体trkを作る。trkはトラックバッファt[]を持つ。
  3. トラック番号t_noを1に。
  4. コンパイル処理。t[t_no]がなければ作り、そこへどんどん記録。
  5. {なら自分自身を再帰呼び出しして、得られたtrk_childへのポインタを持ったmix命令をt[t_no]に記録。
  6. }までコンパイル処理を続行。
  7. 各t[]を発声タイミングを合わせてミキシングし、t[1]へ統合する。
  8. trkへのポインタを返す。

こんな感じか。いや待てよ、いちばん根っこではミキシング処理をしないほうがいいかもしれない・・・というか選択可能(ミキシングすると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}

こんなのもできる。もちろん元ネタの葵萌えサンプルも意図通り行けるはず。

_ というわけで、この技は(次に新しいシーケンスシステムを作るときに)ネタとして頂いてしまおうかと・・・いーすか?


[URL] [View Log()] [Trackback]
Name: Comment:



メールはこちらへ...[後藤浩昭 / Hiroaki GOTO / GORRY / gorry@hauN.org]

「表紙へ戻る」
「会議室」 「最新版」 「なびろぐindex」 「GNSソースを読む」