MML Compiler
-------------------------------------------------------------------------------

1. 文法
	下記の構造で記述してください。

	{
		<音色定義データ>
	}
	{
		<ch.1のMML>
	}
	{
		<ch.2のMML>
	}
	{
		<ch.3のMML>
	}

2. コメント
	; から右、行末まではコメントの扱いになります。

3. <音色定義データ>
	３２個の符号付きのデータ
		音量に対する増減値。１個は 1/60秒に対応。
	
	AR
		音のなり始め(KeyOn)からの、音量の増加速度。
		1〜255 で指定。1で超ゆっくり、255でいきなり立ち上がる。

	DR
		ARで最大(255)まで上がった後に SL まで下がるまでの減衰速度。

	SL
		減衰速度が変化する変化点の音量(0〜255)。

	SR
		減衰して SL まで下がった音量が、さらに減衰する減衰速度。

	RR
		音の鳴り終わり(KeyOff)からの減衰速度。

	ビブラート開始までの遅延時間
		1/60秒単位で指定。

	ノイズ周波数
		ノイズを混ぜる場合のノイズ周波数。0 にするとノイズ無し。

	ドラム用基準周波数
		なんだっけ、これ (^^;

	上記を１セットとして、必要な数だけ並べます。上から順に @0, @1, @2 ... と
	番号が振られます。

4. <ch.*のMML>
	c d e f g a b
		ドレミファソラシの音符に対応
		c4    四分音符のド
		d4.   付点四分音符のレ
		b16-  十六分音符のシのフラット
		a16+  十六分音符のラのシャープ

	h i j k m
		ドラムセットの音符に対応

	r
		休符。音符と同じように音長を指定できます。r4. など。

	t<テンポ>
		テンポ指定。例えば 120 にすると 1分間に四分音符が120回鳴るテンポになる。
		どのチャンネルに記述しても、全チャンネルに影響を及ぼします。

	v<音量>
		音量を 0〜15 で指定します。
		PSGに設定される音量は、この音量値を基準に、音色データに基づいて加工された値が
		指定されます。PSGのエンベロープ機能は使いません。

	q<音長比>
		音長を 8等分して、音が鳴り始めて、KeyOffするのが n/8 の位置となる n を指定します。

	l<音長>
		音符に音長指定を省略した場合に適用される音長を指定する。いわゆるデフォルトの音長。

	&
		タイ。前後の音を繋げます。& の前の音が q8 になるだけです。
		C4&C8 は、C4. とほぼ等価です。

	o<オクターブ>
		オクターブを指定します。

	>
		1オクターブ上げます。コンパイラが内部で o<オクターブ> に置き換えます。

	<
		1オクターブ下げます。コンパイラが内部で o<オクターブ> に置き換えます。

	$
		反復開始位置を記憶します。
		cdefg$ab とすると、cdefgababab .... と繰り返します。

	@<音色番号>
		指定の音色に切り替えます。

	@h<音色番号> @i<音色番号> @j<音色番号> @k<音色番号> @m<音色番号>
		ドラムセットの音色番号を指定します。
		@h3l4hhhh で、音色３をドラムセットとして４回鳴らします。

5. 権利関係
	mc.exe でコンパイルした結果のファイルは、コンパイル元となった MML の各種権利を
	引き継ぎます。

-------------------------------------------------------------------------------
2020年7月15日  HRA!
	初版。10年くらい前に作ったプログラムなので、思い出しながら記述。
	誤記があるかもしれません。
