できたら、コンパイルします。保存したテクストファイルをdumcw.exeにドロップし、ここで生成されたdumファイルをdum2mid.exeにドロップするとMIDIシーケンスが生成されます。#0 :0 V127 U100 CDEFGAB<C
このMMLでは、さっきより1オクターヴ低い"ドレミファソラシド"が再生されます。#0 :0 V127 U100 O3 CDEFGAB<C
このMMLでは音符コマンドの後に数字が書いてあります。この数字は何分音符かを表すもので、C8 はCの8分音符, C1 はCの1分音符(全音符ではない)を意味します。#0 :0 V127 U100 C8D8E8F8G8F8E8D8C1
L コマンドは、音長が省略された音符コマンドで使われる長さを事前に決めておくものです。#0 :0 V127 U100 L8 CDEFGFEDC1
2行目の L8. は、付点8分音符の長さになります。音長指定の数値の直後に . を付けると、音長を1.5倍します。(この後 . を追加することでさらに1.5倍します)#0 :0 V127 U100 %192 L8. CDEFGFEDC1 L*24 CDEFGFEDC1 L8^32 CDEFGFEDC1 L8^-32 CDEFGFEDC1 L8. L^..^*-5 CDEFGFEDC1
1分音符の分解能192での L20 は絶対音長でいうと 9.6 となりますが、端数の 0.6 は仕様上切り捨てられてしまいます。これにより再生する長さが短くなってしまい、シーケンスがズレてしまうという不具合が発生します。これを回避するには、音長が割り切れるように分解能を設定するといいでしょう。#0 :0 V127 U100 %192 L20 CDEFG
#0 :0 V127 U100 %192 L20 C^*1DE^*1FG^*1
音符と同様の解釈で、ここでは各音符の間に8分休符を挟んでいます。#0 :0 V127 U100 L8 CRDRERFRGRFRERDRC1
# コマンドはトラック切替指定で、別の番号にするとMMLを書き込むトラックを変えることができます。番号は0~255が有効で、最大256トラックを同時に進行させることができます。#0 :0 V127 U100 L8 CDEFGFEDC1 #1 :1 V127 U100 L8 EFGABAGFE1
1つのコマンドに複数の値を記述する場合、普通は , で区切って追記していきます。このルールは、ほとんどのコマンドで共通です。#0 :0 #1 :1 #0,1 V127 U100 L8 #0 CDEFGFEDC1 #1 EFGABAGFE1
/ コマンドはコメント指定で、この時点から行末までをMMLとは無関係な文字列として無視します。メモ代わりにどうぞ。/サンプルデータ #0 :0 V127 U100 L8 CDEFGFEDC1
以下もコメントですが、こちらはDUMに書き出されます。/サンプルデータ #0 :0 V127 U100 L8 CDEFG/FEDC1 ← FEDC1 の部分はコメント扱いとなるので再生されない
; コマンドでDUMに書き出された文字列は、SMFにエクスポートするときにも反映されます。;サンプルデータ #0 :0 V127 U100 L8 CDEFGFEDC1
T | テンポ | 正の数(小数使用可)を続けて書く。 1分当たりの4分音符数に相当する速さに設定する。 |
@ | プログラムチェンジ | 要するに音色,1~128を続けて書く。 GMの場合、@1でピアノ,@49でストリングス,@74でフルートといった感じ。 |
U | ヴェロシティ | 1~127を続けて書く。 音符の強さを事前に決めておくために使う。 |
V | ヴォリウム | 0~127を続けて書く。 音の大きさを設定する。 |
Y | コントロールチェンジ | 0~127を続けて書いた後 , を書き、さらに0~127を続けて書く。 MIDIにコントロールチェンジを送信する。1番目の値はコントロール番号で、2番目の値が設定値。 (Y7,127 は V127 と等価) |