OFGS-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では間違い。
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バイト目にウェイトフレーム数、以降コレの繰り返し。|でループ開始位置を指定。

制御周り

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

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

先頭が#のもの

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

MML表記 表記例 解説
#OCTAVE REVERSE #OCTAVE REVERSE オクターブ相対指定で、記号の意味を反転する。コレが出てくると、>で上がり、<で下がる。
#TRACK n,n #TRACK 0,1 トラックの開始。これを書いたところから、そのトラックの演奏が始まる。第1引数でトラック番号、第2引数で音源番号を指定する。
#MUSIC n #MUSIC 0 曲データ番号指定。これ以降に出てくる#TRACKは、指定された曲番号のトラックとなる。
#TICK n #TICK 128 全音符辺りのフレーム数を指定する。ここで0を指定した場合、それ以降の音長の値がそのままフレーム数となる。デフォルトは128。
#INCLUDE ファイル名 #INCLUDE env.txt 指定されたファイルを読みに行く。#INCLUDEの行に、指定ファイルの内容がそのまんま突っ込まれるようなイメージ。

その他の命令

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

MML表記 表記例 解説
Tn T128 テンポ指定。ただし、普通のテンポとはワケが違う。0〜255が指定できるが、T0が一番速く、T1が一番遅い。デフォルトは0。
T+n T+64 T+-64 テンポの相対指定。
@Pn @P5 指定した曲番号のデータを再生する。トラック重複分は上書きされる。これを使うときは、呼び出す曲データの全てのトラックよりも後ろでなければ正常再生できない。
@Tn,n,ジャンプラベル @T0,2,DRUM 別トラックで指定したジャンプラベルから再生する。第1引数にトラック番号、第2引数に音源番号、第3引数にジャンプラベル。曲番号を分けるまでもないような用途で別トラック再生を使いたい場合にこれを使う。
@Tn{...} @T4{@2@E{FF01|EE00|0000}NS+1} 別トラックの各種パラメータをいじる。音符と休符は入れちゃダメ。でも長さ0ならOK。
/* ... */ /* コメント */ コメント。この中の文字列はコンパイルされない。
// ... // コメント コメント。その行の//以降の文字列はコンパイルされない。
=n,n =x11,x7F 音源レジスタに直接代入。第1引数にアドレス、第2引数に代入する値。
=n,{16進データ} =0,{2123 1004 64f3 380a} 音源レジスタに直接代入。こちらは複数バイト指定

上級者向け命令

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

MML表記 表記例 解説
@On @O2 音源番号変更。まったく別の音源にする場合は、この直後に音色などを指定しないと危ない。
@=n,n @=x4014,x8F メモリ直接代入。第1引数にアドレス、第2引数に代入する値。
@=n,{16進データ} @=x300,{112233445566} メモリ直接代入。こちらは複数バイト指定。第1引数にアドレス、第2引数に代入するデータ。処理の仕様上、後ろのデータから順に書いていくのでちょっと注意。
@+n,n @+x110,x1 メモリ直接加算。第1引数にアドレス、第2引数に加算する値。
@^n @^x200 指定したアドレスにサブルーチンとしてジャンプ。RAMに曲データを動的生成して、それを読ませる場合とかに使う。
@>n @>xC000 指定したアドレスのプログラムを実行。基本的にレジスタ制限はない。最後はRETしてね。
@>{16進データ} @>{A900 8D1140 18 6901 C980 D0F8 60} {}内のプログラムを実行。255バイト分まで。基本的にレジスタ制限はない。もちろん最後はRETしてね。

戻る