MMLリファレンス - onitama/mucom88 GitHub Wiki
MUCOM88 リファレンスマニュアル
- MUCOM88 リファレンスマニュアル
- MML Reference in English
- ■ パート構成
- ■ 基本的なMMLの書き方
- ■ MML内部
- ■ 残念ながらドライバに実装されなかったもしくは無くなったMML(おまけ)
- ■ FM音源音色定義
- ■ SSG音色のプリセットパターン
- ■ リズムトラック
- ■ ADPCMトラック
- ■ MML記述例
- ■ マクロ
■ パート構成
行の先頭に記述することでパート指定となります。
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