MMLリファレンス - onitama/mucom88 GitHub Wiki

MUCOM88 リファレンスマニュアル

■ パート構成

行の先頭に記述することでパート指定となります。
YM2203(OPN)ではA~Fのみ、YM2608(OPNA/サウンドボードII)ではA~K全てのパートが使用可能です。
リズム音源のGパート、およびADPCM音源のKパートでは、他のパートとMMLの記述方法が一部異なります。

トラック 名前 備考
A FM音源1
B FM音源2
C FM音源3
D SSG音源1
E SSG音源2
F SSG音源3
G リズム音源 (サウンドボード2専用)
H FM音源4 ( 〃 )
I FM音源5 ( 〃 )
J FM音源6 ( 〃 )
K ADPCM音源 ( 〃 )

■ 基本的なMMLの書き方

(例)

A t210 @70o3v15l16 [a8>aa<]4

※ 音色番号70、ボリューム15で、ラ8分音符、ラ16分音符、ラ16分音符を4回ループします。

■ MML内部

記述 説明
C 全音符あたりのクロック(分解能)指定 (デフォルトはC128)
t FM音源チップのタイマーBの数値を直接指定するテンポ指定
T テンポ指定 (1分間に演奏する四分音符の数で指定)
@ 音色番号指定(FM/SSG/PCM) SSGの場合はプリセット音色(16種)を使用する
@"..." [FM] 音色名での音色指定
o [FM/SSG] オクターブ絶対指定(o1~o8, デフォルトo6)、[ADPCM] o1が高音でo2,o3となるほど低音になる。
v [FM/SSG] 音量絶対指定(0~15)、[ADPCM] 音量絶対指定(0~255)、[リズム] vn1,n2,n3,n4,n5,n6,n7 (全体,BD,SD,CY,HH,TM,RY)
q 音の長さ全体から、キーオフを早めるタイミングをクロック数で指定。(スタッカート)
p パン (0=発音しない, 1=右, 2=左, 3=中央)リズムパートでの指定時は、bit0~3でリズムの種類(0~5)、bit4,5でパン(1:右, 2:左, 3:中央)を指定する。 ($を指定して16進指定可。例: p$12 = シンバルを右に)
l デフォルト音長指定
cdefgab 音程の指定 (必要に応じて後ろに調号(+がシャープ,-がフラット)、音長数値で指定します。「.」付点も指定可)
r 休符
% 音長をクロック値で指定 ※デフォルト音長指定をクロックで指定したい場合は、前にスペースを入れる。
D ディチューン (-32768~32767) 後ろに+を指定した場合、絶対指定でなく現在値からの相対指定になる
> オクターブ相対指定(上げ)
< オクターブ相対指定(下げ)
) 音量相対指定(上げ) 16段階 )nで一度に変化する量を数値で指定可(ADPCMは256段階)
( 音量相対指定(下げ) 16段階 (nで一度に変化する量を数値で指定可(ADPCMは256段階)
& タイ/レガート (前後の音のキーオフ/キーオンを省略)
^ 音長を繋げる
{…} ポルタメント。{c2b} で c→b へのポルタメント 数字は音長指定。オクターブをまたぐことも可。
[…]n ループ開始位置とループ終了位置。後ろに数字を置くことで繰り返し回数を指定
/ ループ内脱出位置指定 [ ]のループ内に記述すると、最後のループで / の位置でループを脱出します。
L 曲全体のループ位置指定 (各パート1箇所のみ指定可能)
K 移調絶対指定 (-128~+128) ループ内は繰り返し1回のみ
V 音量の相対変化指定(以降のvコマンドの値に増減, コンパイル時に評価)
¥=n1,n2 エコーマクロ。n1(0~9)で直前の音符数, n2(省略可能)でボリュームの下げ数を指定
¥ ¥=n1,n2で設定した音に置き換える
k (v1.7のみ) 移調相対指定
s (v1.7のみ) キーオンのタイミングを変える。クロック単位で指定し、正で遅らせ負の方向で早める(シャッフル)
H [FM] ハードウェアLFO Hn1,n2,n3 n1:速度(0-7),n2:PMS(0-7),n3:AMS(0-3)
R [FM/SSG] リバーブ Rn で音量の加減値を指定 (nは負の値も指定可) キーオフ時、キーオフする代わりに現在の音量の約1/3に設定して発音を続ける。(FMとSSGでは音量計算が異なります)
RF [FM/SSG] リバーブ ON/OFF (0=off 1=on)
Rm [FM] リバーブの効果のかかる部分の指定(0=続く休符も含める 1=qで切られた部分のみ)
M ソフトウェアLFO (Mn1,n2,n3,n4) n1:delay n2:クロック単位 n3:振幅 n4:変化の回数)
MF ソフトウェアLFO ON/OFF (0=off 1=on)
MW ソフトウェアLFOのディレイ(n1)だけを設定
MC ソフトウェアLFOのクロック単位(n2)だけを設定
ML ソフトウェアLFOの振幅(n3)だけを設定
MD ソフトウェアLFOの変化の回数(n4)だけを設定
S [FM3] 効果音モードのスロットディチューン (Sn1,n2,n3,n4) n1=OP4 n2=OP3 n3=OP1 n4=OP2のディチューン順(0~255)
E [SSG] ソフトウェアエンベロープ(En1,n2,n3,n4,n5,n6) AL,AR,DR,SL,SR,RR
P [SSG] ミキサモード Pn (0:発音しない 1:トーン 2:ノイズ 3:トーン+ノイズ)
w [SSG] ノイズ周波数 (0~31)
s [SSG] SSGハードウェアエンベロープ・波形指定 (v1.5のみ)
m [SSG] SSGハードウェアエンベロープ・周期指定 (v1.5のみ)
y レジスタ直接書き込み(yn1,n2) n1=レジスタ番号 n2=データ
yDM [FM] DT/ML直接指定 yDM,n1,n2 n1=スロット番号 n2=データ
yTL [FM] TL直接指定 yTL,n1,n2 n1=スロット番号 n2=データ
yKA [FM] KS/AR直接指定 yKA,n1,n2 n1=スロット番号 n2=データ
yDR [FM] DR直接指定 yDR,n1,n2 n1=スロット番号 n2=データ
ySR [FM] SR直接指定 ySR,n1,n2 n1=スロット番号 n2=データ
ySL [FM] SL/RR直接指定 ySL,n1,n2 n1=スロット番号 n2=データ
ySE [FM] SSGEG直接指定 ySE,n1,n2 n1=スロット番号 n2=データ
vm [ADPCM] PCMボリュームモード(vmn で n を音量の補正値としてサウンドドライバ側で加算する)
* マクロ展開
; これ以降行末までコメント
: これ以降コンパイルを行なわない
! このパートのこれ以降を全て休符とする(発音しない)
J ジャンプコマンド(この位置から演奏開始)
| 何もしない スペースと同意 (視認性向上用の区切り)

※Rコマンド補足、FMの場合:リバーブ時の音量=int((現在の音量+リバーブ値+4)/2)-4、SSGの場合:リバーブ時の音量=int((現在の音量+リバーブ値)/2)

■ 残念ながらドライバに実装されなかったもしくは無くなったMML(おまけ)

記述 内容 備考
MT [FM] ソフトウェアLFOをTLに適用 MTn1,n2 で指定 ※ドライバで正しく実装されていないため使用できません。
@n1= [SSG] 音色番号の登録 @n1=n2,n3,n4,n5,n6,n7 ※ドライバ側が実装されていないため使用できません。

■ FM音源音色定義

※音色パラメータの区切りは数字以外ならばなんでも使用できます。 ※パラメータは$を付けることで16進数での指定が可能です。

・設定方法その1

最初の行に@(音色番号)、 (最初に空白を必ず2文字以上入れる必要があります) 次の行にFB,AL、
その次の4行に9つのパラメータを並べます。
パラメータの間にはスペースを入れても構いません。

  @(音色番号)
FB,AL
AR,DR,SR,RR,SL,TL,KS,ML,DT ; op1
AR,DR,SR,RR,SL,TL,KS,ML,DT ; op2
AR,DR,SR,RR,SL,TL,KS,ML,DT ; op3
AR,DR,SR,RR,SL,TL,KS,ML,DT ; op4

・設定方法その2

POLL Vで音色エディタのパラメータを出力したときの書式です。
@%(音色番号)の後に25byteのレジスタデータをレジスタ順に直接並べます。
レジスタ順ですので、op1/op3/op2/op4の順となっていますので注意が必要です。

@%000
$073,$054,$073,$054 ; DT/ML
$01A,$019,$000,$000 ; TL
$01F,$01F,$01F,$01F ; KS/AR
$080,$080,$080,$080 ; AMON(OPNA)/DR
$000,$000,$001,$001 ; SR
$00F,$00F,$03F,$03F ; SL/RR
$034                ; FB/AL

■ SSG音色のプリセットパターン

デフォルトで以下の@0~@15までの16種類のプリセットパターンが定義されています。
このうちエンベロープパターンはサウンドドライバ(music)内に埋め込まれており、

ミキサ設定とLFOは ssgdat ファイル内で定義されています。

@0  :  E255,255,255,255,0,255 P1
@1  :  E255,255,255,200,0,10  P1
@2  :  E255,255,255,200,1,10  P1
@3  :  E255,255,255,190,0,10  P1 M16,1,25,4
@4  :  E255,255,255,190,1,10  P1 M16,1,25,4
@5  :  E255,255,255,170,0,10  P1
@6  :  E40,70,14,190,0,15     P1 M16,1,24,5
@7  :  E120,30,255,255,0,10   P1 M16,1,25,4
@8  :  E255,255,255,225,8,15  P1
@9  :  E255,255,255,1,255,255 P2
@10 :  E255,255,255,200,8,255 P2
@11 :  E255,255,255,220,20,8  P1 M1,1,300,-1
@12 :  E255,255,255,255,0,10  P1 M1,1,-400,4
@13 :  E255,255,255,255,0,10  P1 M1,1,80,-1
@14 :  E120,80,255,255,0,255  P1 M1,1,-250,1
@15 :  E255,255,255,220,0,255 P1 M1,1,3000,-1

■ リズムトラック

Gパートのリズムトラックでは、他のパートと一部表記が異なります。
・@の音色番号6bitを使用して発音するリズムを指定します。
各bitは以下のとおり対応しています。( ) 内の数字の合計(0~63)を @ で指定します。

ビット 楽器
bit5 (+32) リムショット
bit4 (+16) タム
bit3 (+ 8) ハイハット
bit2 (+ 4) ライドシンバル
bit1 (+ 2) スネアドラム
bit0 (+ 1) バスドラム

例) バスドラム,スネアドラム,ハイハットを同時に発音 = 1+2+8 = @11を指定する。
・MML中ではダミーの音程(cdefgab)のいずれかと休符(r)で発音を表記します。
・音量は vn1,n2,n3,n4,n5,n6,n7 で指定します。

