コンテンツにスキップ

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]