MGSDRV MML 11 JP

From MSX MUSIC WIKI
Revision as of 04:38, 25 June 2018 by Kumokosi (talk | contribs) (MMLについて)
Jump to: navigation, search

MGSC MML compiler version 1.11 Copyright(c) 1992-93 by Ain

テキストファイルに書かれたMMLをMGSフォーマットの演奏データへ変換します。

使用方法

書式:MGSC <Source file[.MUS]> [<Object file>] [Option]

<Source file>
MMLソースのファイル名を指定します。拡張子を省略すると.MUSと見なします。
[<Object file>]
コンパイル後のデータのファイル名を指定します。省略された場合は<Source file>と同じファイル名になります。
※ DOS2では、ファイル名にパスを含めることができます。
[Option]

 オプションです。使用可能なものは以下の通りです。

確保(#allocなどで)されたバイト数
実際に使用しているバイト数
残りバイト数
となっています。一番下にはそれぞれの合計値が表示されます。


制御命令

#opll_mode <0|1>

OPLLのモード。0はFM9音モード、1はFM6音+リズム音モード。この命令を実行しないと他の制御命令(MMLも)は一切使用できませんので、必ず最初に実行するようにして下さい。

#machine_id <0~7>

データを作成(コンパイル)した機種コードを指定します。この機種コードに対応しているプログラムでは、どのメーカーのマシンでも音量バランスが一定になるように補正を行います。機種コードは今のところ以下の番号が予約されています。

 1:SONY製マシン
 2:Panasonic製マシン
 3:SANYO製マシン

上記以外の機種コードは無効になります(使用しないで下さい)。それらのマシンは0(省略値)を設定して下さい。

#lfo_mode <0|1>

LFOのモード。1を指定するとLFOの速度が若干速めになります。初期値は0です。

#title <"string">

データのタイトル名を定義します。数行に渡って書きたい場合は"{~}"で囲んで下さい。長さは1kバイトまでです。コメントなどを含んでも構いません。

例:#title {   "Falcom  Ys morning grow"
		"要SCC"				}

引用符(")を文字列中に含ませたい場合は2つ並べて書いて下さい。タイトル名が80文字を超えるとObject too bigエラーが発生する場合がありますが、大抵、#allocを使用してトラックバッファを確保(自動的に確保されるバイト数より減らす)すれば抑えられます。

#alloc <track no. = bytes>

トラックバッファを割り当てます。通常、トラックバッファはそのトラックを初めて使用する時に自動的に(16K÷総トラック数(16又は18)バイトが)確保されますが、多くのMMLを書き込むトラックがある場合はこの命令であらかじめ確保しておいて下さい。

例:#alloc 0=100 ← トラック0に100バイトを割り当てる。

    #alloc {	3=100,

5=256 } ← 1度複数のトラックバッファを確保する場合。

トラックバッファの合計は16kバイトまでです。トラック0はMMLを書き込むのではなく、音色設定等で使用されます。通常は設定しなくても初期値で十分足ります。

#psg_tune { cの音程データ,c#の音程データ .... bの音程データ }

PSG音源およびSCC音源の音程の元となるデータを変更します。それぞれのデータはオクターブ1の音程データです(範囲は0~4095。12音程分必要)。通常、使用する必要はありません。

#opll_tune { cの音程データ,c#の音程データ .... bの音程データ }

FM音源の音程の元となるデータを変更します。それぞれのデータはオクターブ1(block情報を除く)音程データです(範囲は0~511。12音程分必要)。通常、使用する必要はありません。なお、この命令を使用するとMMLの@\(デチューン微調整)が狂います(仕様)。

#tempo <57~2047>

テンポを設定します。ソース中、1回のみ有効です。最初にテンポを設定するときはMMLのtコマンドではなく、できるだけこちらを使用して下さい。初期値は120です。

#macro_offset <定義文字 = no>

1文字の英文字(A-Z)にマクロのオフセット番号を定義します。通常、マクロの指定は0-255の数値で行いますがこの命令を使用すると、各文字にオフセット番号を割り当てる事ができ、使用目的が分かりやすくなります。

 例:#macro_offset  a = 32
    *48 = { cdefgab }

    *a16でマクロ番号48を呼び出したのと同じ結果になります。
    #macro_offset { a = 32,
                    c = 16 }
    *20 = { t150 }
    *40 = { v15 }
    *42 = { l16 }
    1 *c4*a8*a10

    トラック1には、"t150v15l16"が書き込まれます。

