===============================================================================  勤労4号・MML解説書 "キンロウMML.DOC" ===============================================================================  このドキュメントでは、勤労4号のMML(ミュージック・マクロ・ランゲージ)を 解説します。  勤労4号はアスキー製のミュージックツール『MuSICA』のMML及びデータの 上位互換であり、今までのMuSICAにおいて不満の残っていたループ関連や相対指 定などの機能不足を完全に解消した上で、大幅なグレードアップが実現されています。  そのため、初めてミュージックコンパイラに触れる方はもちろん、MuSICAを使 用していて多くの不満を感じていた方も、勤労シリーズには必ず満足できるはずです。 ▼基本的なMML記述方法=======================================================  MMLは、テキストエディタ(AKIDなど)を使用して、テキストファイルとして 記述します(このテキストファイルを「ソースファイル」と呼びます)。  なお、ソースファイルの拡張子は必ず“MSD”にしてください。  データは、シーケンスデータとブロックデータに分かれ、ブロックデータで任意のラ ベルにMMLを定義し、シーケンスデータで各ラベルの演奏順を指定する方式です。  つまり、BASICにおける文字変数へのMML定義部分がブロックデータであり、 PLAY文の部分がシーケンスデータということになるのですね。  実際の指定時には、シーケンス名、ラベル名の後に「=」を置いてから、そこに続け てデータを書いていきます(データ内にリターンやスペースを含めても構いません)。 BASICのようなダブルクォーテーションは不要です。  シーケンスデータでは、カンマで区切って各ラベルの演奏順を設定します。  ラベル名は4文字までで、「[」以外の文字を使用可能です。 (例) FM1=T,A0,A1 ←シーケンスデータ T=T120 ←ブロックデータ A0=O5 ← 〃    L8 V15 ← 〃 A1=CDE ← 〃 ※FM音源のチャンネル1で、ラベルT、A0、A1の順に演奏されます。  MMLで表現すると“T120O5L8V15CDE”という演奏ですね。  シーケンスデータ部で「/」を使用して数値を指定することにより、各ラベルごとの 演奏回数(ループ回数)の指定もできます。 (例) FM1=T,A0,A1/3 ※FM音源のチャンネル1で、ラベルT、A0、A1、A1、A1の順で演奏  されます。  また、「(」と「)」を使うと複数のラベルをループさせることもでき、ループ内の 「:」で最後のループを抜けることもできます。「)」の後に数値を置くことにより、 ループ回数の指定が可能です(値の省略時は2回ループとなります)。 (例) FM1=T,(A0,A1),A2,A3 ※ラベルT、A0、A1、A0、A1、A2、A3の順で演奏されます。 (例) FM1=T,A0,(A1,A2:A3)3,A4 ※ラベルT、A0、A1、A2、A3、A1、A2、A3、A1、A2、A4  の順で演奏されます。  そして、曲全体のループ時に、MuSICAでは必ず曲の先頭まで戻ってしまいまし た(いわゆる「ダ・カーポ」です)が、勤労規格では前奏を飛ばして曲の途中に戻るこ ともできるようになりました(いわゆる「ダル・セーニョ」です)。  この機能を使用すると、勤労規格に対応したドライバでは指定どおりに演奏されます が、勤労規格以外のドライバ(純正の“BGM.BIN”やM.K Basicなど) では2回目以降も最初から演奏されますので注意が必要です。  指定には「^」を使用してください(この位置が「セーニョ」になります)。 (例) FM1=T,A0,^A1,A2 ※1回目はラベルTから演奏し、2回目以降はTとA0を飛ばしてA1からの  演奏となります。  また、勤労では各ラベルの区切りで確実にカンマを付けないとエラーが発生します。 (例) FM1=T,A0,A1         A2,A3 ※この場合、A1の後にカンマが付いていませんので、エラーとなります。 ▼MMLについて===============================================================  ここから、実際のMMLの解説を行います。  なお、記述には下記の構文を使用しました。 ・[項目]……………………省略できる項目です。 ・[,項目・・・]………………同様の項目を複数並べられます。 ・{項目A|項目B} ………いずれかの項目を選びます。 ・{項目A〜項目B}………項目Aから項目Bの範囲内でひとつ選びます。 ・n、r、d………………数値です。値の範囲はMMLごとに異なります。 ・<内容>……………………内容で示された類の文字列を記述します。  また、先頭についている記号が「●」のものはMuSICAと同等の機能のMML、 「◆」のものはMuSICAより機能強化された拡張MML、「★」のものは勤労独自 の新設MMLです。  MMLには半角文字を使用してください(タイトル、メモ、コメントは全角も可)。 ▼システムMML--------------------------------------------------------------- ★[TITLE:<タイトル>] BGMデータ内にタイトル(曲名など)を登録できます。 (例) [TITLE:かえるのうた アレンジバージョン] ※『かえるのうた アレンジバージョン』というタイトルを登録します。  (このように全角文字を使用しても構いません) ★[MEMO:<メモ>] BGMデータ内にメモ(作者名など)を登録できます。 (例) [MEMO:歌/坂本真綾 作曲・編曲/菅野よう子 作詞/岩里祐穂] ※『歌/坂本真綾 作曲・編曲/菅野よう子 作詞/岩里祐穂』というメモを  登録します。 ★[Q] Q指定をバグなしで正しく行うようにします。 従来のMuSICAでは、ドライバにバグがあったため、Q1〜7がそれぞれ Q2〜8になってしまい、本来のQ1の音長が発音できませんでしたが、この MMLを指定すると、Q1が正常なQ1になります。 このMMLはテキスト内にひとつあれば有効ですので、タイトルやメモと同じ ところ(テキスト先頭)に置くといいでしょう。 なお、このバグなしのQ指定で演奏するためには、勤労5号Version 1.03以上 でなければなりません。 ●;<コメント> 注釈文(コメント)用のコマンドです。 このMMLから改行までは注釈文と見なされ、コンパイルされません。  タイトルやメモには半角の「]」と「[」は使用できませんのでご注意ください。 ▼シーケンスMML------------------------------------------------------------- ●FM{1〜9|R} =<シーケンスデータ> FM音源のシーケンスデータを設定します。 FM音源9音モードの場合はFM1〜9、FM音源6音+リズムモードの場合 はFM1〜6及びFMR(リズムパート)が使用可能です。 イコールの手前に半角スペースがないと、シーケンスデータとは認められない ようになっていますのでご注意ください。 (例) FM1 =A1 ※FM音源のチャンネル1でラベルA1を演奏します。 (例) FM2=A1 ※半角スペースがないため、シーケンスデータとは認められません。 ●PSG{1〜3}=<シーケンスデータ> PSG音源のシーケンスデータを設定します。 (例) PSG2=T,P1 ※PSG音源のチャンネル2でラベルT、ラベルP1の順で演奏します。 ●SCC{1〜5}=<シーケンスデータ> SCC音源のシーケンスデータを設定します。 ▼シーケンスデータMML------------------------------------------------------- ●, ラベルとラベルとの区切りに使用します。 純正のMuSICAとは異なり、「T,,A0」のように2つ以上並べたり、 カンマを付けない状態でリターンコードを挿入するとエラーが発生しますので ご注意ください。 ●<ラベル>/n ラベルをn回繰り返して演奏します(n=0〜255)。 0の場合は、そのラベルを演奏しないことになります。 ★^ 2回目以降に前奏部分を飛ばして、このMMLを置いた箇所から演奏します。 ★(…[:]…)[n] 複数のラベルをn回繰り返して演奏します(n=0〜255、省略時は2)。 「,」の代わりに「:」を置くことにより、そこで最後のループを抜けます。  シーケンスデータの記述方法の詳細は、前述の「基本的なMMLの記述方法」を参照 してください。 ▼ブロックデータMML---------------------------------------------------------  ブロックデータMMLは、すべてラベルに定義する形で使用してください。 ●Tn テンポを指定します(n=32〜255)。 普通の音楽的なテンポの値(1分間に4分音符を鳴らせる回数)です。 (例) T144 ※1分間に4分音符を144回鳴らせるテンポにします。 ◆{A〜G|R}[{#|+|−}][%][n][.] C(ド)、D(レ)、E(ミ)、F(ファ)、G(ソ)、A(ラ)、B(シ)の音名に相当す る音を発音します。休符は「R」です。 音名の後に「#」または「+」を付けることにより半音上げたり(シャープの 処理)、「−」を付けて半音下げたり(フラットの処理)できます。 そして、その直後に音長の値を記述して指定しますが、音長は音楽的な値で、 全音符は1になります。 付点は「.(ピリオド)」で表現し、もちろん複付点も可能です。 (例) C4D8.E16F+4..A−16R2 ※4分音符のド、付点8分音符のレ、16音符のミ、複付点4分音符のファの  シャープ、16分音符のラのフラット、2分休符の順で演奏します。 また、音長に「%」を指定すると、60分の1秒単位で細かな音長を指定でき ます(この値はMSXのタイマー割り込みの1カウント単位であることから、 「カウント」という単位名で呼びます)。 この値は14400÷テンポ(Tの値)÷音楽的音長で求められます。 たとえば、テンポ120における4分音符は14400÷120÷4=30、 つまり「C%30」と「T120C4」はそれぞれ同じ音長です。 ★K[n] トランスポーズ(移調)です(n=−48〜+48)。 nの値は半音単位となっています(n×半音分ずらすことができます)ので、 +12で1オクターブ上がり、−12で1オクターブ下がることになります。 また、nを省略すると(「K」だけの場合)、もとに戻すことができます。 なお、純正ドライバでも、このMMLの指定通りに演奏可能です。 (例) K4CDE ※キーを4上げて「CDE」を演奏します(つまり、実際には「EF+G+」 の音が鳴ることになります)。 ◆L[%][n] 音名のMMLで音長を省略したときの値を設定します(n=1〜64)。 nの省略時は4になります。 ここでも「%」を使うことができますが、普通の「L」での値と「L%」での 値は完全に独立していますので注意が必要です。 なお、BASICとは異なり、休符に対しても有効です。 (例) L8CD4EF.G2. ※8分音符のC、4分音符のD、8分音符のE、付点8分音符のF、付点2分  音符のGを演奏します。 (例) L16L%15CD%E8R.F%G%30 ※16分音符のC、15カウントのD、8分音符のE、付点16分休符、  15カウントのF、30カウントのGを演奏します。 ●Q[n] 実際に鳴る音の長さの割合(クオンタイズ)を設定します(n=0〜8)。 例えば「Q4C4」とすると約8分音符の長さで発音されることになります。 0を指定したときは実際の音長から1カウントだけマイナスして発音します。 また、nの省略時は8になります。 ●V[n] ボリューム(音量)指定です(n=0〜15)。値の省略時は8になります。 ★}[n] ボリュームアップです。nの省略時は1だけ上げます。 ★{[n] ボリュームダウンです。nの省略時は1だけ下げます。 (例) V15C{2C{C}3C ※「V15CV13CV12CV15C」と同じ指定です。 ●O[n] オクターブ指定です(n=1〜8)。nの省略時は4になります。 ◆>[n] オクターブアップです。nの省略時は1オクターブ上げます。 オクターブ数を設定できるようになっているため、従来のBASICなどで 「>>>」のように書いていた処理は「>3」のように指定できます。 ◆<[n] オクターブダウンです。nの省略時は1オクターブ下げます。 (例) O4A<A>3A<4A ※[O4AO3AO6AO2A」と同じ指定です。 ●Y[r],[d] 各音源の特定のレジスタ(r)にデータ(d)を書き込みます。 FM音源のリズム音源部の音程変更などに有用です。 (例) Y23,200 ※レジスタ23に200という値を書き込みます。 ●( レガート・オンです。次のレガート・オフとともに使用します。 ●) レガート・オフです。レガート・オンとともにタイやスラーとして使います。 (例) C8(C4C16)C2C16 ※BASICにおける「C8C4&C16&C2C16」です。 ●@[n] 音色の選択です。 FMではn=0〜99、PSGではn=0〜29、SCCではn=0〜49の 範囲になっています。 ●S[n] サスティンの設定です(n=0もしくは省略でオフ、n=1でオン)。 オンにすると、サスティンタイムが5になり、余韻のある音になります。 余韻は休符及びキーオフの箇所に表れますので、Q8の状態で休符を含めてい ないフレーズを演奏すると効果は表れません。 (例) L8 S1CRDRE4.R S0ERFRG4.R ※サスティン・オンで「CRDRE4.R」を演奏したあと、  サスティン・オフで「ERFRG4.R」を演奏します。 ●Z[n] デチューンの指定です(n=0〜255)。 微妙にチューニングをずらすためのMMLで、255で半音ほど上がります。 もちろん、0ではデチューン・オフとなります(値の省略時もオフです)。 デチューン・オフのチャンネルとデチューン・オンのチャンネルで同じMML を演奏することによって、うねりのあるコーラス的な効果を表現する、などの 使い方に有用です。 ●I[n] ビブラート(音の震えの効果)の深さの指定です(n=0〜255)。 もちろん、値を0(もしくは省略)にするとビブラート・オフとなります。 なお、ビブラートの速さは後述のMコマンドで設定できます。 (例) I0M5(C4I50)C2. ※音を4分音符ぶん普通に伸ばしてからビブラートを±50の深さで実行しま  す。いわゆるディレイビブラートです。 ●P[n] ポルタメントの変化幅の指定です(n=0〜255)。 ポルタメントとは、ある音が次の音へと変化するときに、その間をなめらかに つなげる処理であり、値が細かいほどなめらかになりますが、そのぶん目的の 音に到達するまでに時間がかかりますので注意してください。 このコマンドも、0(もしくは値の省略)でオフになります。 (例) M1C4P50>C4<C2 ※1つめの音以降をそれぞれなめらかに演奏します。 (例) M1(C4P50>C4)<C2 ※レガート・オンとの併用でさらにスムーズに演奏します。 ●M[n] ビブラート(Iコマンド)とポルタメント(Pコマンド)のスピードを設定し ます(n=1〜255)。値が小さいほど速くなります。 ◆W[%][n] そのときの状態を、n分音符(または%nカウント)の長さだけ維持します。 ★U[n] 1ビットサウンドポートにデータを出力します(n=0〜1)。 nの値がサンプリングデータとして送られます。 値を省略したときは現在送られているビットを反転して送ります。 このMMLはPSGパートでご使用ください。 また、このMMLを使用してコンパイルしたBGMファイルは、MuSICA 純正ドライバで演奏しても効果が現れないだけで暴走せずに演奏されます。 ★H[n] BASICにおけるMOTOR命令です(n=0〜1)。 n=0でモーターオフ、n=1でモーターオンになります。 また、nの省略時は、現在の逆の状態になります。 なお、A1WSX、A1ST、A1GTでは効果は表れなくなっています。 WSXを除く2+以下の機種でご使用ください。 このMMLはPSGパートでご使用ください。 また、このMMLを使用してコンパイルしたBGMファイルは、MuSICA 純正ドライバで演奏しても効果が現れないだけで暴走せずに演奏されます。 ▼リズムMML----------------------------------------------------------------- ◆{B|S|M|C|H}[%][n][.] B(バスドラム)、S(スネアドラム)、M(タムタム)、C(シンバル)、 H(ハイハット)のリズム名に相当する音を発音します。 音長の指定については、普通の音階命令と全く同じです。 また、複数のリズム名を併記することにより、複数のリズム音を同時に鳴らす こともできます。 (例) B4SH4M16M16 ※4分音符でバスドラムを鳴らし、8分音符でスネアとハイハットを鳴らし、  16分音符でタムタムを2回鳴らします。 ●V{B|S|M|C|H}[n] 各リズム音の音量を設定します(n=0〜15)。 (例) VB15VS14VH11 ※バスドラムの音量を15、スネアドラムの音量を14、ハイハットの音量を  11にします。 ●V[n] すべてのリズム音の音量を設定します(n=0〜15)。 ★! リズムパートでLコマンドを使用するときは、このMMLを音長の代わりに 置いてください。 (例) L16BH!H!C8SBH!H!C8 ※従来の“BH16H16C8SBH16H16C8”と同様です。 ▼オリジナル音色定義MML----------------------------------------------------- ★[ FM @n (TL,FB) (ET,ML,AR,DR,SL,RR,KR,KL,AM,VB,DI) (ET,ML,AR,DR,SL,RR,KR,KL,AM,VB,DI)] FM音源のオリジナル音色を作成・定義します。 1行目は音色番号とトータルレベル、フィードバックの指定、 2行目はモジュレータの各パラメータ、 3行目はキャリアの各パラメータです。 なお、各パラメータの意味は次のとおりです。 n 登録する音色番号(0〜100、ただし内蔵音色の番号は指定不可) TL トータルレベル(0〜31) FB フィードバック(0〜7) ET エンベロープタイプ(0=減衰音、1=持続音) ML マルチプルレベル(0〜7) AR アタックレイト(0〜15) DR ディケイレイト(0〜15) SL サスティンレベル(0〜15) RR リリースレイト(0〜15) KR キースケールレイト(0=オフ、1=オン) KL キースケールレベル(0〜3) AM トレモロ(0=オフ、1=オン) VB ビブラート(0=オフ、1=オン) DI ディストーション(0=オフ、1=オン) (例) [ FM @63 (22,7) (0,1,15,0,0, 4,0,0,0,0,0) (1,1, 9,6,3,15,0,0,0,0,0)] ※FM音源の63番にオリジナル音色を定義します(パラメータは一例)。 ★[ PSG @n (AR,DR,SL,RR,FQ,TN,NS)] PSG音源のオリジナル音色を作成・定義します。 各パラメータの意味は次のとおりです。 n 音色番号(0〜29) AR アタックレイト(0〜32) DR ディケイレイト(0〜32) SL サスティンレベル(0〜15) RR リリースレイト(0〜32) FQ ノイズ周波数(0〜31) TN トーンの出力スイッチ(0=オフ、1=オン) NS ノイズの出力スイッチ(0=オフ、1=オン) (例) [ PSG @2 (32,12,0,32,12,0,1)] ※PSG音源の2番にオリジナル音色を定義します(パラメータは一例)。 ★[ SCC @n (AR,DR,SL,RR)  (W01,W02,W03,W04,W05,W06,W07,W08  ,W09,W10,W11,W12,W13,W14,W15,W16  ,W17,W18,W19,W20,W21,W22,W23,W24  ,W25,W26,W27,W28,W29,W30,W31,W32)] SCCのオリジナル音色を作成・定義します。 各パラメータの意味は次のとおりです。 n 音色番号(0〜49) AR アタックレイト(0〜32) DR ディケイレイト(0〜32) SL サスティンレベル(0〜15) RR リリースレイト(0〜32) Wnn 波形データ 波形データは16進数で設定します。 範囲は00H〜0FFHで、16進数を表す「H」は付けないでください。 また、数値は「01」や「FE」のように必ず2文字で記述してください。 (例) [ SCC @30 (32,20,6,17) (80,8E,A0,C0,E0,00,20,3F ,3E,3C,3A,37,31,29,20,1C ,10,00,E6,C0,D0,00,20,3F ,10,E0,80,C0,00,20,00,90)] ※SCC音源の30番にオリジナル音色を定義します(パラメータは一例)。  FM、PSG、SCCともに、かっこの中に改行を入れても構いませんが、コメント を挟むことはできませんので、「;」は含めないでください。  また、勤労4号であらかじめ設定されている音色はFM音源の@0〜62で、これは MSX−MUSICのBASICの音色配列と同じです。  他の場所は設定されていませんので、自分で音色パラメータを設定して定義する必要 があります。 ▼MML解説書・執筆者より=====================================================  このドキュメントの執筆においてはもちろん最大限の注意を払っておりますが、もし 不適切な表現や解説の誤りなどがありましたら申し訳ありません…。また、そのときは ご指摘をいただけると嬉しく思います。  そして、僕のわがままな要望を叶えてくださり、このMML解説ドキュメントを執筆 する機会をも与えてくださった黒田さん、本当にありがとうございます! 至福の至り ですぅ!!(^o^)/ 僕の文章能力の不足のため、ご期待に添える形でのMML解説書に なったか否かはとても不安が残りますが、僕なりに精一杯がんばって書きましたので、 どうぞ受け取ってやってくださいませ☆(←図々しい文面でスミマセン…)  最後になりましたが、勤労4号のMMLのすばらしさを1人でも多くの方に知ってい ただけることを祈りつつ、この解説書を提供(?)させていただきます。ここまで目を 通してくださってありがとうございました。   1997年3月4日 なると 初版/1997年3月4日 第2版/1997年4月6日 第3版/1997年4月21日 第4版/1997年5月23日 第5版/1997年7月25日 [EOF]