OSGS-MMLリファレンス

補足:
 ほとんどの命令で、10進数で表記する数字の前にxを付けることで、
 16進数を指定できるようになる。(C+x10 = C+16 、@1,xFF = @1,255)。


n:任意の数字 []内は省略可能

音符・音階周り

基本的に、大文字・小文字は区別しない。

MML表記 表記例 解説
C D E F G A B CDEFGFEDC 音符。Cがド、Dがレ、Bがシ、という感じ。音長を書かなければ、デフォルトの音長が使われる。
R R 休符。音長を書かなければ、デフォルトの音長が使われる。
【音符】&【音符】 C&D16 スラー。エンベロープをリセットさせずに次の音符を演奏する。ドライバの仕様上、LFOはリセットされてしまう。
【音符か休符】n&n C4&16 音長連結。付点ではどうしても表現できない、微妙な音長の時に使う。いくつでも繋げられる。
【音符か休符】+ or - or # C- C+ C# C------ シャープ・フラット。半音上がったり、下がったりする。重ねた場合は素直にその分上下する。「C++++」なら2音上がって「E」の音になる。
【音符か休符】n[.] C4D8E16.F32G2....C64 音長の個別指定。何分音符かを数字で指定する。数字のあとにドットを書けば、付点n分音符になる。付点は重ねられる。数字の前に^があれば、フレーム数直接指定となる。
Lx L16 L4. デフォルト音長の指定。#TICK 0の場合はフレーム数直接指定となる。数字の前に^があれば、フレーム数直接指定となる。
On O3 O6 オクターブ指定。
< or > CDEG<CDEG<C>GEDC オクターブ相対指定。<で上がり、>で下がる。
NSn NS12 NS-12 ノートシフト絶対指定。これ以降、音階がこの値の分だけ上下される。音階の上下はドライバ側で行われる。
NS+n NS+12 NS+-12 ノートシフト相対指定。音階の上下はドライバ側で行われる。
NOn NO12 NO-12 ノートオフセット絶対指定。ノートシフトのコンパイラ側処理版。音階の上下はコンパイラ側で処理される。
NO+n NO+12 NO+-12 ノートオフセット相対指定。音階の上下はコンパイラ側で処理される。

音量・音色周り

基本的に、大文字・小文字は区別しない。

MML表記 表記例 解説
@[n][,n] @1 @1,127 @,127 音色指定。音源によってその意味は異なる。@nで第1引数のみ変更、@,nで第2引数のみ変更。@n,nで両方変更。
@{16進データ} @{0123456789ABCDEF} 波形メモリ音源とかの音色指定。
Vn V255 音量絶対指定。0〜255までの値を指定する。
V+n V+64 V+-64 音量相対指定。 V-nでは間違い。
Pn P255 音量絶対指定。0〜255までの値を指定する。
P+n P+64 P+-64 音量相対指定。 P-nでは間違い。
Qn Q1 ゲートタイム。音符が終わるnフレーム前にキーオフされる。
@E{16進データ} @E{FF01|EE04DD04|2210 0000} エンベロープテーブル指定。スペースはなくても良い。1バイト目に音量、2バイト目にウェイトフレーム数、以降コレの繰り返し。フレーム数に00と指定するとそっから先に進まない。1個目の|でループ開始位置、2個目の|はループ終了位置で、キーオフ時はコレの右側から読む。
@L{16進データ} @L{0008|ff010001} LFOテーブル指定。スペースはなくても良い。1バイト目に周波数レジスタ加/減算値(00-7Fで加算、80-FFで減算)、2バイト目にウェイトフレーム数、以降コレの繰り返し。|でループ開始位置を指定。
@Cn @C1 @C3 音源固有設定。意味は音源によって異なる。同じ音源であればどのトラックから呼んでも構わない。

制御周り

ラベル名には、数字と大文字の英字しか指定できない。

MML表記 表記例 解説
/:[n]...[/]...:/ または [[n]...[/]...] /:5CD/ED:/ または [5CD/ED] n回ループ。最大256で、数字を省略時は2回ループになる。/は途中抜け出しで、最後のループ時に/以降を読み飛ばす。
**ラベル **LOOP ジャンプラベル定義。
*ラベル *LOOP 指定したジャンプラベルへ飛ぶ。主に永久ループとかで使う。
\\ラベル ; または $$ラベル ; \\L1 CEGEC; サブルーチンラベル定義。定義の終わりには;を付けなければならない。
\ラベル または $ラベル \L1 指定したサブルーチンラベルへ飛ぶ。
; ; トラックの終わり、演奏停止。永久ループするなら要らない。