パラメータ位置 詳細
n1 リズム全体音量 (0~63)
n2 バスドラムの音量 (0~31)
n3 スネアドラムの音量 (0~31)
n4 ライドシンバルの音量(0~31)
n5 ハイハットの音量 (0~31)
n6 タムの音量 (0~31)
n7 リムショットの音量 (0~31)

■ ADPCMトラック

KパートのADPCMトラックでは、o1cで原音の音程で再生され、
音階の指定が高いほど実際の発音される音程は下がります。
オクターブや <, > も通常のパートとは逆になります。
また、vコマンドによるボリューム指定の範囲は0~255までとなります。

ADPCMは以下の音色がロードされています。

音色番号 音色名
@1 kick
@2 snare
@3 kick+snare
@4 crashcymbal
@5 kick+c.cymbal
@6 ac.tam
@7 e.tam
@8 snare2
@9 o.hit
@10 909kick
@11 909snare
@12 808openhihat
@13 timbal
@14 hand clap
@15 timpani
@16 コーラス

自力でオリジナルの音を取り込むには、同梱のvoiceeditor.d88を使用します。

■ MML記述例

・リズムトラックのMMLの書き方

(例)

G t210 v63,31,31,31,31,31,31l16 @1c4@3c4@1c4@3c@2ccc

