MML ファイルの基本構文¶
RetroFM-Music Editor が読み込む MML は、UTF-8 のテキストファイル (拡張子 .mml) です。
このリファレンスは、標準の RetroFMEditor独自方言 を説明しています。MXDRV (X68000) 方言と #dual 方言も読み込めますが、書き方が異なります (MXDRV 方言と #dual)。
方言の自動判別¶
ファイルの内容から、次の順で方言が自動的に決まります。
| 順 | 条件 | 方言 |
|---|---|---|
| 1 | 行頭に #dual がある |
#dual 方言 |
| 2 | @n = { の音色ブロックがある。または CHn: がなく、行頭が A〜H / P〜W のトラック行 |
MXDRV 方言 |
| 3 | 上記以外 | RetroFMEditor独自方言 |
ファイルの構造¶
MML は行単位に読まれます。
| 行 | 意味 |
|---|---|
; から行末まで |
コメント。ただし、決まった書式のコメントは曲全体の設定になります (曲ヘッダディレクティブ) |
#pcmfile <名前> |
PCM (PDX) のサンプルバンクを宣言します (PCM) |
CH<N>: |
チャンネル N (0 から始まる) の演奏を書き始めます。次の CH の行までが、そのチャンネルの内容です |
CHP<1-8>: |
PCM チャンネルを書き始めます (PCM) |
CHW<1-5>: |
SCC チャンネルを書き始めます (音源とチャンネル) |
チャンネルの本文は、空白で区切ったトークンの並びです。[...] は、中に空白があっても 1 つのトークンになります。SCC は ; chip=all と CHW1:〜CHW5: を使います。; wave_NN= で32個の符号付き8bit値 (-128〜127) を定義し、[WAVE N] でチャンネルの波形RAMへ書き込みます。
; chip=all
; opm_patch_01: 7 0 | 31 0 0 15 0 127 0 1 0 0 0 | ... (4 オペレータ分)
; role=OPM_0 hw=OPM
CH3: @1 p3 v13 o5 L8 [LOOP 0] c e g o> c o< [LEND]
同じチャンネルの内容は、CH3: の行を何度も書いて、続きを足せます。長い曲は、行を分けて書いてください。
SCC の波形と演奏の例です。各バンク定義には、符号付きサンプルをちょうど32個書きます。
; chip=all
; wave_00=127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,-128,-128,-128,-128,-128,-128,-128,-128,-128,-128,-128,-128,-128,-128,-128,-128
; role=SCC_0 hw=SCC
CHW1: [WAVE 0] v12 o4 L8 c e g
コマンドの種類¶
| 形 | 例 | 説明 |
|---|---|---|
| 1 文字 + 数字 | v13 o4 @1 p3 D5 E3 M2 |
値を設定します |
| 1 文字 | c d r & |
音符・休符・スラー |
o + 記号 |
o> o< |
オクターブの上げ下げ |
L + 分母 |
L8 L4. |
音長 |
l(数値) |
l(23) |
音長 (tick で直接指定) |
[...] |
[LOOP 2] [RK b] [PORT 76] |
角括弧で囲む拡張コマンド |
大文字と小文字は、ほとんどのコマンドで区別されません。ただし、L (音長) は大文字だけ です。また、d や e の直後に数字が続くと、音符ではなく D<N> (デチューン)・E<N> (エンベロープ) として読まれるので、書き分けに注意してください (音符・休符・オクターブ・音長)。
最小の例¶
; chip=all
; tempo=75
; opm_patch_01: 7 0 | 31 0 0 15 0 127 0 1 0 0 0 | 31 0 0 15 0 127 0 1 0 0 0 | 31 0 0 15 0 127 0 1 0 0 0 | 31 0 0 15 0 0 0 1 0 3 1
; role=OPM_0 hw=OPM
CH3: @1 p3 v13 o5 L8 [LOOP 0] c e g o> c o< [LEND]
; role=FM_0 hw=OPLL
CH4: @1 v12 o3 L4 [LOOP 0] c g a f [LEND]