わんきちのテキスト

保存したいテキストをぶっ込むところです。

MUSIC.COM MMLリファレンスマニュアル

昔々、あるところにRPGツクールというソフトがあったんだよ!

そのツールに付属していたFM音源サウンドドライバーが「MUSIC.COM」なのです。

そのマニュアルについてはよくわからん状態で配布されていたけど

今はなかなか入手困難なのだよ。このままではロストする。

なので、ブログにダラダラ書き、公開しておきます。まさに俺得情報。

FM音源ドライバーMUSIC.COM MMLリファレンスマニュアル Ver.1.5
BY KEEN・YAMAMOTO with LOGINSOFT編集部 (C)1996_Aug LOGINSOFT
1.はじめに  MUSIC.COMはLOGIN DISK&BOOKシリーズで使われてきた、FM音源を演奏させるための制御プログラムです。今まで、このMUSIC.COMの解説マニュアルは、ブラザーソフトウェア自動販売機TAKERUから販売の『バカスカウォーズ』にしか収録されていませんでした。しかし、「MUSIC.COMのマニュアルはないのでしょうか?」という多数の要望に応えるべく、今回新たにリニューアルしたものを収録することになりました。  自分で作ったゲームに、自分の音楽を入れたいという気持ちは誰にでもあるはずです。MUSIC.COMは、MML(Music Macro Language・音楽演奏のための言語)という形式の音楽データを読み込んで演奏をしています。このMMLデータの作成は決して簡単ではありませんが、使いこなすことによって、Dante98やシューティングツクールなどで作ったゲームで、オリジナルのBGMを鳴らすことができます。『音楽ツクールLOGIN版ミュージアム』でもこのMMLデーターは作成できますが、自分でMMLが作成できるようになれば、さらに細かい指定も可能になります。このマニュアルを熟読して、ぜひ自分のゲーム音楽制作にチャレンジしてみてください。  MMLデータの作成のためには、テキストエディターを使用します。ソフコンCDの に『LEDIT』というテキストエディターが収録されていますのでご利用ください。また、VZやMIFESなどの市販ソフトを使ってもけっこうです。  MUSIC.COMの実行に必要な各ファイルの説明をします。   MUSIC.COM ……FM音源ドライバ本体   SOUND.DAT ……効果音データ(テキストファイル)   *.MML (*はファイルネームです) ……曲データ(テキストファイル)  なお、SOUND.DATはMUSIC.COMと同じディレクトリに置いておかないと、MUSIC.COMが使えませんので、注意してください。 2.MUSIC.COMの動作環境  MUSIC.COMは、MS-DOS Ver.3.0 以降の環境で動作します。対応音源ボードは、NEC製FM音源ボード『PC-9801-26K』(OPN)と、NEC製『PC-9801-86』などの26Kボードと完全な上位互換を持つFM音源ボードです。また『PC-9801-118』でご使用の際には、MUSIC.COMのVer.2.15(Dante98Ⅱに付属)以降が必要になります。  なお、MUSIC.COMを使う場合は、本体のマニュアルに従って、メモリスイッチの「サウンド」を「サウンドBIOSを切り離す」にしてください。 3.MUSIC.COMの使い方 MS-DOSコマンドラインから   MUSIC ファイル名.MML と入力すると、その音楽ファイルの曲が聴けます。曲が鳴ってる時にaからZまでのキーを押すと効果音が鳴ります。ESCキーで終了します。   MUSIC -S で効果音のみのテストモードになります。[a]~[Z]のキーを押してみてください。また、   MUSIC -R で、FM音源ドライバーの常駐/開放を行なうこともできます。これは、ほかのプログラム(ツクールシリーズなど)からMUSIC.COMを使うときに使用します。 4.MMLの表記における基本的事項  MML(Music Macro Language)は、コンピューターで音楽を演奏させるために作られた言語です。MUSIC.COMはこの形式で作られたファイルを先頭から順番に読み込んでいって曲を演奏します。そのため、間違えているMMLファイルを演奏させようとすると、正常に演奏されません。 コマンドラインで   MUSIC ファイル名.MML を実行して曲を演奏した際に、もし……   *** FM音源ドライバー Ver 2.00 ***   エラー ***.MML 71: 文法が違いまっせ   エラー ***.MML 114: MMLのコマンドが違いまっせ のように、エラーメッセージが出る場合は、作成したMMLファイルの中に間違いがあるということです。「エラー ファイル名」のあとの数字がそのエラーの発生した行番号です。このマニュアルとその行を照らし合わせて間違いを訂正してください。  行番号の次に出ているのは、エラーの種類です。エラーメッセージを標準出力でエディタに読み込み、タグジャンプ機能を使うと便利でしょう。  なお、エラーの種類によっては、必ずしも表示された行に間違いがあるとは限りませんので、注意してください。 *パート表記の方法  行頭にチャンネル番号を指定して、その後に":"(コロン)を指定することにより、その行はそのチャンネルで演奏されるMMLデータとなります。チャンネル番号とMMLは、必ず":"で区切られている必要があります。下のふたつの例を参考にしてみてください。   良い例.   1: @1V12L4 CDC4 CDC4 CDCD E4CR    これで、1チャンネルはこのMMLを演奏されます。   悪い例.   1 @1V12L4 CDC4 CDC4 CDCD E4CR    これだとチャンネル表記が行頭でないのと、チャンネル記号とMML     ":"で区切られていないためにエラーが出てしまいます。 *チャンネル番号と音源の対応   1: ……FM 1チャンネル   2: ……〃 2チャンネル   3: ……〃 3チャンネル   4: ……SSG1チャンネル   5: ……〃 2チャンネル   6: ……〃 3チャンネル  なお、4,5チャンネルは効果音として使われる場合がありますので、このふたつのチャンネルにはコードなどの隠し味程度のパートを演奏させることをおすすめします。 *コメントの表記方法について  コメントとは、MML中に記す注釈などのことをいいます。  MML中にコメントを記したい時は、行頭に";"(セミコロン)を付けることによって、その行はコメント行となります。MMLを演奏するときには、このコメント行は無視して読み飛ばします。   例.   ;Exanple for Comment ←この2行はコメントになります   ;BY KEEN・YAMAMOTO  ので、演奏の際には無視されます。   1:L8 {2 ER GG4G } AR>CC4  上の例では、行頭に";"の付いた行はコメント行とみなされて読み飛ばされ、1チャンネルのMMLのみが演奏されます。 5.MMLコマンド・音程、音長 ここから、MML本体のコマンド群に関しての解説をします。 [] に囲まれたパラメータは、省略可能であることを示します。 音源:FMとSSGでは機能が異なるため、使用できるコマンドが違ってくる場合があります。この項目には、そのコマンドが使用できる音源を表記します。それぞれ具体的に以下のチャンネルとなります。   FM FM音源チャンネル (1~3)   SSG SSG音源チャンネル(4~6) ★ A B C D E F G + - &(音符指定)用途:音符を指定します。 書式:A~G [+-][num][&]…… *numは音長 音源:FM/SSG 解説:A~Gはそれぞれ   A B C D E F G   ラシドレミファソ に対応します。A~Gの後ろに+-をつけることによって半音を表現できます。 +がシャープ。-がフラットです。  また、記号のあとに数字を記述することで、音長の指定ができます。音長を指定しないと、 後述のLコマンドで指定した長さになります。  指定できる音符は、1,2,4,8,16,32,64です。音長の後に.(小数点)を付けることによって付点を指定できます。  全音符以上の長さを使いたい場合は、音符と音符を&(タイ)つないで使うようにしてください。下記の例を参考にするといいでしょう。   例.   D ○ レの音(長さはL(後述)で指定した長さ)   D4 ○ レの4分音符   E8 ○ ミの8分音符   A1 ○ ラの全音符   F4. ○ ファの符点4分音符   G+ ○ ソのシャープ(長さはLで指定した長さ)   B-4 ○ シのフラットの4分音符   C+4. ○ ドのシャープの符点4分音符   C1&C4 ○ ドを全音符+4分音符つなげて鳴らす   C8&C8 ○ ドの8分音符を2つつなげて鳴らす。4分音符と同じ   C. × これはエラーになってしまいますので注意!   C.+ × これもエラーになります。間違えやすいので注意! ★ R用途:休符を指定します 書式:R [num] *numは休符の長さ。音符コマンド参照。 音源:FM/SSG 解説:休符です。音長の指定はA~Gと同じです。  音長を省略するとLで指定した値になります。   例.   R 休符。長さはLで指定した値。   R4 4分休符   R8. 符点8分休符 ★ W用途:Rコマンドとほぼ同じですがキーをオフしません。 書式:W [num] *音符、Rコマンドを参照 音源:FM/SSG 解説:Rコマンドとほぼ同じですが、音はそのまま鳴り続けます。  ただし、後述のQコマンドで8以外の値を指定している場合は、音が終る時点でキーをオフにしますので、Rコマンドと同じ働きになってしまいます。 ★ L用途:音長の指定を省略したとき鳴る音長を指定します。 書式:L num *numは指定する音長。音符コマンド参照。 音源:FM/SSG 解説:例えば、下記のMMLを見てください。   1: C4D4E4 R4 C4D4E4 R4 G4E4D4C4D4E4C4 R4 G4G4E4G4A4A4G4 R4 E4E4D4D4C2. と……   1:L4 CDE R CDE R GEDCDEC R GGEGAAG R EEDDC2. 上のふたつのMMLはどちらとも同じ曲を演奏をします。 Lコマンドを使うことによって、無駄に長くなりがちなMMLデータを短くできます。 ★ O,<,>用途:オクターブを指定します。 書式:O num *numはオクターブ値。1から8までの数値を指定する。 音源:FM/SSG 解説:オクターブを指定します。オクターブ値は1~8までです。  1がもっとも低音で、8がもっとも高音になります。   例.   O1 ……オクターブを1にします。   O6 ……オクターブを6にします。  <>はそのときのオクターブから、相対的に1オクターブ上げたり下げたりします。   例.   > ……1オクターブ上げる   < ……1オクターブ下げる   O3 CDEFGAB > C ……オクターブ3のドから順に音階を上げていきます。   O4 C <BAGFEDC ……オクターブ4のドから順に音階を下げていきます。 ★ T用途:テンポを設定します。 書式:T num *numは1分間に4分音符が入る数です。 音源:FM/SSG 解説:   例.   T120 ……テンポを120にします。  基本的に、すべてのチャンネルの最初に同じ値で、T指定をしてください。そうしないと、チャンネルごとにテンポがバラバラになってしまいます。 ★ V用途:音量を設定します。 書式:V num *numは0~15までです。 音源:FM/SSG 解説:V0を指定すると無音状態になります。V15を指定すると最大音量です。 ★ @用途:音色を設定します。 書式:@ num *音色番号0~20まで。 音源:FM/SSG 解説:音色を変えます。音色は SOUND:、あるいは SSGENV:で定義されていなければなりません。音色の設定方法に関しては後述します。  FM1~3チャンネルでは、SOUND:コマンドで設定した音色を、SSG4~6チャンネルでは、SSGENV:コマンドで設定した音色を、そのチャンネルの使用音色として設定します。  SSG4~6チャンネルでは、@0でソフトウェアエンベロープ解除となります。 ★ Q用途:音符のゲートタイム 書式:Q num *numは1~8 音源:FM/SSG 解説:   例.   1:Q7L8cdecdec  Qで指定された値をnとすると、その音符の長さのn/8の時点でキーをオフにします(SSG音源では完全に音が消えます)  つまり、nが1であれば「ピッ」と音が鳴り、nが8の場合は「ピ~」と鳴ります。 ★ N用途:音程を指定した数値だけずらします。 書式:N num *numは-255から255までです。 音源:FM/SSG 解説:   例.   1:N12 @5ced   2:N-12@5ced  最高値の±255で、上下半音までずらせます。  範囲外の指定を行った場合の動作保障はできません。 ★ P用途:音と音を滑らかに結ぶ、ポルタメント効果を設定します。 書式:P num *numはポルタメントの長さ。 音源:FM/SSG 解説:キーオンしてから64音符の長さ×numがたったあと、本来の音程になります。  P0 でポルタメントを解除します。  後述のIコマンドと同時に使えません。あとで指定した設定が優先されます。   例.   O3 C8 P8 >C4 P0 <C8  上記の例だと、オクターブ3のドからオクターブ4のドに滑らかに移行したあと、ポルタメントが解除された状態で再びオクターブ3のドに戻ります。 ★ U用途:音量に対して矩形波のLFOをかけ、トレモロ効果を設定します。 書式:U num1,num2[,num3] *num1は振幅、num2は周期、num3はLFOディレイ。num2,3は0~255までです。 振幅 :V で指定するのとほぼ同じ 周期 :num2×64分音符の長さ LFOディレイの長さ :num3×64分音符の長さ 音源:FM/SSG 解説:トレモロの効果を出します。  U0でトレモロ効果を解除できます。  Iコマンドとの同時使用はできません。あとに指定した設定が優先されます。 ★ I用途:音程に対して矩形波のLFOをかけ、ビブラート効果を設定します。 書式:I num1,num2[,num3] *num1は振幅、num2は周期、num3はLFOディレイ。num1~3は0~255までです。 振幅 :N で指定するのとほぼ同じ 周期 :num2×64分音符の長さ LFOディレイの長さ :num3×64分音符の長さ 音源:FM/SSG 解説:ビブラート効果を出します。  I0でビブラート効果を解除します。  P、Uコマンドとの同時使用はできません。あとに指定した設定が優先されます。 ★ S用途:SSGのハードウェアエンベロープ形状を設定する。 書式:S num *numはエンベロープ形状。0~14 音源:SSG 解説:SSG音源のエンベロープ形状を設定します。numの値は1~14です。各数値に割り当てられたエンベロープの対応を下図に記します。 ・num      エンベロープ形状 ・0,1,2,3,9   |\___________ ・4,5,6,7,15  /|___________ ・8       |\|\|\|\|\|\|\|\|\ ・10      \/\/\/\/\/\/\/           ____________ ・11      \| ・12      /|/|/|/|/|/|/|/|/|          ____________ ・13      / ・14      /\/\/\/\/\/\/\  SSGENV:コマンドとは同時に使用できません。 ★ M用途:SSGのハードウェアエンベロープ周期を設定する。 書式:M num *numはエンベロープ周期。0~65535 音源:SSG 解説:発生されるエンベロープ周期は次の式により求められます。   num=667×T÷256   T :エンベロープ周期   num:設定値  SSGENV:コマンドとは同時に使用出来ません。 ★ Y用途:FM音源の内部レジスタに直接数値を書き込みます。 書式:Y num1,num2 *num1はレジスタ番地。num2は書き込むデータ。 音源:FM/SSG 解説:FM音源ICの内部レジスタに直接数値を書き込みます。レジスタ番地等は各音源ボードのマニュアルなどを参考にしてください。  ただし、間違った数値を指定すると誤動作を起こしてしまう場合があり、最悪の場合は暴走してしまうことがあります。このコマンドの意味が理解できない場合は、使わないでください。 ★ {}用途:繰り返し 書式:{num ……MMLコマンド…… } *numは繰り返す回数 音源:FM/SSG 解説:num の回数分、{}で囲まれた部分を繰り返します。  num を0にすると永久に繰り返します。   1:L8 {2 CD4E {3 GEDE } }  ……といったような多重ループも可能ですが、16以上の多重ループを行うとエラーが出てしまいますので注意してください。 6.全体制御  ここで説明するコマンドは行頭に指定し、全パートに影響する制御や曲自体の各種定義を行います。  これらのコマンドは、MMLファイルのどの位置にあっても構いませんが、STR:コマンドの使用に際しては、STR:の項目を参照してください。 ★ SOUND:用途:音色の設定 書式: SOUND: @音色番号(1から20まで) LFO: WF,SPEED,DEPTH,ALG,FB OP1: AR,DR,SR,RR,SL,TL,KS,ML,DT,DT2 OP2: AR,DR,SR,RR,SL,TL,KS,ML,DT,DT2 OP3: AR,DR,SR,RR,SL,TL,KS,ML,DT,DT2 OP4: AR,DR,SR,RR,SL,TL,KS,ML,DT,DT2 音源:FM 解説: →SOUND(1~20):音色番号です。 →LFO:に続いて以下のパラメーターを設定をしてください。  WF(0~3):LFOの波形を指定します。   0 …… 矩形波 _| ̄|_| ̄|_| ̄|_   1 …… のこぎり波 |\|\|\|\|\   2 …… 三角波 /\/\/\/\/   3 …… ワンショットLFO / ̄ ̄ ̄ ̄ ̄  SPEED(1~100) :LFOのスピードを設定します。  DEPTH(-4095~4095):LFOの深さを設定します。  ALG (0~7):アルゴリズムを設定します。0~7の範囲で指定してください。  FB (0~7):OP1にかけるフィードバックの度合を設定します。0~7の範囲で指定してください。 →OP1~OP4:に続いて以下のパラメータを設定をしてください。  AR (0~31):アタックレート。キーオンされてから出力が最大になるまでの時間。31だと速いアタックになる。  DR (0~31):ディケイレート。出力レベルが最大になってから、サスティンレベルになるまでの時間。31だと、すぐにサスティンレベルになる。  SR (0~31):サスティンレート。サスティンレベルからキーオフするまでの時間。0だと、キーオフするまでずっと音が鳴りっぱなしになる。  RR (0~15):リリースレート。キーオフされてから、出力レベルが0になるまでも時間。0に近づけるほど音に余韻が残ってくる。  SL (0~15):サスティンレベル。ディケイレートと、サスティンレートの交換点の出力レベル。  TL (0~127):トータルレベル。各オペレータの出力レベルを決める。0で最大になります。  KS (0~3):キーボドレイトスケーリング。高音になるほどエンベロープが速くなる度合を決める。  ML (0~15):マルチプル。各オペレータの出力する正弦波の周波数が基音の何倍であるかを決める。  DT (0~7):ディチューン。各オペレータが出力する周波数をわずかにずらす。  DT2(0~3):DT でずらした周波数をさらにずらす。これは、Ch3.の効果音モードを用いた、OPM(X68000など) の DT2 をエミュレートした機能ですので、CH.3においてのみ有効な機能です。Ch3.以外でこのパラメーターを含んだ音色を使用しても DT2 の効果 は無効となります。   例.   SOUND: @5   ; FRM SPD DPS ALG FB ←この行はコメント   LFO: 0, 0, 0, 7, 5   ; AR DR SR RR SL TL KS ML DT DT2 ←この行もコメント   OP1: 27, 0, 0, 4, 0, 2,3, 2,-3,0   OP2: 18,10, 0, 5, 1, 6,0, 8,-1,0   OP3: 27, 0, 0, 4, 0, 3,3, 3, 0,0   OP4: 18,10, 0, 5, 1, 8,0, 4, 4,0   1:@5L8 CCGGDDE4 CCEEDDGG+  SOUNDコマンドは、MMLデーター中のどの位置でも指定できます。 ★ SSGENV:用途:SSGのソフトウェアエンベロープを設定する。 書式:SSGENV:@エンベロープ番号,周期,音量1,音量2,…… 音源:SSG 解説:  エンベロープ番号 :1~20  周期 :1以上(×64分音符の長さ)  音量1~…… :0~15(Vコマンドと同じ)   例.   SSGENV:@1,1, 15,13,12,13,11,10,11,9,8,9,7,6   4:@1L8 G8.G8.E4 D16E16 G8.G8.E4 D16E16  SSGENVコマンドは、MMLデーター中のどの位置でも指定できます。  音量を1行で書ききれない場合は、下のように書くこともできます。   SSGENV:@1 , 2, 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0   -> 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0   -> 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0  ハードウェアエンベロープ(S,Mコマンド)とは同時に使用できません。同時に使用しようとした場合は、あとに指定した方が有効となります。 ★ STR:用途:文字変数にMMLを格納する 書式:STR:$文字列名$= 音源:FM/SSG 解説:   例1.   ; バスドラムに@0、スネアドラムに@1を割り当てているものとします。   1:L8 {3 @0V13C4@1V11C4@0V13CC@1V11C4 } @0V13C4@1V11C4@0V13C@1V11{6 C16 }  例1のMMLは無駄に長くなってしまっています。  そこで例2を見てください。   例2.   STR:B$= @0V13   STR:S$= @1V11   STR:R1$= $B$ C4 $S$ C4 $B$ C8C8 $B$ C4   1:L8 {3 $R1$ } $B$ C4 $S$ C4 $B$ C $S$ {6 C16 }  例1と例2のMMLをよく見比べてください。どちらも同じ演奏をしますが、例2の方が例1に比べて無駄がなくなり、全体的に見やすくなりました。  STR:コマンドで、何度も使うような部分は文字変数に格納しておき、MMLの中で $文字変数名$ で展開して使うようにすると、MMLが短くなるだけでなく全体が見やすくなるので、必要に応じて使うようにするといいでしょう。  また、STR:で設定した文字変数の中に更に文字変数を設定する場合は、なかに入る文字変数の設定を、それよりも前の場所で設定しておかないと、エラーが出てしまいますので注意してください。   例3.   STR:R1$= $B$ C4 $S$ C4 $B$ C8C8 $B$ C4   STR:B$= @0V13   STR:S$= @1V11  例3のMMLリストの場合、R1$の中にB$とS$が含まれているにもかかわらず、B$,S$の設定はR1$のあとにあるためエラーが出てしまいます。この場合は例4のように直してください。   例4.   STR:B$= @0V13   STR:S$= @1V11   STR:R1$= $B$ C4 $S$ C4 $B$ C8C8 $B$ C4 7.隠しコマンド  以下に説明する D: パートコマンドを用いることによって、SOUND.DAT中のリズム音を使うことができます。  ただし、このD:パートコマンドの使用はあまりおすすめできません。というのは、このD:パートを使うと、リズム音の内容がSOUND.DATによって変わってきます。そのため、D:パートを使用した曲を他のツクールのSOUND.DATで使うと、作曲者の意図した通りの演奏にならないという弊害が起こります。またSSGの4,5チャンネルが使えなくなる上、あまり音質も良くないということもあって、ほとんどのツクールのMMLデータはこのD:パートを使用していません。そのため、文字通り隠しコマンドとして扱わせていただきます。  D: パート使用の際には、行頭に   D: と指定します。ただし、このD: パートを使うとSSGの4,5チャンネルが使えなくなりますので、注意してください。  また、通常のMMLと違って、音程指定コマンド内容が以下のように変更され、O コマンド、SSGENVコマンド、S、Mコマンドなどは無効となります。 A ... 効果音番号0(スネアドラム) B ... 効果音番号1(クローズドハイハット) C ... 効果音番号2(オープンハイハット) D ... 効果音番号3(バスドラム) E ... 効果音番号4 F ... 効果音番号5 G ... 効果音番号6 これらの内容はあくまでも一例です。使用するSOUND.DATの内容によって異なりますので、注意してください。  そのほかは、他のMMLコマンドと同じです。   例.   D:L16 {3 D8BBA8C8 D8D8A8C8} D8BBA8C8 D8D8A8AA