先頭が#のもの

大文字で書くこと。指定した内容は、指定したところの直後から有効になる。

MML表記 表記例 解説
#CHIP n,[n],[n],[n] #CHIP AY8910 や #CHIP YM2413,,20,4000000 使用する音源の定義。複数書けば、複数使える。なお、音源指定は省略できないし、#CHIP自体必ず書かなければならない。
#TRACK n,n #TRACK 0,1 トラックの開始。これを書いたところから、そのトラックの演奏が始まる。第1引数でトラック番号、第2引数で音源番号を指定する。
#MUSIC n #MUSIC 0 曲データ番号指定。これ以降に出てくる#TRACKは、指定された曲番号のトラックとなる。
#TICK n #TICK 128 全音符辺りのフレーム数を指定する。ここで0を指定した場合、それ以降の音長の値がそのままフレーム数となる。デフォルトは128。
#DRVSPEED n #DRVSPEED x411A ドライバを回す速度。n/1000000msで指定。デフォルトは60Hzのx411A。
#TITLE タイトル #TITLE 4'33 タイトル指定。32バイトまで。
#COPYRIGHT 著作権情報 #COPYRIGHT 2014 OffGao 著作権情報、もしくはアーティスト指定。32バイトまで。
#MAXTRACK n #MAXTRACK 64 最大トラック数。最大値は254。デフォルトは32。
#MAXMUSIC n #MAXMUSIC 3 ユーザーが指定できる曲番号の最大数。内部的な曲数以下の値であること。デフォルトは0。
#DRVSPEED n #DRVSPEED x411A ドライバを回す速度。n/1000000msで指定。デフォルトは60Hzのx411A。
#INCLUDE ファイル名 #INCLUDE env.txt 指定されたファイルを読みに行く。#INCLUDEの行に、指定ファイルの内容がそのまんま突っ込まれるようなイメージ。
#OCTAVE REVERSE #OCTAVE REVERSE オクターブ相対指定で、記号の意味を反転する。コレが出てくると、>で上がり、<で下がる。

その他の命令

いろいろ。基本的に、大文字・小文字は区別しない。

MML表記 表記例 解説
Tn T128 テンポ絶対指定。ただし、普通のテンポとはワケが違う。0〜255が指定できるが、T0が一番速く、T1が一番遅い。デフォルトは0。
T+n T+128 T+-20 テンポ相対指定。
T,n T,3 T128,2 音長カウンタ減算値指定。デフォルトは1。
@Pn @P5 指定した曲番号のデータを再生する。トラック重複分は上書きされる。これを使うときは、呼び出す曲データの全てのトラックよりも後ろでなければ正常再生できない。
@Tn,n,ジャンプラベル @T0,2,DRUM 別トラックで指定したジャンプラベルから再生する。第1引数にトラック番号、第2引数に音源番号、第3引数にジャンプラベル。曲番号を分けるまでもないような用途で別トラック再生を使いたい場合にこれを使う。
/* ... */ /* コメント */ コメント。この中の文字列はコンパイルされない。
// ... // コメント 1行コメント。//から改行されるまでの部分はコンパイルされない。

上級者向け命令

基本的に、大文字・小文字は区別しない。
ものすごく凝ったことをしたり、音源を骨の髄までしゃぶり尽くしたい方向けの命令。

MML表記 表記例 解説
@On @O2 音源番号変更。まったく別の音源にする場合は、この直後に音色などを指定しないと危ない。
%n,xxxx %3,@1,127 %2,T127 %1,@e{ff01|00|0000} 別トラック変更シリーズ。変えるのはボリュームだろうがエンベロープだろうがテンポだろうが音色だろうが何でもいい。
=n,n =x11,x7F 音源レジスタに直接代入。第1引数にアドレス、第2引数に代入する値。
=n,n,{} =x11,x2,{ff ee dd cc} 音源レジスタに直接代入(複数バイト)。第1引数にアドレス、第2引数にアドレス加算値。そして書き込む値たち。
@@TR,n @@TR,15 @@TR,0 有効トラック数指定。これ以降のトラックは処理されなくなる。0で最大数指定。

戻る