* MMLとは [#v4e417fb]
MMLとは'''MusicMacroLanguage'''の略で、演奏情報をテキストで表現する為の言語((統一規格ではないので音源ドライバ毎に仕様は異なります。))になります。~

>A @0o4v12l8 cdefgab>c

例えば上記はOPMのチャンネルA(8チャンネル中)で、音色番号0、オクターブ4(9段階中)、音量12(15段階中)、音長8分音符でドレミファソラシドを演奏することを表しています。~

#contents

* note.xのMML仕様 [#nd84c2df]
note.xにもドキュメントは付属していますが、PC-98x1系の音源ドライバと勝手が違うところもあるようなので自分用に解説をつらつらと書いていこうと思います。~
全ての機能について解説するつもりはありませんのでnote.docとの併用は必要です。~

** チャンネル定義 A〜H [#r7a01b2c]
行頭に'''A〜H'''を記載することでOPMの8つあるチャンネルのどれに対する演奏情報なのかを定義します。チャンネル定義の後には半角スペースが必要です。~

>ABC @0o4v12l8 cdefgab>c

以上の様に記載することで複数のチャンネルに対して同じ演奏情報を定義することも可能です((分かりやすくする為に音色や音量も記載しましたが、音色や音量を各チャンネル毎に定義して音階情報のみレイヤーさせることも可能です))~

※実際にはP〜Wのチャンネルもありますが、こちらはPCM用で現状のGIMICでは利用することはできません。~

** 音符・休符 c,d,e,f,g,a,b r + - = [#x9b3cbcd]
cから順にドレミファソラシに対応します。休符は'r'、シャープは'+'、フラットは'-'、ナチュラルは'='で表すことができます((c-、e+、f-、b+は存在しませんが<b>、f、e、>c<と同義になります。))(('c++'や'c--'と記載することでダブルシャープ、ダブルフラットを表現できた…ような気がします。))~

>A cdefedcr efgagfe crcrcrcr ccddeeff edcr

上記はかえるのうたをMMLで記載した物です。ドレミファミレド休符、ミファソラソファミ休符、ド休符ド休符ド休符ド休符、ドドレレミミファファミレド休符を表しています。~

** 音長 1,2,4,8,16,32,64,128, 3,6,12,24,48,96,192 [#v05f5f6f]
音長は音符の直後に記載します。1が全音符、2が2分音符…と最大で128分音符まで表現することができます。3連符を表現する時は分割したい音長に3をかけてやることで表現することができます。~
例えば全音符を3分割したい時は1×3で"3"、2分音符を3分割したい時は"6"を記載します。ただし128分音符の3連符は表現することができません。64分音符の3連符"192"までです。~

また音長の後に"."を付けることで付点を表現することができます。"4."は付点4分音符になります。~

>A c4d4e4f4e4d4c4r4 e4f4g4a4g4f4e4 c4r4c4r4c4r4c4r4 c8c8d8d8e8e8f8f8 e4d4c4r4

先ほどのかえるのうたに音長を記載したものです。~

** 音長の省略 ln n=音長 [#y63efec7]
音長をいちいち記載するのは面倒なのでlコマンドを使って音長を省略することができます。~

>A l4 cdefedcr efgagfe crcrcrcr l8 ccddeeff e4d4c4r4

上記のかえるのうたの音長をlコマンドを使って簡略化した物です。lコマンドで音長を省略中でも音符の後に音長を記載すればその通りに演奏されます(最後のe4d4c4r4の部分)~
なおlコマンドはチャンネル毎に独立していますので注意してください。~

>A l4~
B l8~
AB cdefedcr efgagfe crcrcrcr~

このように記載した場合、Aチャンネルは4分音符で、Bチャンネルは8分音符で演奏されます。~
基本的に各コマンドはチャンネル毎に独立しています。~

** 音長のステップ表現 %n n=1〜256 [#n0895b92]
ステップ表現とはMXDRVが処理を行うタイミング(1ステップ)で音長を表現する手法になります。~
全音符は192ステップ((MXDRVの分解能は全音符192ステップ固定です。))、2分音符は96ステップ、4分音符は48ステップとn分音符が進むにつれステップ数は半減していきます。~

>全音符(192ステップ) ÷ n分音符 = n分音符のステップ数

計算式は上記になります。なお64分音符を3等分(3連符)した192分音符が1ステップとなる為、192分音符以上を表現することはできません。~
ステップ表現は演奏のモタりや先走りを表現したい時や5連符や7連符を再現したい場合に使います。~

5連符の表現方法は5等分したいn分音符のステップ数を上記式から求めて5で割ります。~
しかし実際には5や7で割り切ることができない為、音長を足したり削ったりして帳尻合わせをする必要があります。~
例えば4分音符(48ステップ)の5連符を再現したい場合は音符1つ辺り48ステップ÷5で9ステップになりますが余りが3ステップ出てしまいます。~
このような場合は以下のように余った3ステップを適当に割り当ててしまいます。~

>A c%10d%9e%10f%9g%10

厳密には5連符とは言えませんが聞いた感じでは5連符っぽい何かになります。余りや不足分の割り当ては自分の好みでやってみるのが良いでしょう。~

** 連符 {x}n n=音長 x=音符(最大32個)[#mdbfac49]
上記でステップ数での連符の表現方法を記載しましたが、note.xではこれを自動で行ってくれるコマンド'{}'があります。~

>A {cdefg}4

上記は4分音符を'cdefg'で5等分しています。{}の中に書いた音符の数で指定した音長を等分して割り当ててくれます。~

** 音長の加減算 ^ &tilde; [#b11ebfba]
音長は加減算することが可能です。足す場合は'^'、引く場合は'&tilde;'を使います。~

>A c4^8 (付点4分音符と同義)~
A c%48^%24 (付点4分音符と同義)~
A c4~8 (8分音符と同義)~
A c%48~%24 (8分音符と同義)~
A c%48~8 (n分音符表記とステップ表記を混在させることも可能)~

ただし加減算した結果のステップ数は%1〜%256の範囲収まっている必要があります。~

** タイ・スラー & [#g328aade]
音符同士を繋ぐ時は'&'を使います。前後が同じ音階であればタイ、違う音階であればスラーとして機能します。~

>A c1&c1~
A c1&d1~

音長の加算は'^'でも行えますがステップ数が%256を超える物は表現できません(例えば上記の様に全音符同士を結ぶ場合)((何故上限値が256までかと言うと、ステップ数の内部処理を8bit(MAX256)で行っている為です))~
通常、音長を加算したい場合はタイを使った方が良いでしょう。~
なおMXDRVでは'&'直後の音符を省略することができません(c1&1の様な表現はできません)~

** 音階 o0〜8, <, > [#y22ccc1d]
オクターブを定義します。note.docには値の範囲として-2〜10と記載がありますが実際に利用できるのはo0d+〜o8dまでのようです。~
また相対指定をすることも可能で'<'でオクターブを一つ下へ、'>'でオクターブを一つ上に変更することができます。~

>A o3cdefgab>c<bagfedc

上記はオクターブ3でドレミファソラシ(オクターブ+1)ド(オクターブ-1)シラソファミレドを意味しています。~

** ループ(反復) [ ]n, / n=ループ回数 [#u9663b60]
括弧内を指定した回数だけ繰り返します。括弧内で'/'を記載するとループの最後の回(5回ループとしたなら5回目)に'/'の位置でループから抜けます。~
楽譜で言う反復記号に相当するものです。~

>A [cdefedcr efgagfe / crcrcrcr]3~

上記は3週目に/の位置でループを抜けます(3週目のcrcrcrcrが飛ばされます)~

** 永久ループ L [#j5d73c40]
そのチャンネルの演奏が終わったらLが記載された位置に戻ります。~

>A cdefedcr L efgagfe crcrcrcr~

** 音色 @n n=0〜255 [#h19fa4c6]
音色番号を指定します。なおMXDRVは音色を内蔵していませんので別途定義してやる必要があります(音色定義は後述する…予定)~

** 音量 vn n=0〜15 [#nd131da6]
音量を16段階で指定します。0は無音で15が最大です。~
実際の所、OPM(YM2151)は128段階の音量設定を持っていますが、大雑把に音量を指定する時に使います。((MMLに慣れてくると全く使わなくなるコマンドの筆頭です))~

** 音量 @vn n=0〜127 [#r2d74460]
音量を128段階で指定します。0は無音で127が最大です。~
値が1上がる毎にそのチャンネルの音量が0.75dBずつ上がります。~

** アクセント xn, @xn n=0〜15、0〜127 [#zcf75d8d]
このコマンド直後にある音符だけを指定した音量に変更します。~
'x'が'v'に相当する物で値は0〜15の範囲、'@x'が'@v'に相当する物で値は0〜127の範囲を持ちます。~

>A @v100 cde @x120 e f~

上記は'cde'と'f'@v100で、'e'が@v120で演奏されます。~

** 相対音量変化 (n )n n=0〜127 [#pc164ef6]
音量をv(@v)で指定した値から相対的に変化させます。')'で音量を増加、'('で音量を減少させることができます。~

>A @v100 cde )20 e (20 f~

上記は'cde'と'f'@v100で、'e'が@v120で演奏されます(アクセントで出した例と同じ結果になります)~

** ゲートタイム qn n=1〜8 [#xb3d2b5c]
その音長の8分のいくつ発音するかを指定します。~
例えばq1で4分音符(48ステップ)を鳴らすと、48×(1/8)で6ステップ分鳴らしてキーオフします。~

** ゲートタイム @qn n=0〜192 [#p2083f0f]
その音長から指定した値(ステップ)だけキーオフを早めます。~
例えば@q40で4分音符(48ステップ)を鳴らすと48-40で8ステップ分鳴らしてキーオフします。~

** ポルタメント _xyn x=o,<,> y=音階 n=音長 [#c190624a]
音符の直後に指定します。直前の音符の音長で指定した音階まで直線的に音程を変化させます。~
xにはオクターブコマンド(o,<,>)が、yには音階を設定します。xは省略可能です。~
nで音長を指定できますが、ポルタメントが効く音長を直指定できるわけではないようで、~

-直前の音符の音長より短い場合:直前の音長が使われる(即ちnで音長を指定する意味が無い)~
-直前の音符の音長より長い場合:直前の音長で音程を変化させた後、残りの音長分、その音程を維持する(即ち'&'で変化後の音階の音符を繋げたのと同義)~

以上のような不可思議な動きをします。nで音長を指定するような使い方をすると訳が分からなくなる可能性が高いです。~

>A o3 c4_>c def

上記はオクターブ3のドを4分音符分かけて1オクターブ上のドに変化させます。~
なおMXDRVのポルタメントコマンドでオクターブコマンドを使うと、ポルタメントが終わっても指定したオクターブが維持されます。((FMPのポルタメントコマンドでは直前のオクターブに戻ります。))~
上記で言うとdefはオクターブ4で演奏されます。~

またMXDRVのポルタメントコマンドは±2オクターブの範囲までしか効かないようです。~
それを超える範囲のポルタメントをかける場合は'&'で分割するしか方法は無いようです((恐らくYM2151の音階指定とデチューン(KF)指定方法による制限だと思われます))~

** ピッチベンド _Dn n=-6144〜6144 [#h0607a58]
音符の直後に指定します。直前の音符の音長で指定した値分だけ直線的に音程を変化させます。値の単位は1.6centです。~

** デチューン Dn n=-32768~32767 [#yf64755f]
音程を1.6cent単位でずらします。~

** パン pn n=0〜3 [#ib75c852]
そのチャンネルの音声出力を左から出すか、右から出すか、両方から出すかを指定します。~

|値|音声出力|
|0|無音|
|1|左|
|2|右|
|3|左右|

** テンポ(BPM指定) tn n=19〜4882 [#uf9b3ac0]
1分間に演奏する4分音符の数を設定します。~
このコマンドは全チャンネルで記載する必要はなく、どれか1つのチャンネルで記載すればその時点で他のチャンネルも指定したテンポになります。~
逆に言うと各チャンネルでバラバラのテンポを使うことは不可能です(そんなことする意味があるのかは別として)~

>A t120 c4c4c4c4

**テンポ(timer-B指定) @tn n=0〜255 [#ldeac852]
YM2151のtimer-Bの値を直で設定します。timer-Bの計算式は以下の通りです。~

>timer-B周期(ms) = (1024*(256-n)) ÷ 4000((X68000のYM2151に入力されているクロック周波数です。単位はKHz。))

BPM指定のテンポはドライバ側でそのテンポに近くなるようtimer-Bを設定しているに過ぎません。((よって指定したテンポが正確無比なものである保証はありません。あくまで近い速度になるだけです。))~

** タイトル #title "曲のタイトル" [#g7d6b558]
曲のタイトルを記載します。改行は使えません。~
MXDRVでは作曲者や編曲者、データ作成者を記載する項目は別途用意されていませんのでこれに含める必要があります。~

** オクターブ記号の反転 #octave-rev [#a8c212a2]
オクターブ記号'<'と'>'の機能を反転させます。'<'で1オクターブ上へ、'>'で1オクターブ下になります。~
ただし相対音量コマンド'('と')'を入れ替える機能はありませんので、この機能を使うのはちょっと微妙かも知れません。いにしえの世代向けの機能です。~

** キー補正 #tps n n=-24〜24 [#l448550d]
指定した値だけ音階(キーコード)に補正を加えます。全チャンネルが対象になります。~

** デチューン補正 #detune n n=-32768〜32767 [#s474df5c]
指定した値だけデチューンに補正を加えます。全チャンネルが対象になります。~
Dコマンドを使用しない限り作用しないので注意してください。指定した値を反映させたい場合はD0の記載が必要です。~

** 以下、作成中… [#z757fd1c]



トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS