MGSDRV MML 11 JP

From MSX MUSIC WIKI
Revision as of 04:51, 23 October 2021 by Kumokosi (talk | contribs) (訳注:参考 MSX-MUSIC拡張BASIC MSX Datapack Wiki 3.2より部分引用)
Jump to: navigation, search

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

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

Contents

使用方法

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

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

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

-p コンパイル終了後、演奏を開始させます。MGSDRVが無いとエラーになります。演奏中の操作は、SELECTで早送り(Turbo RのみSHIFT+SELECTで高速早送りができます)、ESCで終了です。MGSDRVを常駐させている場合のみSHIFT+ESCで演奏を止めずに終了させることができます。MGSDRV v3.13以降ならテンキー操作で再演奏、音量調整なども行なえます。
-q -pオプションで演奏が開始されるとESCが押されるか、演奏が終了するまでDOSに戻りませんが、このオプションを指定するとすぐにDOSへ戻ります(MGSDRV常駐時でないと一瞬だけ演奏してDOSへ戻ってしまいます)。-pオプションと一緒に使用しないと意味はありません。
-t コンパイル終了後にトラック毎の使用状態を表示します。括弧の中の数字は左から、
確保(#allocなどで)されたバイト数
実際に使用しているバイト数
残りバイト数
となっています。一番下にはそれぞれの合計値が表示されます。
-s #no_mgs命令を無視して強制的にデータをセーブします。
-n データをセーブしません。デバック中は-pと併用するといいでしょう。
-e CP/Mファンクションのみを使用します(後述の補足参照)。

制御命令

#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と同じです。

[

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

]

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

[訳注:参考 ver.2のCALL ESET(MGS-STR.DOCより)
★CALL ESET(n,n$[)]

 エンベロープ・パターンを定義します。このエンベロープ機能がドライバの一番の
 「売り」だったりします(^_^)  うまく使えば、スナッ○ャーのPSGドラムも完
 璧に再現出来ます。音色番号(n)は0~63で、そのままPSG音源の@コマンド
 に対応します。SCC音源、FM音源でエンベロープを使用したい場合には、@E
 コマンドでエンベロープを音色にコピーしなければなりません。音色データ(n$)は、
 パターンを表す文字列を並べたものです。形式は次の通りです。

	 "モード値,ノイズ周波数,エンベロープ・データ"

 《1》モード		PSGのトーン・ノイズのオン・オフを設定します。0は
			変化なし、1はトーン、2はノイズ、3はノイズとトーン
			です。省略すると1です。PSG音源以外では無視されま
			す。Ver2.20 まで 0 は「音を出さない」だったのですが
			こちらの方が利用価値があると思い、変更しました。

 《2》ノイズ周波数	PSGのノイズ周波数を設定します。モードが2か3の時
			のみ有効です。値は0~31、省略時は0です。PSG音
			源以外では無視されます。

			※これらのパラメータは@コマンドを実行した時点で設定
			されるだけです。

 《3》エンベロープ	音量は、16進数で表します。0~Fで、0が最小、Fが
			最大になります。単に、"音量"とすると1カウント(60
			分の1秒)待ってから次のデータを読みます。エンベロー
			プ・パターンを最後まで処理してしまった場合は、最後の
			音量が出っぱなしになります。例えば_ESET(0,"fcccba9")
			は、fcccba9999・・・・と、なります。エンベロープ中では以
			下のコマンドが使用出来ます。

 (1)Nノイズ周波数	PSG音源のノイズ周波数を設定します。《2》と同じで
			す。PSG音源以外では無視されます。上の方にも書きま
			したが、途中でこのコマンドを使用する場合は初めにノイ
			ズ周波数を戻すようにしておかないと、そのままになって
			しまいます。

 (2)*モード値	PSGのモードを設定します。《1》と同じです。PSG
			音源以外では無視されます。

 (3)音量:時間	音量を出力し、指定された時間だけ待ちます。

 (4)音量=時間	現在の音量から指定された音量までを、時間で指定された
			間で滑らかに変化させます。例えば、"f7=10" とすると、
			"f" から "7" まで自動的に音量が変化します。

 (5)[		繰り返しの開始位置を設定します。2ヶ所以上設定すると
			後に設定された方が有効になります。繰り返し数の設定は
			出来ません(無限ループになります)

 (6)]		繰り返しの開始位置まで戻ります。繰り返しの開始位置が
			設定されていない場合はエンベロープの最初まで戻ります。
			2ヶ所以上設定されていると先に設定された方が有効にな
			ります。ループの中には、必ず音量設定コマンド(0~F
			)を挟んで下さい。何も書かずに"[]" としたり、"[n6]"
			とかすると暴走します。

			※時間は 1/60 秒単位で、2~239です。

 (7)区切り記号	区切り記号として”,/;.”があります。これらはコマンド
			の区切りに使用します。(どれを使用しても構いません)
			例えば "n4" "4=3" というコマンドを並べて書くと"n44=3"
			となりますが、これは "n44" "=3"	に解釈されてしまいま
			すのでエラーになります。そのような場合は、区切り記号
			を使用して "n4,4=3" とすれば、エラーにはなりません。

			∝例∵  CALL WSET(0,"2,7,fn4c:4/0=3[fc]")
				↑特に意味はありません(^_^;
註:参考 ver.2の音色について mgs-mml.docより引用
■ 音色について

 音色データには、FM音源用音色(VSET 命令で定義)、SCC音源用音色(WSET
命令で定義)、エンベロープ(ESET 命令)があり、それぞれ64種、計192種ま
で定義する事が出来ます。FM音源用音色と、SCC音源用音色はそれぞれの音源
専用で、他の音源(トラック)には使用出来ません。エンベロープはPSG固有のデ
ータ(ノイズやモードなど)は無視されますが、FM音源とSCC音源にも使用可能
です。1度@コマンドで音色を変更して、@E コマンドで使用するエンベロープを
コピーして下さい。なお、ここで書いているエンベロープとFM音源の AR,DR,SL,RR
 (FM音源音色のパラメータ)は全く別物です。

_TRK(9,"@1@e6 cdef @6cdef @1cdef"

 この例では、トラック9(FM音源トラック)に、MMLを書き込んでいます。ま
ず、"@1" で音色を変更します(0~14まではオリジナル音色ではないので、OPLL
で定義されている内蔵音色(音色表を参照)になります)"@e6" でエンベロープデー
タ(この場合、_ESET(6,・・・・ で定義されたデータ)を現在選択中の音色("@1")に
コピーします。結果として、"cdef" は 「"@1" の音色(ギター)で、6番のエンベ
ロープが掛かった音」で演奏されます。次に "@6" で音色を変更して、普通に "cdef"
を演奏します。次は、"@1" で "cdef" が演奏されますが、この音色にはエンベロー
プがコピーされているので1番最初の "cdef" と同じ音で演奏されます。1度コピー
されたエンベロープを解除するには、未定議のエンベロープをコピーして下さい。エ
ンベロープ10番に何も定義していないのなら、"@1@e10" でエンベロープは解除さ
れます。SCC音源にエンベロープを使用する場合も同じです。
@<音色番号>

音色データの変更を行ないます。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と同じです。

[訳注:参考 ver.2のCALL VSETCをmgs-str.docより引用]
★CALL VSETC(No,TL,FB,AR,DR,SL,RR,KL,MT,AM,VB,EG,KR,DT
		     ,AR,DR,SL,RR,KL,MT,AM,VB,EG,KR,DT[)]

 FM音源の音色を定義します。音色番号(No)は0~63で、そのままFM音源トラ
 ックの@コマンドに対応します。音色データは一度に全てのパラメータを数値で与
 えます。それぞれのパラメータの意味と、値の範囲は次の通りです。

 No:音色番号(15~63)		  |TL:トータルレベル(0~64)
 FB:フィードバック(0~7)	  |AR:アタックレート(0~15)
 DR:ディケイレート(0~15)	  |SL:サスティンレベル(0~15)
 RR:リリースレート(0~15)	  |KL:キースケールレベル(0~3)
 MT:マルチプル(0~15)		  |AM:トレモロ(0=OFF、1=ON)
 VB:ビブラート(0=OFF、1=ON)	  |EG:エンベロープタイプ(0=減衰音、1=持続音)
 KR:キースケールレート(0~1)	  |DT:半整流(0=OFF、1=ON)

 1行目の AR から DT まではモジューレータ、2行目はキャリアになります。

 ∝例∵ (20番に音色定義)

 10 '      No TL FB AR DR SL RR KL MT AM VB EG KR DT
 20 _VSETC(20,25, 7, 8, 8, 1, 2, 0, 0, 0, 1, 0, 0, 0    ← モジュレータ
		  , 8, 2, 1, 1, 1, 1, 0, 1, 0, 0, 0)   ← キャリア

 この音色をMML中で鳴らすには、

 _TRK(9,"v15@20cdef
	   ↑(音色番号)

 とでもすればいいでしょう。有名ですが、OPLLのオリジナル音色は複数を同時
 には鳴らせません(エコー中の音色切り替えに注意!)

@#<number> = <n>

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

=====註:参考 ver.2の音色について mgs-etc.docより引用=====

===============================================================================
==		   MGSDRV Version 2.35		     ==
==									     ==
==		      Copyright(C) 1991,1992 by Ain.			     ==
===============================================================================

●FM音源の音色データ構成(CALL VSET の形式)

  BASICで使用する音色データとは並び方もバイト数も違いますが、バイトごとの
内容はほんとんど同じです。DCとDMはBASICにはないパメータですが、特に使
う必要はないと思いますので説明は省略します。(実はよく知らなかったりする(笑)
MuSICAで「ディストーション」となっているパラメータです)

  (C)はキャリア、(M)はモジュレータを示します。

※ **** は空きです。(書き込んでも何も起こりません)
  Byte はOPLLのレジスタ番号とも対応しています。

 Byte    Bit
+-----+---7----+---6----+---5----+---4----+---3--------2--------1--------0----+
| 00  | (C)AM  | (C)VIB | (C)EG  | (C)KSR |          (C)MULTIPLE              |
+-----+--------+--------+--------+--------+-----------------------------------+
| 01  | (M)AM  | (C)VIB | (C)EG  | (C)KSR |          (M)MULTIPLE              |
+-----+--------+--------+--------+--------+-----------------------------------+
| 02  |     (M)KSL      |                  TOTAL LEVEL                        |
+-----+-----------------+--------+--------+--------+--------------------------+
| 03  |     (C)KSL      | ****** |   DC   |   DM   |        FEED BACK         |
+-----+-----------------+--------+--------+--------+--------------------------+
| 04  |         (M)ATTACK RATE            |         (M)DECAY RATE             |
+-----+-----------------------------------+-----------------------------------+
| 05  |         (C)ATTACK RATE            |         (C)DECAY RATE             |
+-----+-----------------------------------+-----------------------------------+
| 06  |        (M)SUSTAIN LEVEL           |        (M)REREASE RATE            |
+-----+-----------------------------------+-----------------------------------+
| 07  |        (C)SUSTAIN LEVEL           |        (C)REREASE RATE            |
+-----+-----------------------------------+-----------------------------------+

●音色対応表

  FM-PAC(MSX-MUSIC)と、MGSDRVとの音色対応表です。音色
名にカッコが付いているのはFM-PAC(MSX-MUSIC)での音色名です。
カッコがないものは、YM-2413カタログ(YAMAHA)に記載されている音
色名です。

+------+------+---------------------------------------------+
|MGSDRV|FM-PAC|                音色名                       |
+------+------+---------------------------------------------+
|  0  |  2  |  バイオリン                                 |
|  1  | 10 |  ギター                                     |
|  2  |  0  |  ピアノ(ピアノ1)                         |
|  3  |  3  |  クラリネット                               |
|  4  |  4  |  フルート(フルート1)                     |
|  5  |  5  |  オーボエ                                   |
|  6  |  6  |  トランペット                               |
|  7  |  9  |  オルガン                                   |
|  8  | 48 |  ホルン                                     |
|  9  | 24 |  シンセサイザー                             |
| 10 | 14 |  ハープシコード(ハープシコード1)         |
| 11 | 16 |  ビブラフォン                               |
| 12 | 23 |  シンセ・ベース                             |
| 13 | 33 |  ウッド・ベース(エレクトリック・ピアノ2) |
| 14 | 12 |  エレキ・ベース(エレクトリック・ピアノ1) |
| 15 |      |                                             |
|  :  | 63 |  オリジナル音色                             |
| 63 |      |                                             |
+------+------+---------------------------------------------+

● FMBIOS の音色一覧表

 CALL VSET 、CALL VCHG で "@" を指定した時に、使用出来る音色の一覧です。

+--+---------------+--+---------------+--+---------------+--+---------------+
|No|  Voice name   |No|  Voice name   |No|  Voice name   |No|  Voice name   |
+--+---------------+--+---------------+--+---------------+--+---------------+
| 0|Piano 1        |16|Vibraphone     |32|Piano 3        |48|Tube           |
| 1|Piano 2        |17|Koto 1         |33|E.Piano 2      |49|Shamisen       |
| 2|Violin         |18|Taiko          |34|Santool 2      |50|Magical        |
| 3|Flute 1        |19|Engine 1       |35|Brass          |51|Huwawa         |
| 4|Clarinet       |20|UFO            |36|Flute 2        |52|Wander Flat    |
| 5|Oboe           |21|Synth. Bell    |37|Clavicode 2    |53|Hardrock       |
| 6|Trumpet        |22|Chime          |38|Clavicode 3    |54|Machine        |
| 7|Pipe Organ     |23|Synt. Bass     |39|Koto 2         |55|Machine V      |
| 8|Xylophone      |24|Synthesizer    |40|Pipe Organ 2   |56|Comic          |
| 9|Organ          |25|Synt.Percussion|41|PohdsPLA       |57|SE-Comic       |
|10|Guiter         |26|Synt. Rhythm   |42|RohdsPRA       |58|SE-Laser       |
|11|Santool 1      |27|Harm Drum      |43|Orch L         |59|SE-Noise       |
|12|E.Piano 1      |28|Cowbell        |44|Orch R         |60|SE-Star 1      |
|13|Clavicode 1    |29|Close Hi-hat   |45|Sy. Violin     |61|SE-Star 2      |
|14|Harpsicode 1   |30|Snare Drum     |46|Sy. Organ      |62|Engine 2       |
|15|Harpsicode 2   |31|Bass Drum      |47|Sy. Brass      |63|Silence        |
+--+---------------+--+---------------+--+---------------+--+---------------+

コメント

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

MMLについて

行の先頭が1~Hであると、指定されたトラックへMMLデータが書き込まれます。#opll_modeの設定値によって、トラックは次のように割り当てられます。

モード0(FM9音モード)

 1~3 ... PSG音源  4~8 ... SCC音源  9~h ... FM音源(a,b,c,d…と続きます)

モード1(FM6音+リズム音モード)

 1~3 ... PSG音源  4~8 ... SCC音源  9~e ... FM音源  f ... リズム音(rでも可能)

トラックの指定と、MMLデータの間は1つ以上のスペース(タブ)で区切って下さい。指定を複数ならべることで一度に複数のトラックへの書き込みができます。

例:123a v15cdef ← トラック1,2,3,aに"v15cdef"が書き込まれる。

音長は、"%"でステップ数を指定することもできます。4分音符は48ステップです。(例:a4 = a%48) 1音のステップ数は256まで指定できます。

以下に、使用可能なMMLを示します。小文字で記述してありますが、実際は大小文字の区別はありませんのでどちらで書いても構いません。<n>は数値を意味します。旧MGSDRVと違い、ほとんどの数値は省略できません。MML中のスペース、タブは無視されます。

t<n>

テンポの指定。範囲は57~2047。すべてのトラックに影響する。初期値120。

l<n>

デフォルト音長の指定。範囲は1~192(テンポによって制限がある)。付点や%を用いたりステップ数で指定する事も可能。初期値4。

^<n>

音長コマンドの後に付けて、音長を加算する(タイ)。音長(<n>)を省略するとlコマンドで指定した音長になる。足した結果が256を超えるとエラーになる。

&

スラー。音程の直後で指定された場合のみ意味を持つ。タイとは区別される。

q<n>

音長比。範囲は0~8。0はキーオフされなくなる(FM音源のみ)。初期値8。リズム音トラック不可。

v<n>

音量の設定。リズム音トラックで指定された場合は全ての楽器の音量が設定される。範囲は0~15。PSG音源ではハードエンベロープが無効になる。初期値0。

v+|-<n>

音量を相対的に変化させる。範囲0~15。リズム音トラックで使用すると全ての楽器の音量が変化する。

)<n>

音量を上げる。v+と同じ効果。<n>の範囲1~15。省略値1。

(<n>

音量を下げる。v-と同じ効果。その他は")<n>"と同じ。

v<楽器><n>

リズム音トラックのみ有効。それぞれの楽器の音量を設定する。<楽器名>は、bsmhcのいずれかを指定する。<n>の範囲は0~15。

v<楽器>+|-<n>

指定されたリズム楽器の音量を相対的に変化させる。範囲0~15。

k<n>

PSG音源およびSCC音源のみ有効。キーオフされた後で、音が消える速さを指定する。範囲は0~255。0が最も速い。@rで定義されたエンベロープを使用している場合、およびハードエンベロープ使用中は無視(設定はされるが効果は表れない)される。初期値0。

@<n>

音色を変更する。範囲は0~31。リズム音トラック不可。

@e<n>

@eまたは@rで設定されたエンベロープデータを現在使用中の音色にコピーする。SCC音源およびFM音源のみ有効。PSG音源で使用された場合は@<n>と同じ動作をする。

@r<n>

@e<n>と同じ。

m<n>

PSG音源のみ有効。ハードエンベロープの周期を設定する。範囲は1~65535。

s<n>

PSG音源のみ有効。ハードエンベロープの形状を設定する。ソフトエンベロープは解除される(音色番号は保持しているのでVコマンド等を実行すれば元に戻る)。範囲は0~15。

n<n>

ノイズ周波数の設定。PSG音源のみ有効。範囲0~31。

o<n>

オクターブの設定。範囲1~8。初期値4。

>

オクターブを1つ上げる。

<

オクターブを1つ下げる。

a~g[+,-][n]

音程を発音する。+は半音上がり、-は半音下がる。後に付ける数値は音長を示す(省略するとlコマンドの値になる)。

_音程

直前の音程から指定された音程まで滑らかに変化させる。(例:a_o4c4、a_>>g、a_b%100)

r

休符。音長が省略された場合はBASICと異なりlコマンドの値になる。

楽器名[:]

指定されたリズム音を発生。":"を指定すると音長をデフォルトと見なす(例:bh4 bh:)。リズム音トラック以外では無効。

註:参考 MSX-MUSIC拡張BASIC MSX Datapack Wiki 3.2より部分引用
文字 意味
B バスドラム音を発生
S スネアドラム音を発生
M タムタム音を発生
C シンバル音を発生
H ハイハット音を発生
註:参考 ver.2でのリズム音源コマンドについて mgs-mml.docから引用
■ 補足説明

★リズム音源のコマンドについて

 リズム音源の書き方はBASICと大体同じです。アクセント音量は指定出来ませ
 んが、これはVコマンドで個々のリズム楽器の音量を指定することで同じような事
 行なえます。
 リズム音源ではLコマンドが使えます。使い方は普通のLコマンドと同じですが、
 1度に複数の音が出せるため区切り記号として;(セミコロン)を間にいれます。

∝例∵    bh16h16h16h16sh16h16h16h16
                     ↓
          l16bh;h;h;h;sh;h;h;h;

\<n>

デチューン量の設定。範囲-127~127。初期値0。

@\<n>

デチューン量を細かく設定する。PSG音源とSCC音源では、範囲-32768~32767。128で約半音ずれる。FM音源では、範囲0~255。255で半音上がる。

p<n>

PSG音源およびSCC音源のみ有効。音程を自動的に下げる量を設定する。範囲は0~255。LFOと同時使用は不可能。旧MGSDRVのpコマンドと同じ効果を得る場合は128を足す(0~127と128~255では補正の仕方が異なる)。

h<n1>,<n2>,<n3>,<n4>

音程LFOを設定、開始する。波形は三角波のみ。

n1:ディレイ(0~255) n2:深さ(0~127) n3:スピード(0~255) n4:粗さ(-127~127)

@p<n>

LFOの粗さを細かく設定する。PSG音源およびSCC音源のみ有効。範囲-32768~32767。通常、音程LFOを設定した直後に用いる。

ho

音程LFOを開始する。

hf

音程LFOを停止する。

hi

音程LFOを初期化してディケイの処理に戻す(LFOのパラメータ自体は初期化されない)。

[<回数>~]

囲まれた中を指定された回数だけ繰り返して演奏する。回数は0~255。0の場合は無限ループ。省略値は2。16重まで重ねが可能。

[~]<回数>

上と同じ。ただし回数はカッコの外に書く。

|

繰り返しのコマンドの中で用いる。最後の1ループを演奏中なら、そのループを抜ける。

so

FM音源のみ有効。サスティンをonにする。

sf

FM音源のみ有効。サスティンをoffにする(初期状態)。

ko

リズム音トラックのみ有効。リズム音発生の度に音を切らないようにする(初期状態)。

kf

リズム音トラックのみ有効。リズム音発生の度に音を切るようにする。

/<n>

FM音源では強制的にキーオフさせる(q0実行時などに有効)。PSG音源ではトーン、ノイズのモードを変更する。範囲は0~3。意味は@eのModeと同じだが、0は"音を出さない"となる。それ以外のトラックでは無効。なお、FM音源で使用する場合、パラメータは無効。

y<n1>,<n2>

レジスタn1へデータn2を書き込む。実際に値を書き込む音源は、演奏中のトラックによって自動的に判断される。n1の範囲はFM音源(リズム)の場合0~56、PSG音源の場合0~15。データの範囲は0~255。SCC音源では無効。

@l<n>

オリジナル音色(FM音源)のtotal levelを変更する。y2,<n>と同じ。PSG音源およびSCC音源では無効。

*<n>

指定された番号のマクロを呼び出す。8重まで重ねが可能。範囲0~255(オフセット指定可)。

!

このコマンドを実行したトラックの以降のMMLをすべて無視する。

@m<n>

制御文字列の呼び出し。範囲0~127。値を省略すると直前に指定した番号(初期値0)+1が指定されたと見なされる。省略した場合の処理はコンパイル段階で行なわれるので注意。

@o<n>

制御文字列番号のオフセットを指定する。例えば"@o2@m12"とすると実際には2(@o2)+12(@m12)で"@m14"が指定されたことになる。歌詞など、MMLは1ループ分だけで歌詞データのみを変更したいときなどに有効。

@f

MIBの[fadefg]をインクリメントする。MGSELではフェードアウトが開始されるが、実際の動作はプログラムによって異なる(何も起らない場合もある)。

$

デバッグ用コマンド。-pで演奏させた場合、"$"コマンドの位置まで自動的に早送りする。

エラーについて

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

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

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

補足

(1) テンポについて

MGSCではどのようなテンポを設定しても、トラック間の演奏ずれ(いわゆるテンポずれ)は絶対に起こりませんが、演奏中にテンポを変更する場合は注意が必要です。テンポの変更(最初に設定する場合は、#tempoを使用して下さい)は必ず1番最初のトラックで行ない、途中で変更する場合は他のトラックとタイミングを合わせて行なわなければなりません。

    例:1 t86l4ct190def
         2    l8ccddeeff
         3    l16cdecdecd

上の例のような位置で変更する場合、ずれは起こりませんが次の例のような場合はテンポの変更位置が2、3トラックで音程を発生している途中ですので、ずれが起こります。

    例:1 t86l8ct190def
       2    l4cdef
       3    l4gggg

テンポはトラック毎に独立しません。上の2つの例はトラック2、3ではテンポが設定されていませんが、トラック1で変更された時点(正確には、次の音符発生)で他のトラックも影響を受けます。例を挙げますと、次のようなテンポの設定はトラックバッファを消費するだけです。

       例:1 t86cdet90cdet100cdef
          2 t86efgt90efgt100efga
          3 t86ccct90ccct100cccc

(2) 音長指定について

MGSCの"%"指定による音長指定の意味は、旧MGSDRVと異なります。旧MGSDRVではテンポによって値が異なりましたが、MGSCではテンポの影響を受けません。例えば4分音符は常に%48です。MGSCでは192で割り切る音長を使用する限り、%で音長を指定する必要はありません。5連符などは192では割り切れませんので、そのような場合は適当に等分した音長を%で指定する必要があります。

使用可能な最短音長はテンポによって影響を受けます(MGSDRVでは1/60秒以下の音長を発生することはできません)。あるテンポでの最短音長は次の式で計算できます。

   14400÷テンポ = 最短音長(小数点は切り捨て)

ただしこの式での答えが、192を超えても最短音符は192分音符となります。

(3) MGSDRVの検索について

-pオプションで演奏させるには、MGSDRVが必要になります。常駐していれば、それ を使用しますが、常駐していない場合は環境変数mgsdrvで指定されたファイルを読み 込みます。DOS1ではカレントドライブからMGSDRV.COMを検索します。

※ 本バージョンでコンパイル済みのデータはMGSDRV v3.13以降でのみ演奏できます。

(4) ROM音色番号の割り当て

 音色名はMSX-MUSICと異なります。

   音色番号    ROM音色番号    音色名
   0            1	   バイオリン
   1            2	   ギター
   2		 3	   ピアノ
   3		 4	   フルート
   4		 5	   クラリネット
   5		 6	   オーボエ
   6		 7	   トランペット
   7		 8	   オルガン
   8		 9	   ホルン
   9		10	   シンセ
  10		11	   ハープシコード
  11		12	   ビブラフォン
  12		13	   シンセベース
  13		14	   ウッドベース
  14		15	   エレキベース
  15		 0
   :		 :	   オリジナル音色
  31		 0

(5) コマンドラインの-eオプションについて

-eオプションを指定するとCP/Mファンクションのみを使用するようになります。 CP/Mエミュレーター等でも動作しますが、Z80命令をサポートしている必要があり ます。当然の事ですが演奏は行えません(-pなどを指定しても無効)。

変更点

version 1.06(非公開)

-@fコマンドを追加。
-$コマンドを追加。
-turbo Rの高速モードで-pオプションを付けて演奏させたとき、早送り(SELECT)の速度にウェイトを掛けるようにした。
-SHIFT+SELECTキーで高速早送りができるようにした(turbo Rの高速モードのみ)。
-制御命令の追加。
-演奏が終了した時、自動的にDOSへ戻るようにした。

version 1.07

-#macro_offset,#machine_idの追加。
-ver1.04からずっとバグがあった、MMLを"{"~"}"で囲めるという機能を却下(^^;
-hi(LFO初期化)コマンドを追加した。

version 1.08

-制御文字列中で漢字を使用すると化ける事があったので直した。
-#disenable_mgsrc命令の追加。
-データを強制的にセーブする-sオプションの追加。

version 1.09

-@eエンベロープにY、\コマンドを追加。
-DOSのend of fileエラーが発生することがあったので直した。

version 1.10

-@eエンベロープ中の"/"コマンドが正常に機能しない場合があったので直した。
-#opll_tuneを付けた。
-MMLに@lコマンドを追加した。

version 1.11

--qオプションを追加。
-ソースに標準入力を指定出来るようにした(type a.mus | mgscとか)。
-CP/Mに対応。

★ 転載、配布は自由に行なって下さい。


Special thanks: TARO Saibara BLASTER TAKAWO CHABIN

参考:MXCのドキュメント

MARIO NET  :AIN FALCON NET :FALC0180 NATSUME NET:NAT25667

Ain