NSDL(NES Sound Driver Library)

MML文法

全体の構文(MML Construction)

MMLの全体的な構文は、`#'で始まる定義&疑似命令及び、 データ(エンベロープパターン、シーケンスデータ)を記述する記述ブロックで構成されます。
MMLコンパイラは、ASCIIコード0x00〜0x20(改行、TAB、スペース等)を無視します。

定義命令の多くは、NSFへビルドする際にNSFヘッダーに設定されます。

CommandContens
#title "strings" タイトル名を設定します。NSFビルド時にヘッダーに埋め込まれます。
#composer "strings" 作曲者を設定します。NSFビルド時にヘッダーに埋め込まれます。
#copyright "strings" 著作権者を設定します。NSFビルド時にヘッダーに埋め込まれます。
#include "filename" 外部ファイルを呼び込みます。
#octaveReverse 本コマンドを記述することで、相対オクターブの`<'と`>'を入れ替えます。
#segment "name" 儕CM以外のセグメントを指定します。(Default: name = `rodata')
MMLをアセンブリ言語ソース(ca65.exe用)へ変換する際に有効です。
#code "name" リンクするNSF用のROMコードを指定します。(Default: name = `nsd.bin')
MMLをNSFへ変換する際に有効です。
#bgm n BGMの曲数を設定します。(Default: n = 1)
#se n SE の曲数を設定します。(Default: n = 0)
Envelop(n){
Envelop data
}
n番のエンベロープパターンの記述ブロックです。
エンベロープパターンの記述は、エンベロープパターン(Envelop pattern)の項を参照ください。
Sub(n){
Sequence data
}
n番のサブルーチンの記述ブロックです。
シーケンスパターンの記述は、シーケンスデータ(Sequence data)の項を参照ください。
BGM(n){
Sequence data
}
n番目のBGMのシーケンスの記述ブロックです。
シーケンスパターンの記述は、シーケンスデータ(Sequence data)の項を参照ください。
番号は0からカウントします。
SE(n){
Sequence data
}
n番目のSE のシーケンスの記述ブロックです。(未実装)
シーケンスパターンの記述は、シーケンスデータ(Sequence data)の項を参照ください。
番号は0からカウントします。
$name{
Sequence data
}
シーケンス用のマクロ定義です。(未実装)
;comments 1行コメントです。改行までの記述を無視します。
(各記述ブロック内でも有効です)
//comments 1行コメントです。改行までの記述を無視します。
(各記述ブロック内でも有効です)
/*comments*/ 範囲コメントです。 /* と */ の間の記述を無視します。
(各記述ブロック内でも有効です)

エンベロープパターン(Envelop pattern)

音色、音量、周波数、音程の推移パターンを定義します。

エンベロープパターンの定義は、フレーム毎の推移を数値で指定します。
MMLコンパイラは、各エンベロープ(音色、音量、周波数、音程)のパターンを一元管理します。
これにより、特定の1つのパターンを、どのエンベロープでも使用可能ですが、設定範囲は留意して下さい。

音色
各音源で対応する音色番号の範囲で指定してください。詳細は@コマンドの項を参照。
音量
0〜15の範囲で指定してください。
周波数
-64〜63の範囲で指定してください。16で半音に相当します。
音程
-64〜63の範囲で指定してください。 1で半音に相当します。
CommandContens
nエンベロープ値
Dn前回のエンベロープ値をnフレーム間維持します。
LエンベロープパターンがRコマンド、又はパターン最後まで行った時の戻り先を指定します。
2回目に書かれた場合は、キーオフ後のパターンにおける戻り先となります。
R以後を、キーオフ後のエンベロープパターンとします。
(start,end,length)startからendまでlengthフレームで変化します。(未実装)

シーケンスデータ(Sequence data)

BGM,SE,サブルーチンの演奏パターンを定義します。
シーケンスデータのサイズを最適化するためには、 ぜひ、BGM,SEデータフォーマット(Format of BGM and SE)を御一読ください。

CommandContens
a音符 (A, La, ラ)
b音符 (B, Si, シ)
c音符 (C, Do, ド)
d音符 (D, Re, レ)
e音符 (E, Mi, ミ)
f音符 (F, Fa, ファ)
g音符 (G, Sol, ソ)
l音長を省略した時に適用する音長
oオクターブ
q後方からのゲートタイム
r休符
^タイ
sスイープ
tテンポ
t_相対テンポ
u前方からのゲートタイム
v音量
yメモリ書き込み
Dディチューン(cent単位)
D%ディチューン(register単位)
E@音色エンベロープ・パターン
Ev音量エンベロープ・パターン
Em周波数エンベロープ・パターン
En音程エンベロープ・パターン
K{}調号(自動臨時記号)
L無限ループ(サブルーチンの記述ブロック内では無効)
Pdepth,count,rateポルタメント(未実装)
R@Key off時の音色
RvKey off時の音量
RmKey off時のモード
Sサブルーチン呼び出し(サブルーチンの記述ブロック内では無効です)
TRトラック(サブルーチンの記述ブロック内では無効です)
@音色(音色エンベロープ無効)
[ : ]リピート(A)
|: \ :|リピート(B)
<オクターブ−1
>オクターブ+1
"オクターブ−1(次の音符のみ)
'オクターブ+1(次の音符のみ)
(音量−1
)音量+1
_移調(絶対値)。
__移調(相対値)。
$nameマクロ呼び出し(未実装)
|小節線(コンパイルには反映されません)