この指定(*a16など)は、マクロ番号を扱う全ての命令、MMLで使用出来ます。内部でマクロ番号に変換しているだけですので、重複したりオフセット+値の結果が255を超えないように注意して下さい。

#play_start

コンパイル終了後、演奏を開始します。コマンドラインの-pと同じ。

#no_mgs

.MGSファイルを作りません。コマンドラインの-nと同じ。

#track_status

コンパイル終了後トラック毎の使用状態を表示します。コマンドラインの-tと同じ。

#play_track

演奏開始時に指定されたトラックのみを演奏させます。MGSCで演奏する場合のみ有効です。この命令を省略した場合は、全てのトラックが演奏されます。

例:#play_track 367ABR

    トラック3,6,7,A,B,Rのみを演奏する。

なお、この命令は演奏させるトラックを指定するだけで実際に演奏はしません。

#end

ソースの終わりを定義します。MGSCはこの命令が現われた行でコンパイルを終了します。普通は<EOF>をソースの終わりと見なしますので、この命令は省略できます。

#disenable_mgsrc

mgsrc.comで逆コンパイルできないように禁止属性を掛けます。乱用はあまりお薦め出来ませんが・・・。

マクロ定義

MGSCではマクロを定義することができます。マクロの呼び出しは、MMLの"*"コマンドで行ないます。マクロ定義の段階では、内容についての解釈を一切行ないませんのでエラーはマクロを呼び出している行で発生します。

定義の方法は行の先頭で、

*<マクロ番号> = { 文字列 }

とします。マクロ番号の範囲は0~255です(オフセット指定も可能)。文字列は数行に渡って書いても構いませんが、終わりには必ず"}"を書いて下さい。再定義(同じマクロ番号に対して2回以上定義すること)はできません。マクロ全部の長さは4kバイト以内にして下さい。

プログラム制御用文字列定義

外部プログラムに受け渡す文字列を定義します。外部プログラム側で適当に解釈して演奏とタイミングを取るなど、色々と利用できます(具体的にはMGSDRV内のワークエリア(MIB)へアドレスが渡されます)。MGSELではMMLの@mコマンドを使用して文字列を呼び出すと、その文字列を画面上に表示するようになっています。

定義の方法は行の先頭で、

@m<定義番号> = { "文字列" }

とします。文字列は引用符で囲まれていなければなりません。定義番号は0~127の範囲です。番号を省略すると直前に指定された番号(初期値0)+1が用いられます。コントロールコードなどはエスケープ記号(\)を使用して、指定したいキャラクタのコードに40Hを足したキャラクタを書きます(^Cなら\C、^Zなら\Z)。それ以外に次のような指定も可能です。

   \\ \を意味する。

     \"		"を意味する。
     \x??		16進数(2桁)で指定されたキャラクタ。

エスケープ記号の直後に書かれた文字は大文字化されます。\@は文字列の終了コードとして内部で用いられていますので使用できません。 文字列はトラック0に書き込まれます。多くの文字列を定義する場合はあらかじめ#alloc等でトラックバッファを多めに確保しておいて下さい。 制御文字列を使用した時の動作などは、それぞれのマニュアルを参照してください。

音色定義

行の先頭が"@"である場合、音色定義となります。<number>はすべて音色番号を意味します。範囲は0~31です。

@e<number> = { Mode,Noise,data...data }

エンベロープデータを定義します。旧MGSDRV(以下MGSDRV ver2.xxのことを示します)の_ESETと同じ形式です。

(1)Mode

PSG音源で使用された場合のトーン・ノイズのモードを指定します。範囲は0~3、省略値は1です。

 0 ... 無指定(変化なし)  1 ... トーンのみ  2 ... ノイズのみ  3 ... トーンとノイズ

(2)Noise

PSG音源のノイズ周波数を指定します。PSG音源以外のトラックで使用された場合は無視されます。Modeが2以上の場合のみ有効です。範囲0~31、省略値0。

※ ModeとNoiseは@コマンド実行時に設定されるだけです。

(3)Data

エンベロープデータを指定します。約255文字(内容により異なる)まで書けます。

0~f(16進数)

その音量を設定して、1カウント待ちます。以下<音量>と記します。

<音量> : <カウント>

音量を設定して、カウント数だけ待ちます。

<音量> = <カウント>

現在の音量から指定された音量まで、カウント数の時間を掛けて自動的に変化させます。

