Yggdrasil Seeds : Software Works : DualMusik : TIPS1[基本中の基本]
PV[1156173]

基本中の基本


音階

とりあえず、以下2行のMMLを適当なテクストファイルに書き出してみましょう。

#0 :0 V127 U100
CDEFGAB<C

できたら、コンパイルします。保存したテクストファイルをdumcw.exeにドロップし、ここで生成されたdumファイルをdum2mid.exeにドロップするとMIDIシーケンスが生成されます。
このMIDIシーケンスを再生すると、ドレミファソラシド…という具合に演奏されます。

このMMLでは1行目が初期設定(ここでは説明略)で、2行目が再生する音階群となっています。C がド, D がレ, E がミ…といった感じで順に再生していき、最後の C を演奏して終了します。< は1オクターヴ上げるコマンドで、これがない場合は最初の C と同じ高さの音階が再生されることになります。
< の代わりに >を書くと、逆に1オクターヴ下がって最初の C より低い C が再生されます。
(< と > の効果は逆にすることもできます)

また、オクターヴは番号で直接指定することもできます。

#0 :0 V127 U100
O3 CDEFGAB<C

このMMLでは、さっきより1オクターヴ低い"ドレミファソラシド"が再生されます。
O コマンドはオクターヴを番号で指定するもので、ディフォルト値は 4 となっています。

音長

MIDIシーケンスにおいては、音階だけでなく音長も最重要事項です。

#0 :0 V127 U100
C8D8E8F8G8F8E8D8C1

このMMLでは音符コマンドの後に数字が書いてあります。この数字は何分音符かを表すもので、C8 はCの8分音符, C1 はCの1分音符(全音符ではない)を意味します。
また、音長指定はある程度省略することもできます。

#0 :0 V127 U100
L8 CDEFGFEDC1

L コマンドは、音長が省略された音符コマンドで使われる長さを事前に決めておくものです。
ここでは、後続の CDEFGFED を8分音符で再生することになります。

この他、音長には特殊な指定法もあります。

#0 :0 V127 U100 %192
L8. CDEFGFEDC1
L*24 CDEFGFEDC1
L8^32 CDEFGFEDC1
L8^-32 CDEFGFEDC1
L8. L^..^*-5 CDEFGFEDC1

2行目の L8. は、付点8分音符の長さになります。音長指定の数値の直後に . を付けると、音長を1.5倍します。(この後 . を追加することでさらに1.5倍します)
3行目の L*24 は絶対音長指定( L の直後に * を付加)で、1分音符の分解能( % コマンドで指定)が192のときは192/24=8で8分音符の長さと等しくなります。
4行目の L8^32 は、L8 の長さに L32 の長さを加算します。
5行目の L8^-32 は、同様の解釈で L8 の長さから L32 の長さを減算します。
6行目はちょっと複雑な例。まず L8. で長さを仮定義しています。これは次回の L コマンドでパラメータの数値を省略したときに採用される値を決めるものです。これにより、次の L^..^*-5 で設定される値は絶対音長にして 36+(36*1.5*1.5)+(36-5)=148 となります。

また、音長指定で注意しなければならないことがあります。

#0 :0 V127 U100 %192
L20 CDEFG

1分音符の分解能192での L20 は絶対音長でいうと 9.6 となりますが、端数の 0.6 は仕様上切り捨てられてしまいます。これにより再生する長さが短くなってしまい、シーケンスがズレてしまうという不具合が発生します。これを回避するには、音長が割り切れるように分解能を設定するといいでしょう。
他にも、以下のように絶対音長指定で余りを微調整する方法もあります。

#0 :0 V127 U100 %192
L20 C^*1DE^*1FG^*1

休符

休符は、Rコマンドで指定します。

#0 :0 V127 U100
L8 CRDRERFRGRFRERDRC1

音符と同様の解釈で、ここでは各音符の間に8分休符を挟んでいます。

複数トラック

シーケンスに複数のパートを持たせたい場合は、トラックを分けてMMLを記述することで表現します。

#0 :0 V127 U100
L8 CDEFGFEDC1
#1 :1 V127 U100
L8 EFGABAGFE1

# コマンドはトラック切替指定で、別の番号にするとMMLを書き込むトラックを変えることができます。番号は0~255が有効で、最大256トラックを同時に進行させることができます。
: コマンドは使用するMIDIチャネルを決めるものです。複数のトラックで同じMIDIチャネルを使うこともできますが、MIDIの仕様によりいくらかの機能が制限されるので、普通は別のMIDIチャネルを割り当てておくとよいでしょう。

また、# コマンドは複数の値を指定でき、同じMMLをまとめて複数のトラックに書き込むこともできます。

#0 :0   #1 :1
#0,1 V127 U100 L8
#0 CDEFGFEDC1
#1 EFGABAGFE1

1つのコマンドに複数の値を記述する場合、普通は , で区切って追記していきます。このルールは、ほとんどのコマンドで共通です。

コメント

MML中に任意の文字列を埋め込むことができます。

/サンプルデータ
#0 :0 V127 U100
L8 CDEFGFEDC1

/ コマンドはコメント指定で、この時点から行末までをMMLとは無関係な文字列として無視します。メモ代わりにどうぞ。
また、この性質を利用してMMLの一部を無効にすることもできます。

/サンプルデータ
#0 :0 V127 U100
L8 CDEFG/FEDC1    ← FEDC1 の部分はコメント扱いとなるので再生されない

以下もコメントですが、こちらはDUMに書き出されます。

;サンプルデータ
#0 :0 V127 U100
L8 CDEFGFEDC1

; コマンドでDUMに書き出された文字列は、SMFにエクスポートするときにも反映されます。
これはメタイヴェントの1番として書き出されますが、255バイトを超えるときは255バイト毎に分割されます。
なお、; コマンド自体にも4095バイトの長さ制限があり、超えた場合は同様にして分割されます。

その他の基本的なコマンド

MIDIシーケンスを組むための基本的なコマンドです。
最低限の部分しか書いてません。詳しくはリファレンス参照。
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 と等価)

[表紙] [前] [次]