※ @1はバスドラム、@2はスネアドラム、@3はバスドラム+スネアドラムが鳴ります。

・ADPCMトラックのMMLの書き方

(例)

K t210 o1v50l16 @1c4@2c4@1c4@2cccc

※ ADPCMのオクターブは1が基準となりo2で一つ下のオクターブの音が鳴ります。

・ソフトウェアLFOの書き方

(例)

A t210 @90o4v10l2 M30,1,6,4 cdefgab>c

・SSGトラックのソフトウェアエンベロープの書き方

(例)

D t210 E255,255,255,190,0,10 o4v10l2 cdefgab>c

※ ソフトウェアエンベロープはプリセットが用意されています。
※ 前述の「SSG音色のプリセットパターン」をご参照ください。

・クロックの考え方

(例1)

A C128 t210 @90o4v10 c4

(例2)

A C128 t210 @90o4v10 c%32

※ 2つのMMLは同じ意味になります。
※ 全音符128クロックの場合、32クロックが4分音符と同じ音長になります。
※ 全音符128クロックの場合、12分音符は割り切れないため指定できません。

・エコーマクロの考え方

(例)

A t210 @93o5v13l4 \=1,4 c\d\e\f\g\a\b\

(例)

A t210 @93o4v13l4 c(4c)4d(4d)4e(4e)4f(4f)4g(4g)4a(4a)4b(4b)4

※ 2つのMMLは同じ意味になります。

(例)

A t210 @93o5v13l4 \=2,4 c\d\e\f\g\a\b\

(例)

A t210 @93o4v13l4 c(4o1c)4o4d(4c)4e(4d)4f(4e)4g(4f)4a(4g)4b(4a)4

※ 2つのMMLは同じ意味になります。
※ o1cは2つ前の音が無いためo1cが鳴ります。

■ マクロ

よく使うパターンを定義しておき、MML中で呼び出す機能です。
マクロ定義はコンパイル時にグラフィックVRAM(青)のエリアをワークに使用します。
マクロのネストも可能です。ネストの階層数には制限はなく、マクロバッファの容量に依存します。

・マクロ定義

# *(マクロ番号){マクロ内容} マクロ内容にはスペースを含むことが可能です。

・マクロ呼び出し

MML中で *(マクロ番号)

(例)

# *1{cdefg}
A t200 @90v15o5*1 @91v15o5*1