n<ノイズ周波数>

PSG音源のノイズ周波数を変更します。(2)のNoiseと同じです。

/<モード> 又は *<モード>

PSG音源のモードを変更します。(1)のModeと同じです。

[

繰り返し開始位置の定義。

]

繰り返し終了位置の定義。

@<音色番号>

音色データの変更を行ないます。SCC音源およびFM音源のみ有効です。エンベロープは変更されず、音色データのみが変更されます。当然、@v(@s)でその音色が定義されていなければなりません。

y<r>,<d>

レジスタ<r>へ、データ<d>を書き込みます。実際に書き込まれるレジスタはこのエンベロープを使用中の音源になります。SCCの場合は無視され、実行されません。

\<n>

現在の周波数に<n>を加えます。範囲は-127~127。正の数で周波数は高くなります。単位はMMLの"\"と同じです。

.,

区切り。数値と数値の間に入れて下さい。(例:n4.456789)

※ <カウント>の範囲は2~239です。

@r<number> = { Mode,Noise,AL,AR,DR,SL,SR,RR }

エンベロープデータを定義します。

Mode ... @eと同じ Noise .. @eと同じ

AL,AR,DR,SL,SR,RRについて簡単に説明します。それぞれの値の範囲は0~255です。

AL ..... アタックレベル

キーオンされた瞬間の音量。値が大きい程音量も大きくなります。

AR ..... アタックレート

キーオンされた時から音量が最大点(255)に達する速さ。実際の処理ではALにARを毎回加算して255を超えると次のDRの処理に移行します。

DR ..... ディケイレート

最大点から次のSLに達する速さ。最大点からDRの値を毎回減算してSLと同じか、小さくなると次のSRの処理に移行します。

SL ..... サスティンレベル

DRからSRへの移行点。

SR ..... サスティンレート

音量が減衰する速さ。SLの値からこの値が毎回減算されます。音量が0になるか、キーオフされるまでこの処理は続きます。あまり大きい値を指定すると一瞬で音が切れてしまいますので10位までが適当な値です(意図的に行う場合は別として)。

RR ..... リリースレート

キーオフされた時から音量が減衰する速さ。現在保持しているエンベロープの音量からRRの値を毎回減算します。

※@rと@eは同じ領域を使用して定義されますので、同じ番号に対して両方を定義することはできません。そのような場合は後に設定された方が有効になります。

@s<number> = { data1 .... data32 }

SCC音源の音色データを定義します。dataは16進数(00~ff)です。データは必ず32個必要です(省略は出来ません)。

例:@s02 = { 7f7f7f7f 7f7f7f7f 7f7f7f7f 7f7f7f7f	;PSG

80808080 80808080 80808080 80808080 }

@v<number> = { data ... }

FM音源のオリジナル音色を定義します。

例:@v15 = { ;BRASS

  ;       TL FB
          25, 7,
  ;       AR DR SL RR KL MT AM VB EG KR DT
           8, 8, 1, 2, 0, 0, 0, 1, 0, 0, 0,
           8, 2, 1, 1, 1, 1, 0, 1, 0, 0, 0 }

パラメータの並びは旧MGSDRVの_VSETCと同じです。

@#<number> = <n>

音色に割り付けられているROM音色番号を変更します。MGSCでは@0~@14にそれぞれ、1~15のROM音色を割り当てています。@15以上はすべて0(オリジナル音色)となっていますので、@vでの音色設定は<number>が15以上である場合のみ意味を持ちます。@#はそれぞれの音色に割り当てられているROM音色番号を変更するものです。<n>は0~15で、0がオリジナル音色を意味します(その他の番号については後述)。

コメント

MMLを含む、すべての行の中に";"(セミコロン)が見つかると、それ以降から行の終 わり(CRLF)までをコメントと見なして無視します。

MMLについて

エラーについて

MGSCはソース中に1つでもエラーが発見されると、適当なエラーメッセージを表示してコンパイルを中断します。

<エラーの原因> in <行番号>
>> <その行の内容(全部)>

エラーの原因は、漢字ドライバが起動している場合は漢字で、テキストの場合は英字で表示されます。行番号は0から数えています(KID.COM,AKID.COMでは表示と一致します)。なお、表示された行にエラーがあるとは限りませんので注意して下さい(特にマクロ使用時や"{"-"}"での"}"を忘れた場合など)。

補足

変更点