トップ | MMLリファレンス
セットアップ
- 音色セット指定#using "string"
-
音色セットを指定します。指定した名前のフォルダから音色セットを読み込みます。音色セットのフォルダはMMLと同じ階層に置いてください。
- オクターブ相対指定反転#octave reverse
-
オクターブ相対指定の命令が入れ替わり、適用後は>で上げる、<で下げる、となります。
曲のメタデータ
- 演奏時間#duration n
-
SPCファイルの演奏時間を秒で指定します。コンパイラはMMLから曲の長さを判断できないので、適切な値を指定してください。プレイヤーによっては、この指定を無視してユーザーが止めるまで演奏を続ける場合があります。
ROM出力には影響ありません。
- 曲タイトル#title "string"
-
曲のタイトルを記述します
- 作曲者#artist "string"
-
作曲者名を記述します
- データ作成者#coding "string"
-
MMLデータの作成者名を記述します
- ゲームタイトル#game "string"
-
SPCファイルの「元のゲームのタイトル」を表すフィールドを指定します。
オリジナル曲やゲーム以外から打ち込んだ曲の場合は指定しなくても構いません。
- コメント#comment "string"
-
曲についてのコメントを記述します。これはコンパイラに無視される「MMLを読みやすくするためのコメント」ではなく、SPCファイルに記録される曲の説明を記述するものです。
- MMLコメント/*~*/
-
MMLを読みやすくするためのコメントを記述します。#comment とは違い、出力データにはいかなる影響も与えません。
発声
- 音色選択@n
- 音色セット内のインデックスを指定し、音色を切り替えます。
- テンポtn
- テンポを60~240で指定します。どのトラックに書いても曲全体で共有されます。テンポの単位は一般的な楽譜と同じBPMで、1分間に四分音符を何拍打つかを表します。
- ゲートタイムqn
- ゲートタイムを1~16で指定します。q16で100%(音符の長さ目いっぱいに発声する)となります。
尚、他処理系との互換性のため16段階になっていますが、内部では2で割られて8段階になります。
- ベロシティ指定vn
- ベロシティを1~16で指定します。
- ベロシティシフトvsn
- 以降の音のベロシティに一律nを加えます(負の値であれば減らします)。最大値、最小値を超えた場合はそれらの値に修正されます。
- パンポット@pn
- パン(定位)を0~16で指定します。0=左、8=中央、16=右となります。
- デフォルト音長ln(小文字のエル)
- デフォルトの音長を指定します。(1=全音符、2=二分音符……) 個別に音長を指定しなかった音符は、ここで指定した音長になります。
qSPCのデフォルト値は4ですが、処理系によっては8の場合もあるので、他からMMLを移植する場合は注意してください。
- オクターブon(小文字のオー)
- オクターブを0~5で指定します。以後に現れるノートはここで指定したオクターブになります。
- オクターブ相対指定<
- オクターブを現在より1上げます(反転時は下げる)
- オクターブ相対指定>
- オクターブを現在より1下げます(反転時は上げる)
- 移調nsn
- 以降の音を全てn度上げて(または下げて)演奏します。
- ノートc d e f g a b
- 指定の音名でキーオンします。後に+を付けると嬰音(半音上げる)、-を付けると変音(半音下げる)になります。続けて数字と付点でデフォルト以外の音長を指定できます。(+-の後に音長の順序)
[例]
aeb-2.
<音長についての制限>
ドライバ内部では192を全音符の長さとして、48を四分音符、24を八分音符……という形で音長を表現しています。
バイトコード上では音長が7ビット(最大127)であるため、このままでは二分音符までしか表現できません。そこで、付点2分音符(144)以上の音長は以下のように変形します。
t' = (t/2) + 25
これで全音符まで表現できますが、付点を使って異常な長さの音符を作るとエラーになる恐れがあります。
- 休符r
- 休符(発声しない)を表します。音長の記述方法は音符と同じです。
[例]
r2
- タイ・スラー&
- タイまたはスラーを指示します。タイとスラーの内部的な動作は同一で、1つ目のノートのキーオフと2つ目のノートのキーオンを省略します。内部カウンタの都合上、単独の音符では表現できない音長もタイを利用すれば表現可能になります。
尚、「a4&8」のように2つ目の音名を省略する記法には対応していませんので、必ず音名も書いてください。
[例]
a2&a4&a8
- 連符{~}
- {~}内の音長を均等に分割して演奏します。つまり{aaa}で3連符になります。 {aaa}2 と書くと連符全体の長さが2分音符と同じになります。
内部のカウンタが割り切れないとテンポずれを起こしてしまうので、実質的には3連符専用だと考えてください。
制御・構成
- 曲全体ループ/(スラッシュ)
- トラックの終端に達したときに、この記号が書かれている場所まで戻って演奏を続けます。つまり、曲全体の繰り返しの起点を指示します。区間リピートを抜ける「/」と同じ記号ですが、/:~:/の外にあるかどうかで区別されます。
- 区間リピート/:n~/~:/
- /:~:/の内側を繰り返し演奏します。nに整数を記述すると演奏回数を指示できます(折り返す回数ではありませんので注意。1はリピート無しと同等です。) nを省略すると2回演奏になります。
/(スラッシュ)を書くと、最後の周回ではその場所でリピート区間を抜けます。/ が無い場合は最後まで演奏してから抜けます。
つまり /:3cde/def:/ は cde def cde def cde の順で演奏されます。
ドライバの制限により、リピートを入れ子にはできません。多重ループ状のリピートを簡潔に書きたい場合は、マクロを代用してください。ただし、曲全体ループの中で区間リピートを使うことは可能です。
- トラック終了;(セミコロン)
-
現在のトラックを終了します。
[例]
abc;
cde
この例は2トラック(2和音)の演奏になります。セミコロンが無ければ改行しても同じトラックの続きになります。
マクロ
- マクロ定義$macroname=~;
-
マクロを定義します。セミコロンまでが定義の内容になります。改行だけでは定義が終わらないので注意してください。
- マクロ使用$macroname
-
マクロを使用(これを記述した場所に内容を展開)します。
マクロはコンパイル時に展開されるので、見た目は小さくてもコンパイル後のデータが思わぬ大きさになる場合があります。
マクロの中で他のマクロを使用することもできますが、再帰して無限に展開される状態になるとエラーとなります(実際には32段超の入れ子になった時点でエラーとしています)
マクロ使用後には空白を入れて、他のコマンドと繋がらないようにしてください。