NSDL(NES Sound Driver Library)

MML文法

全体の構文(MML Construction)

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

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

共通のコマンド
CommandContens
#include "filename" 外部ファイルを呼び込みます。
#octaveReverse 本コマンドを記述することで、相対オクターブの`<'と`>'を入れ替えます。
#bgm n BGMの曲数を設定します。(Default: n = 1)
#se n SE の曲数を設定します。(Default: n = 0)
#offsetPCM address 儕CMを配置するアドレスを指定します。(Default: $10000(儕CM無し))
シーケンスデータはこのコマンドで指定したアドレス-1の領域まで使えます。
NSF music formatでは、このアドレスからΔPCMを配置します。
アセンブリ言語ソースを出力する場合は、"#segmentPCM"コマンドで指定したセグメントについて リンカー"ld65.exe"のコンフィグファイルにて設定した実アドレス指定して下さい。
DPCM{
Delta PCM define
}
儕CMの記述ブロックです。
儕CMのの記述は、儕CM定義(Delta PCM define)の項を参照ください。
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*/ 範囲コメントです。 /* と */ の間の記述を無視します。
(各記述ブロック内でも有効です)

NSF music formatを出力する際に有効なコマンド
CommandContens
#code "name" リンクするNSF用のROMコードを指定します。(Default: name = `nsd.bin')
コンパイルオプション`-l'でROMコードの指定がある場合は、コンパイルオプションを優先します。
#title "strings" タイトル名を設定します。NSFビルド時にヘッダーに埋め込まれます。
#composer "strings" 作曲者を設定します。NSFビルド時にヘッダーに埋め込まれます。
#copyright "strings" 著作権者を設定します。NSFビルド時にヘッダーに埋め込まれます。

アセンブリ言語ソースを出力する際に有効なコマンド
CommandContens
#segment "name"
#segmentSEQ "name"
儕CM以外のセグメントを指定します。(Default: name = `RODATA')
#segmentPCM "name" 儕CMのセグメントを指定します。(Default: name = `PCMDATA')
#label "name" ラベル名(シンボル名)の先頭に付与する文字列を指定します。(Default: name = `_nsd_')
Cコンパイラは、C言語で記述されたラベル(シンボル)名の先頭に`_'を付加します。
従い、C言語から曲データを参照する場合、MML側で設定するラベル名は先頭に`_'を追加してください。

儕CM定義(Delta PCM define)

儕CMを定義します。
儕CMは、音階毎に割り当てる事が可能です。

書式

	note(Accidentals)octave,"filename",mode(,volume)

note

儕CMの波形を割り当てる音階です

a …
A, La, ラ
b …
H, Si, シ
c …
C, Do, ド
d …
D, Re, レ
e …
E, Mi, ミ
f …
F, Fa, ファ
g …
G, Sol, ソ

Accidentals

儕CMの波形を割り当てる音階に対する臨時記号です。省略可能です。

+ …
♯ Sharp
# …
♯ Sharp
- …
♭ Flat
= …
♮ Natural

octave

儕CMの波形を割り当てるオクターブです。1〜8で指定してください。

filename

割り当てる儕CMの波形ファイル(*.dmc)を指定してください。

mode

0 …
1 shot
1 …
loop

volume

儕CMの初期ボリュームです。
0〜127の範囲で指定した場合は、波形再生開始時に$4011番地に書く初期ボリュームとなります。
-1を指定した場合は、波形再生開始時に$4011番地に何も書きません。
省略した場合は、0となります。

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

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

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

音色
各音源で対応する音色番号の範囲で指定してください。詳細は@コマンドの項を参照。
音量
0〜15の範囲で指定してください。
周波数
-64〜63の範囲で指定してください。16で半音に相当します(絶対値です)。
音程
-64〜63の範囲で指定してください。 1で半音に相当します(絶対値です)。
CommandContens
nエンベロープ値
Dn前回のエンベロープ値をnフレーム間維持します。
LエンベロープパターンがRコマンド、又はパターン最後まで行った時の戻り先を指定します。
Rコマンドの後に書かれた場合は、キーオフ後のパターンにおける戻り先となります。
Rコマンド前でLコマンドを省略した場合、Rコマンドの直前のコマンドを繰り返します。
Rコマンド後でLコマンドを省略した場合、エンベロープ定義最後のコマンドを繰り返します。
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無限ループ(サブルーチンの記述ブロック内では無効)
Pポルタメント
R@Key off時の音色
RvKey off時の音量
RmKey off時のモード
Sサブルーチン呼び出し(サブルーチンの記述ブロック内では無効です)
TRトラック(サブルーチンの記述ブロック内では無効です)
@音色(音色エンベロープ無効)
[ : ]リピート(A)
|: \ :|リピート(B)
<オクターブ−1
>オクターブ+1
"オクターブ−1(次の音符のみ)
'オクターブ+1(次の音符のみ)
(音量−1
)音量+1
_移調(絶対値)。
__移調(相対値)。
$nameマクロ呼び出し(未実装)
|小節線(コンパイルには反映されません)