
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃                                                                  ┃
┃  ３８６｜Ｈｉｇｈ−ＥＵＰ　Ｃｏｍｐｉｌｅｒ　ｖｅｒ．１．０３    ┃
┃                                                                  ┃
┃                                     Copyright (c) 1990 TaroPYON  ┃
┃                                                                  ┃
┃                                                                  ┃
┃                     『ユーザーズマニュアル』                     ┃
┃                                                                  ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛


        ******************************************************
        ☆  第１章      イントロダクション
        ******************************************************


    　Ｈigh-ＥＵＰ Compiler とはFMＴＯＷＮＳの標準音楽演奏データEUPHON
    Y 形式の演奏ファイルを生成するためのコンパイラです。
    　Ｈigh-ＥＵＰ Compiler のソースプログラムは任意のテキストエディタ
    で作成可能です。
    　ソースプログラム中の演奏データはＦ-BASIC386 とも互換性のある『Ｍ
    ＭＬ（Ｍusic Ｍacro Ｌanguege ）』で記述します。よってＦ-BASIC386 
    で作成された音楽プログラムをＨigh-ＥＵＰ Compiler でコンパイルして
    EUPHONY 演奏ファイルにコンバートすることも可能です。
    　また，ミュージカルプランのシーケンスソフト『MUSIC PRO TOWNS』ま
    たは『MUSIC PRO TOWNS [MIDI] 』 の「MML SAVE」で作成したMML データ
    もコンパイル可能です。
    　Ｈigh-ＥＵＰ Compiler の装備するMML は従来のものより大幅に拡張さ
    れており，EUPHONY 形式のサポートする機能を100％ 引き出します。Ｆ-B
    ASIC386 やMUSIC PRO TOWNS では作成不可能だった演奏データもＨigh-Ｅ
    ＵＰ Compiler を使えば簡単に作成可能です。
    　対応する音源も内蔵のFM音源，PCM 音源はもちろんのこと，MIDIにもフ
    ル対応しています（ミュージカルプランのRS-232C MIDIアダプタにも対応
    しています）。
    　この高機能EUPHONY 演奏データ生成コンパイラを使いこなすため，この
    マニュアルを活用してください。



        ******************************************************
        ☆  第２章      コンパイラの起動
        ******************************************************


  ２．１    コンパイラの起動

　Ｈigh-ＥＵＰ Compiler はFMＴＯＷＮＳのネイティブ上で動作するプログラ
ムなので，RUN386.EXEをもちいHE386.EXP というコマンド名で呼び出されます。
　この書式は，

    ┌──────────────────────────────┐
    │  RUN386 HE386 [<オプション>] <入力パス名> [<出力パス名>]   │
    └──────────────────────────────┘

　となります。
　ここで <入力パス名> とはコンパイルされるMML テキストのパス名のことで
す。ファイル名の拡張子「.MML」は省略可能です。
　コンパイラは<入力パス名>から拡張子を取り除いたファイル名をマクロ名
に設定されるため，組み込みマクロと同じ名前のファイル名は指定できませ
ん（詳しくは「第７章  マクロ展開」見てください）。
　２番目の <出力パス名> は生成されるEUPHONY 演奏ファイルのパス名のこと
です。ファイル名の拡張子「.EUP」は省略可能です。<出力パス名>そのものを
省略した場合には <入力パス名> の拡張子を「.EUP」に変更したファイル名が
指定されたとみなされます（この時，EUPHONY 演奏ファイルはカレントディレ
クトリに生成されます）。

　パラメータに指定できる <オプション> には以下のものがあります（個々の
詳しい説明については後述します）。

        −？<種別>      ヘルプメッセージの表示
        −ｃ            オプティマイズ禁止
        −ｌ            マクロ内容の表示指定
        −ｍ<数値>      メッセージ表示レベルの指定
        −ｖ            ベロシティ・オーバーエラー有

　エラーがなければコンパイラは<出力パス名>に指定されたパスにEUPHONY 演
奏ファイルを生成します。<出力パス名>が省略されている場合には <入力パス
名> の拡張子を「.EUP」に変更したEUPHONY 演奏ファイルがカレントディレク
トリに生成されます。
　<出力パス名>と同名のファイルがすでに存在しているとオーバーライトされ
て書き換えられます。
　コンパイルの途中でエラーが発生した場合，EUPHONY 演奏ファイルは途中ま
でコンパイルされたファイルが<出力パス名>の指定されたパスに残ります。し
かしエラーが発生した場合，生成されたEUPHONY 演奏ファイルは正常なもので
はありません。もしこのファイルを演奏しようとした場合，演奏プログラムが
ハングアップする可能性もありますので，絶対に演奏はしないでください。

【使用例】

        run386  he386   music.mml

    　MML テキスト「music.mml 」をコンパイルし，EUPHONY 演奏ファイル
    「msuic.eup 」を生成します。



  ２．２    コンパイル・オプション

　Ｈigh-ＥＵＰ Compiler のパラメータに指定できるコンパイル・オプション
を順に説明します。

    −？<種別>  ヘルプメッセージの表示

        　Ｈigh-ＥＵＰ Compiler の簡単な使い方，コンパイラ・オプション
        の一覧を表示します。
        　「−？」に続けて<種別>を指定すると，種別に応じたコンパイラの
        各種ヘルプメッセージ，スペックを表示します。

            −？ctrl    コントール行の一覧を表示します。
            −？macro   マクロ機能のスペックを表示します。
            −？mml     MML 仕様一覧を表示します。
            −？pri     コンパイラ制御行の一覧を表示します。
            −？v       MML のＶコマンドとベロシティの対応を初期設定
                        値を表示します。


    −ｏ        オプティマイズ禁止

        　Ｈigh-ＥＵＰ Compiler はコンパイル時に不要な演奏データがある
        とそのデータを取り除いて最適化してくれるオプティマイズ機能があ
        ります。
        　このオプションを指定するとオプティマイズが禁止されます。

    −ｌ        マクロ内容の表示指定

        　コンパイルが終了した時点で使用されたマクロ名とその内容の一覧
        を表示します。

    −ｍ<数値>  メッセージレベルの指定

        　コンパイラの出力するメッセージのレベルを指定します。
        　<数値>はレベルを指定するもで０〜４の間で指定します。
        　各レベルの内容は以下のとおりです。

            ０：　最小限のメッセージのみを表示します。−ｍオプション
                が省略されている場合はこのレベルが指定されたものとし
                ます。
            １：　レベル０の内容に加え入力行のコメトン行を表示します。
            ２：　レベル０，１の内容に加え入力行のコントロール行，コ
                ンパイラ制御行も表示します。
            ３：　レベル０，１，２の内容に加えすべての入力行を表示し
                ます。
            ４：　レベル０，１，２，３の内容に加え，マクロ展開後の内
                容も表示します。

    −ｖ        ベロシティ・オーバーエラー有

        　コンパイル時に相対指定（] や[ ）によってベロシティが制限範囲
        をオーバーした場合はエラーと見なして,コンパイルを中断します。
        　このオプションの指定がない場合は，相対指定によってベロシティ
        がオーバーしてもエラーとはせずに上限をオーバーした場合は最大値
        を，下限をオーバーした場合には最小値をとります。



        ******************************************************
        ☆  第３章      ＭＭＬテキストの形式
        ******************************************************


　Ｈigh-ＥＵＰ Compiler のソースプログラムは『MML テキスト』と呼ばれテ
キストファイル形式のプログラムとなります。
　MML テキストは行単位に処理され，「コメント行」，「コントロール行」，
「コンパイラ制御行」，「MML 行」の４つに分類できます。
　MML テキスト中，コマンドや命令はすべて半角文字で指定します。特別にこ
とわりのないかぎりアルファベットの大文字・小文字は区別されず同じものと
して扱われます。
　漢字を含む全角文字はコメントでしか使用できません。


  ３．１    コメント行

　行頭の文字がスラッシュ「／」だった場合，その行はコメント行とみなされ
ます。
　文字どおりコメントですので，コンパイルの実行には何の影響もあたえませ
ん。

【コメント行の例】
    ┌───────────────────────────────┐
    │/* filename "test.mml"                                        │
    │/------ Block 1 ------                                        │
    └───────────────────────────────┘


  ３．２    コントロール行

　行頭の文字がピリオド「. 」だとその行はコントロール行とみなされます。
　コントロール行に指定できる「コントールコマンド」には以下のものがあり
EUPHONY 演奏ファイルのヘッダ情報を設定したり，音色のファイル名指定，M
ML コマンドの設定などを行います。
　個々の詳しい解説は「第４章　コンロール行」で行います。

    《表 3.2.1》    コントロールコマンド一覧
    ┌───────┬───────────────────────┐
    │コントロール行│  内   容                                     │
    ├───────┼───────────────────────┤
    │.title        │タイトルの設定                                │
    │.fm           │FM 音源音色ファイル名の指定                   │
    │.pcm          │PCM音源音色ファイル名の指定                   │
    │.mmltype      │MML タイプの指定                              │
    │.partmax      │使用パート数の指定                            │
    │.part         │パートとトラックの設定                        │
    │.next         │次ブロック指定                                │
    │.end          │コンパイルの終了指定                          │
    │.nulline      │空行をスキップするかどうかの指定              │
    │.ssg          │SSG パート変換を行うかどうかの指定            │
    │.trkport      │トラックポートの設定                          │
    │.trkch        │トラックMIDIチャンネルの設定                  │
    │.fmch         │FM 音源MIDIチャンネルの設定                   │
    │.pcmch        │PCM 音源MIDIチャンネルの設定                  │
    │.vdef         │Ｖコマンドとベロシティ設定                    │
    │.veltie       │ベロシティが違うとタイを中断するか継続するか  │
    │.chbase       │チャンネルベースの指定                        │
    │.z_cmd        │Ｚコマンド有効・無効の設定                    │
    │.noteasn      │ノートアサインの設定                          │
    │.meas         │拍子の固定モード指定                          │
    │.statch       │ステータス・チャンネル有効・無効の指定        │
    └───────┴───────────────────────┘

【コントロール行の例】

    ┌───────────────────────────────┐
    │.title  ***** Music No.02 *****                               │
    │.fm     fmtone2                                               │
    └───────────────────────────────┘


  ３．３    コンパイラ制御行

　行頭の文字がナンバ記号「＃」だとその行はコンパイラ制御行とみなされま
す。
　コンパイラ制御行はマクロの定義／解除，外部ファイルのインクルード等を
行います。
　個々の詳しい解説は「第５章　コンパイラ制御行」で行います。

    《表 3.3.1》    コンパイラ制御コマンド一覧
    ┌───────┬───────────────────────┐
    │ｺﾝﾊﾟｲﾗ制御行  │  内   容                                     │
    ├───────┼───────────────────────┤
    │#define       │マクロの定義                                  │
    │#undef        │マクロの定義解除                              │
    │#ifdef        │条件判断ブロック制御                          │
    │#else         │条件判断ブロック制御                          │
    │#endif        │条件判断ブロック制御                          │
    │#include      │外部ファイル取り込み                          │
    └───────┴───────────────────────┘

【コンパイラ制御行の例 】

    ┌───────────────────────────────┐
    │#include "drums.def"                                          │
    │#define BSD   n24                                             │
    └───────────────────────────────┘


  ３．４    ＭＭＬ行

　「コメント行」，「コントロール行」，「コンパイラ制御行」のいずれにも
当てはまらない行がMML となります。
　コントロール行に「.nulline skip 」が指定されていない場合には改行だけ
の空行もMML 行とみなされます。
　セミコロン（; ）で区切ることで１行中に複数のMML 行を指定することも可
能です。
　MML 行の中にも，

        /* <コメント> */

　という形式でコメントを指定できますが，行頭の文字がスラッシュ（／）だ
と，その行全体がコメントとみなされるので注意してください（行頭にスラッ
シュ以外の文字が１つで指定されていればコメント行にはなりません）。
　MML 行は以下の表にあげたMML コマンドによって構成されます。
　MML コマンドの個々の詳しい解説は「第６章　MML コマンド」で行います。

    《表 3.4.1》    ＭＭＬコマンド一覧
    ┌───────┬───────────────────────┐
    │コメンド名    │  内   容                                     │
    ├───────┼───────────────────────┤
    │ｒ            │休符                                          │
    │ａ〜ｇ        │音程                                          │
    │ｎ            │特殊音程                                      │
    │ｌ            │音長                                          │
    │ｑ            │音長の割合                                    │
    │'             │スタカート                                    │
    │ｏ            │オクターブ                                    │
    │>, <          │オクターブ・アップ／ダウン                    │
    │^             │１オクターブアップ                            │
    │ｖ, @ｖ       │ベロシティ，ボリューム                        │
    │], [          │ベロシティ・アップ／ダウン                    │
    │！            │アクセント                                    │
    │@             │プログラムチェンジ                            │
    │ｔ            │テンポ指定                                    │
    │%ｓ           │拍子                                          │
    │ｕ            │ピッチベンド                                  │
    │%ｃ，%ｌ，%ｒ │パンポット                                    │
    │%ｄ           │ディレイ                                      │
    │ｋ            │キートランスポーズ                            │
    │ｈ            │MIDIチャンネル                                │
    │%ｏ           │出力ポート                                    │
    │？            │拡張コマンド                                  │
    │@ｃ           │コントロールチェンジ                          │
    │%ｅ           │エクスクルーシブメッセージ                    │
    │*             │モジュレーション                              │
    │~, _          │モジュレーション・オン／オフ                  │
    │ｓ            │SSG エンベロープ                              │
    │ｍ            │SSG エンベローブ周波数                        │
    │ｘ            │SSG ノイズモード                              │
    │ｙ            │レジスタ                                      │
    │ｚ            │直接データ指定                                │
    │{, }          │連符                                          │
    │(, )          │リピート                                      │
    │＄            │マクロ展開                                    │
    └───────┴───────────────────────┘

【MML 行の例】

    ┌───────────────────────────────┐
    │o4v#118q8 l8e4.c&c4<a                                         │
    │o4v#86q6 l8aaaaaaaa                                           │
    └───────────────────────────────┘



        ******************************************************
        ☆  第４章      コントロール行
        ******************************************************


　MML テキスト中，行頭の文字がピリオド（. ）の行はコントロール行とみな
されます。
　この章ではコントロール行に指定するコントロールコマンドについて解説い
たします。


  ４．１    コントロール行について，

　コントロール行はコントロールコマンドを指定するもので，演奏ファイルの
ヘッダ情報や音色ファイル名，ノートアサイン，などの各種設定を行います。
　コントロール行は，

        ピリオド（．）＋コマンド名＋空白＋パラメータ

　という形式で使用されます。
　パラメータにはMML 行と同じマクロ展開処理が施されます。よってMML 行と
同じように，

        ＄<マクロ名>

　という形式でマクロの使用が可能です。
　また，MML の，

        （…）n 

　という形式のリピート指定もマクロ展開ですので，コントロール行でも同じ
ようにマクロ展開されます。
　これらの仕様により「＄，（，）」は単独の文字としては使用できません。


  ４．２    タイトルの指定

    ■  ＴＩＴＬＥ：タイトルの指定

    ┌───────────────────────────────┐
    │.title  <文字列>                                              │
    └───────────────────────────────┘
    【パラメータ】
        <文字列>            32文字以内（全角16文字以内）

    【解説】
    　EUPHONY 演奏ファイルのヘッダ情報に埋め込むタイトルを指定します。
    　タイトルは半角32文字，全角で16文字以内の文字列で指定します。


  ４．３    音色ファイルの指定

    ■  ＦＭ：ＦＭ音源音色ファイル名の指定

    ┌───────────────────────────────┐
    │.fm  <ファイル名>                                             │
    └───────────────────────────────┘
    【パラメータ】
        <ファイル名>        ８文字以内（拡張子は不要）

    【解説】
    　FM音源用の音色ファイル名を指定します。
    　拡張子「.FMB」は指定する必要ありません。


    ■  ＰＣＭ：ＰＣＭ音源音色ファイル名の指定

    ┌───────────────────────────────┐
    │.pcm  <ファイル名>                                            │
    └───────────────────────────────┘
    【パラメータ】
        <ファイル名>        ８文字以内（拡張子は不要）

    【解説】
    　PCM 音源用の音色ファイル名を指定します。
    　拡張子「.PMB」は指定する必要ありません。


  ４．４    ＭＭＬパートに関する設定

    ■  ＭＭＬＴＹＰＥ：ＭＭＬタイプの指定

    ┌───────────────────────────────┐
    │.mmltype <タイプ名>                                           │
    └───────────────────────────────┘
    【パラメータ】
        <タイプ名>          FB386       …Ｆ-BASIC 386
                            M_PRO       …MUSIC PRO TOWNS
                            HGPLAY      …HGPLAY
                            WHG         …WHG
                            EDPLAY      …EDPLAY
                            MIDI        …MIDI

    【解説】
    　MML テキストのMML タイプを指定します。
    　MML タイプを指定することで，以下のように初期設定が行われます。

        《表 4.4.1》    ＭＭＬタイプと初期設定
        ┌─────┬───┬──────┬──────┬─────┐
        │タイプ名  │ﾊﾟｰﾄ数│ FM 音源ﾊﾟｰﾄ│PCM 音源ﾊﾟｰﾄ│MIDIﾊﾟｰﾄ  │
        ├─────┼───┼──────┼──────┼─────┤
        │  FB386   │   14 │       0〜5 │      6〜13 │     なし │
        │  M_PRO   │   14 │       0〜5 │      6〜13 │     なし │
        │  HGPLAY  │    6 │       0〜2 │      3〜 5 │     なし │
        │  WHG     │   12 │ 0〜2, 6〜8 │3〜5, 9〜11 │     なし │
        │  EDPLAY  │    6 │       0〜2 │      3〜 5 │     なし │
        │  MIDI    │   16 │       なし │       なし │    0〜15 │
        └─────┴───┴──────┴──────┴─────┘

    　MML タイプによる初期設定は固定化された設定内容をユーザーが設定す
    る手間を省くために行われており，上記以外の設定を行う場合にはユーザ
    ーが自前で初期設定を行わなければなりません。
    　MML タイプの指定によって使い方や効果が変化する命令はオクターブと
    ステップタイム，SSG 関連の命令です。
    　詳しくは「第６章　ＭＭＬコマンド」の各MML の解説で取り上げます。


    ■  ＰＡＲＴＭＡＸ：ＭＭＬパート数の指定

    ┌───────────────────────────────┐
    │.partmax <パート数>                                           │
    └───────────────────────────────┘
    【パラメータ】
        <パート数>          １〜64

    【解説】
    　MML の使用パート数を指定します。


    ■  ＰＡＲＴ：パートの設定

    ┌───────────────────────────────┐
    │.part  <パート>  <トラック>                                   │
    └───────────────────────────────┘
    【パラメータ】
        <パート>            パート番号  （０〜63）
        <トラック>          トラック番号（０〜31）

    【解説】
    　パートとトラック番号の対応を指定します。


    ■  ＮＥＸＴ：次ブロックの指定

    ┌───────────────────────────────┐
    │.next                                                         │
    └───────────────────────────────┘
    【パラメータ】
        なし

    【解説】
    　次のMML 行を小節の先頭として指定します。


    ■  ＥＮＤ：コンパイル終了

    ┌───────────────────────────────┐
    │.end                                                          │
    └───────────────────────────────┘
    【パラメータ】
        なし

    【解説】
    　コンパイルを終了します。


    ■  ＮＵＬＬＩＮＥ：空行を無効にする

    ┌───────────────────────────────┐
    │.nulline {skip|rest}                                          │
    └───────────────────────────────┘
    【パラメータ】
        skip                空行を無効にする
        rest                空行は休符とする（デフォルト）

    【解説】
    　MML 行のうち空行を無効にするか休符とするか指定します。


    ■  ＳＳＧ：ＳＳＧ変換モードの指定

    ┌───────────────────────────────┐
    │.ssg  {on|off}                                                │
    └───────────────────────────────┘
    【パラメータ】
        on                  SSG パートを変換する
        off                 SSG パートはそのまま

    【解説】
    　FMＴＯＷＮＳにはSSG 音源はありませんが，Ｈigh-ＥＵＰ Compiler は
    SSG 音源を使用するMML タイプが指定された場合はPCM 音源部をSSG 音源
    のかわりに割り当てます。
    　しかし，SSG 独自のMML コマンドが使われた場合にはエラーとなる場合
    がありますが，「.ssg on 」が指定されていればSSG 独自のコマンドが使
    われてもエラーにならないよう変換されて処理されます。
    　SSG 変換の詳細は「第６章　ＭＭＬコマンド」の各MML コマンドの解説
    の中で取り上げます。


  ４．５    トラックに関する設定

    ■  ＴＲＫＰＯＲＴ：トラックポートの設定

    ┌───────────────────────────────┐
    │.trkport  <トラック>:<ポート>  [<トラック>:<ポート>…]        │
    └───────────────────────────────┘
    【パラメータ】
        <トラック>          設定トラック番号（０〜31）
        <ポート>            出力ポート

    【解説】
    　指定トラックの出力ポートを設定します。
    　<トラック>と<ポート>の設定は空白またはタブで区切ることで１行中に
    いくつでも指定可能です。
    　<トラック>の指定はハイフン（‐）によって範囲を指定することも可能
    です。
    　出力ポートは「ポート名」または「ポート番号」で指定しますが，その
    内容と以下のとおりです。

        《表 4.5.1》    出力ポート
        ┌────┬──┬───────────────┐
        │ポート名│番号│出力先                        │
        ├────┼──┼───────────────┤
        │  INT   │ 255│内蔵音源                      │
        │    A   │   0│MIDIポートＡ                  │
        │    B   │   1│MIDIポートＢ                  │
        │    C   │   2│MIDIポートＣ                  │
        │    D   │   3│MIDIポートＤ                  │
        │    E   │   4│MIDIポートＥ                  │
        │    F   │   5│MIDIポートＦ                  │
        │    G   │   6│MIDIポートＧ                  │
        │    H   │   7│MIDIポートＨ                  │
        │   RS   │  16│RS-232C MIDIアダプタ          │
        └────┴──┴───────────────┘

    【使用例】
        .trkport  0-31:A 
        .trkpirt  0:A 1:B 2-5:INT


    ■  ＴＲＫＣＨ：トラックMIDIチャンネルの設定

    ┌───────────────────────────────┐
    │.trkch  <トラック>:<チャンネル>  [<トラック>:<チャンネル>…]  │
    └───────────────────────────────┘
    【パラメータ】
        <トラック>          設定トラック番号（０〜31）
        <チャンネル>        MIDIチャンネル　（０〜15）

    【解説】
    　指定トラックのMIDIチャンネルを設定します。
    　<トラック>と<チャンネル>の設定は空白またはタブで区切ることで１行
    中にいくつでも指定可能です。
    　<トラック>の指定はハイフン（‐）によって範囲を指定することも可能
    です。

    【使用例】
        .trkch  0:1  1:2  2:3  3:4  4:5  5:6
        .trkch  6-11:10


    ■  ＦＭＣＨ：ＦＭ　ＭＩＤＩチャンネルの設定

    ┌───────────────────────────────┐
    │.fmch  <ボイス>:<チャンネル>  [<ボイス>:<チャンネル>…]       │
    └───────────────────────────────┘
    【パラメータ】
        <ボイス>            設定ボイス番号（０〜５）
        <チャンネル>        MIDIチャンネル（０〜15）

    【解説】
    　FMＴＯＷＮＳ本体内蔵のFM音源で発音させる指定ボイスのMIDIチャンネ
    ルを設定します。
    　<ボイス>と<チャンネル>の設定は空白またはタブで区切ることで１行中
    にいくつでも指定可能です。
    　<ボイス>の指定はハイフン（‐）によって範囲を指定することも可能で
    す。


    ■  ＰＣＭＣＨ：ＰＣＭ　ＭＩＤＩチャンネルの設定

    ┌───────────────────────────────┐
    │.pcmh  <ボイス>:<チャンネル>  [<ボイス>:<チャンネル>…]       │
    └───────────────────────────────┘
    【パラメータ】
        <ボイス>            設定ボイス番号（０〜７）
        <チャンネル>        MIDIチャンネル（０〜15）

    【解説】
    　FMＴＯＷＮＳ本体内蔵のPCM 音源で発音させる指定ボイスのMIDIチャン
    ネルを設定します。
    　<ボイス>と<チャンネル>の設定は空白またはタブで区切ることで１行中
    にいくつでも指定可能です。
    　<ボイス>の指定はハイフン（‐）によって範囲を指定することも可能で
    す。


  ４．６    ＭＭＬコマンドに関する設定

    ■  ＶＤＥＦ：Ｖコマンドのベロシティ設定

    ┌───────────────────────────────┐
    │.vdef <Vn>:<ベロシティ>                                       │
    └───────────────────────────────┘
    【パラメータ】
        <Vn>                Ｖコマンドの値（０〜15）
        <ベロシティ>        ベロシティ値（０〜127 ）

    【解説】
    　MML のＶコマンドに各値に設定するベロシティ値を設定します。
    　デフォルトでは次のように設定されています。
    
        《表 4.6.1》    Ｖコマンド初期設定
        ┌────┬────┐  ┌────┬────┐
        │  Ｖn   │ﾍﾞﾛｼﾃｨ  │  │  Ｖn   │ﾍﾞﾛｼﾃｨ  │
        ├────┼────┤  ├────┼────┤
        │    0   │    7   │  │    8   │   71   │
        │    1   │   15   │  │    9   │   79   │
        │    2   │   23   │  │   10   │   87   │
        │    3   │   31   │  │   11   │   95   │
        │    4   │   39   │  │   12   │  103   │
        │    5   │   47   │  │   13   │  111   │
        │    6   │   55   │  │   14   │  119   │
        │    7   │   63   │  │   15   │  127   │
        └────┴────┘  └────┴────┘

    ■  ＶＥＬＴＩＥ：タイの中断

    ┌───────────────────────────────┐
    │.veltine {cont|stop}                                          │
    └───────────────────────────────┘
    【パラメータ】
        cont                そのまま発音する
        stop                発音を中断する

    【解説】
    　タイ処理中にベロシティを変更した場合に，タイ処理中の発音を中断す
    るか，そのままタイ処理を続けるかどうか指定するものです。
    　パラメータには「cont」（タイ継続）または「stop」（タイ中断）のど
    ちらかを指定します。

    【使用例】
        .veltie stop


    ■  ＣＨＢＡＳＥ：ＭＩＤＩチャンネルベースの指定

    ┌───────────────────────────────┐
    │.chbase {0|1}                                                 │
    └───────────────────────────────┘
    【パラメータ】
        0                   MIDIチャンネル指定を０〜15にする
                            （デフォルト）
        1                   MIDIチャンネル指定を１〜16にする

    【解説】
    　MML のＨコマンドで指定するMIDIチャンネルを０〜15で指定するか，１
    〜16で指定するかきめるものです。


    ■  Ｚ＿ＣＭＤ：Ｚコマンドを有効にする

    ┌───────────────────────────────┐
    │.z_cmd {on|off}                                               │
    └───────────────────────────────┘
    【パラメータ】
        on                  Z コマンドを有効にする
        off                 Z コマンドを無効にする（デフォルト）

    【解説】
    　MML のＺコマンドを有効にするか無効にするか指定するコマンドです。


  ４．７    ノートアサインに関する設定

    ■  ＮＯＴＥＡＳＮ：形式１  音程の設定

    ┌───────────────────────────────┐
    │.noteasn <トラック> note <変更音程>:<音程>                    │
    └───────────────────────────────┘
    【パラメータ】
        <トラック>          トラック番号（０〜31）
        <変更音程>          ０〜127
        <音程>              ０〜127

    【解説】
    　<トラック>で指定されたトラックの<変更音程>で指定された音程を実際
    には<音程>で指定した音程で発音するための設定です。
    　これによりMML 中の音程と実際に発音される音程の対応を任意に設定で
    きます。
    　<変更音程>の指定はハイフン（‐）によって範囲を指定することも可能
    です。

    【使用例】
        .noteasn  0  note  24:36
        .noteasn  1  note  60-71:64


    ■  ＮＯＴＥＡＳＮ：形式２  パンポットの設定

    ┌───────────────────────────────┐
    │.noteasn <トラック> pan <変更音程>:<オフセット>               │
    └───────────────────────────────┘
    【パラメータ】
        <トラック>          トラック番号（０〜31）
        <変更音程>          ０〜127
        <オフセット>        パンポットのオフセット（−127〜＋127）

    【解説】
    　<トラック>で指定されたトラックの<変更音程>で指定された音程が発音
    されるさいにパンポットに<オフセット>で指定された値を加えます。
    　これにより音程毎にパンポットが指定可能となります。
    　<変更音程>の指定はハイフン（‐）によって範囲を指定することも可能
    です。


    ■  ＮＯＴＥＡＳＮ：形式３  ピッチベンドの設定

    ┌───────────────────────────────┐
    │.noteasn <トラック> bend <変更音程>:<オフセット>              │
    └───────────────────────────────┘
    【パラメータ】
        <トラック>          トラック番号（０〜31）
        <変更音程>          ０〜127
        <オフセット>        ピッチベンドのオフセット（−8191〜＋8191）

    【解説】
    　<トラック>で指定されたトラックの<変更音程>で指定された音程が発音
    されるさいにピッチベンドに<オフセット>で指定された値を加えます。
    　これにより音程毎にピッチベンドが指定可能となります。
    　<変更音程>の指定はハイフン（‐）によって範囲を指定することも可能
    です。


  ４．８    その他のコントロールコマンド

　これまでの解説の中には登場しなかったコントロールコマンドもいくつかあ
りますが，それらはほとんど使われる機会はないと思われますので説明は省き
ます。



        ******************************************************
        ☆  第５章      コンパイラ制御行
        ******************************************************


　MML テキスト中，行頭の文字がナンバ記号（＃）の行はコンパイラ制御行と
みなされます。
　この章ではコンパイラ制御行の解説いたします。


  ５．１    コンパイラ制御行について，

　コンパイラ制御行はマクロの定義・解除，条件コンパイルなどソースリスト
にかかわる制御を行うものでMML や演奏データとは直接関係のない行です。
　コンパイラ制御行は，

        ナンバ記号（＃）＋コマンド名＋空白＋パラメータ

　という形式で使用されます。


  ５．２    マクロ定義・解除


    ■  ＤＥＦＩＮＥ：マクロの定義

    ┌───────────────────────────────┐
    │#define [$]<マクロ名> <マクロ内容>                            │
    └───────────────────────────────┘
    【パラメータ】
        <マクロ名>       16 文字以内
        <マクロ内容>    256 文字以内

    【解説】
    　マクロの定義を行います。
    　<マクロ名>の先頭に指定するドルマーク（＄）は省略可能です。
    　マクロ名に許される文字列はアルファベットとアンダースコア（＿），
    クエスチョンマーク（？）です（すべて半角）。アルファベットの大文字
    小文字の区別はありません。
    　すでに登録されているマクロ名は一度「＃undef 」によって解除してか
    らでないと再定義できません。ただし「＄Ａ」や「＄Ｂ」といった１文字
    だけからなるマクロ名は解除の必要なく自由に再定義できます。
    　２桁の16進数にあたる文字列（＄00〜＄FF）からなるマクロ名はデフォ
    ルトで定義されているとみなされ，再定義も解除もできません（マクロ展
    開においては16進数に対応する10進数の文字列となる）。
    　マクロ内容は 256 文字まで指定可能ですが，省略することも可能です。
    　ただしマクロ内容が省略されている場合でもそのマクロ名は定義されて
    いるとみなされますので，１文字だけからなるマクロ名以外を再定義する
    場合には解除が必要です。


    ■  ＵＮＤＥＦ：マクロ定義解除

    ┌───────────────────────────────┐
    │#undef [$]<マクロ名>                                          │
    └───────────────────────────────┘
    【パラメータ】
        <マクロ名>       16 文字以内

    【解説】
    　登録されたマクロの定義解除を行います。
    　<マクロ名>の先頭に指定するドルマーク（＄）は省略可能です。
    　登録されていないマクロを解除しようとしてもエラーにはならずコンパ
    イルはそのまま続行されます。
    　２桁の16進数にあたる文字列（＄00〜＄FF）からなるマクロ名はデフォ
    ルトで定義されているとみなされ，解除しようとするとエラーとなりコン
    パイルは中断されます。


  ５．３    ブロック制御

    ■  ＩＦＤＥＦ  〜ＥＬＳＥ〜ＥＮＤＩＦ：ブロック制御１
    ■  ＩＦＮＤＥＦ〜ＥＬＳＥ〜ＥＮＤＩＦ：ブロック制御２

    ┌───────────────────────────────┐
    │#ifdef  [$]<マクロ名>                                         │
    │  （ブロック１）                                              │
    │#else                                                         │
    │  （ブロック２）                                              │
    │#endif                                                        │
    └───────────────────────────────┘
    ┌───────────────────────────────┐
    │#ifndef [$]<マクロ名>                                         │
    │  （ブロック１）                                              │
    │#else                                                         │
    │  （ブロック２）                                              │
    │#endif                                                        │
    └───────────────────────────────┘

    【パラメータ】
        <マクロ名>       16 文字以内

    【解説】
    　#ifdefは<マクロ名>に指定されているマクロが定義されている場合，
    #ifdef〜#else 間（ブロック１）のソースリストをコンパイルし，#else 
    〜#endif間（ブロック２）のソースリストはコンパイルされません。
    　#ifndef は反対に<マクロ名>の指定されているマクロが定義されていな
    い場合に，#ifndef 〜#else 間（ブロック１）のソースリストをコンパイ
    ルし，#else 〜#endif間（ブロック２）のソースリストはコンパイルしま
    せん。
    　#ifdef，#ifndef 共に#else は省略可能です。その場合は#else 〜#end
    if間（ブロック２）は当然存在しません。
    　<マクロ名>の先頭に指定するドルマーク（＄）は省略可能です。
    　#ifdef〜#else 〜#endif，#ifndef 〜#else 〜#endifのネストはできま
    せん。


  ５．４    外部ファイル読み込み

    ■  ＩＮＣＬＵＤＥ：外部ファイル読み込み

    ┌───────────────────────────────┐
    │#include "<パス名>"                                           │
    └───────────────────────────────┘
    【パラメータ】
        <パス名>        読み込みパス名

    【解説】
    　<パス名>で指定されたファイルをインクルードファイルとしてソースリ
    ストとして読み込みます。
    　インクルードファイルの中ならさらに#includeを使用してファイルを読
    み込むこともできます（最大８段階まで）。



        ******************************************************
        ☆  第６章      ＭＭＬコマンド
        ******************************************************


　ＭＭＬとは「Ｍusic Ｍacro Ｌanguage 」の略で音楽の演奏を記号で表した
ものです。
　Ｈigh-ＥＵＰ Compiler はFMＴＯＷＮＳのF-BASIC386，FM７/77/AVシリーズ
用のHGPLAY，EDPLAYで使われたMML をベースに大幅に機能追加・拡張されてい
ます。
　ここではそのＨigh-ＥＵＰ Compiler のMML コマンドの詳細を解説いたしま
す。


  ６．１    ＭＭＬの記述に関して


　MML 行は１行に最大4000文字までコメンドの指定が可能です。

　「/* <コメント> */」とすることでMML 中にコメントが入れられます。ただ
しその行が最後までコメントの場合「*/」は省略できます。
　行の先頭にスラッシュ（／）だとその行全体がコメント行とみなされるので
注意してください（行頭にスラッシュ以外の文字が１つで指定されていればコ
メント行にはなりません）。


  ６．２    音長に関して

    休符や音符の長さはＨigh-ＥＵＰ Compiler のMML では「音長」と表現す
ることにします。
　音長は音符で指定する方法と，ステップタイムで指定する方法と２通りあり
ます。
　音符で指定する場合は何分音符の音符にあたるか，数値で指定します。
　たとえば「４」なら４分音符になります。
　符点は数値の後ろにコンマ（. ）を指定して表現可能です（例：符点４分音
符＝「4.」）。また符点は２重まで指定可能です。
　ステップタイムで指定する場合はパーセント記号（％）を先頭にして数値で
指定します。
　音符とステップタイムの対応は次の表のようになっています。

        《表 6.2.1》
        ┌───────┬─────┬─────┐
        │音符          │ ｽﾃｯﾌﾟﾀｲﾑ │  EDPLAY  │
        ├───────┼─────┼─────┤
        │       全音符 │   384    │   192    │
        │ 符点２分音符 │   288    │   144    │
        │     ２分音符 │   192    │    96    │
        │ 符点４分音符 │   144    │    72    │
        │     ４分音符 │    96    │    48    │
        │ 符点８分音符 │    72    │    36    │
        │     ６分音符 │    64    │    32    │
        │     ８分音符 │    48    │    24    │
        │ 符点16分音符 │    36    │    18    │
        │     12分音符 │    32    │    16    │
        │     16分音符 │    24    │    12    │
        │ 符点32分音符 │    18    │     9    │
        │     24分音符 │    16    │     8    │
        │     32分音符 │    12    │     6    │
        │     64分音符 │     6    │     3    │
        └───────┴─────┴─────┘
        ※　「EDPLAY」はMML タイプがEDPLAYの場合のステップタイム

　音符で指定可能な音長の最大値，最小値はそれぞれ２重符点全音符，384 分
音符です。ステップタイムの場合は１〜65535 の範囲で指定可能です。
　実際に発音させる場合には音長はタイ記号（＆）を使用することでどんな長
さでも指定可能ですが，タイで結んだ全体の音長もステップタイムに換算して
65535 以内でなければなりません。
　ステップタイム65535 は170 小節分の長さにあたりますので，実用上は問題
ないと思われます。


  ６．３    発音


    ■  Ｒ：休符

    ┌───────────────────────────────┐
    │ｒ[<音長>]                                                    │
    └───────────────────────────────┘
    【パラメータ】
        <音長>              音符またはパーセント記号（％）を先頭にステ
                            ップタイムで指定

    【解説】
    　MML コマンドの'ｒ'は休符に当たります。
    　音長が省略された場合は，MML コマンドの'ｌ'で指定された音長が指定
    されたと見なされます。

    【例】
        ｒ4     /* ４分休符 */
        ｒ%192  /* ステップタイム192    */


    ■  Ａ〜Ｇ：音程

    ┌───────────────────────────────┐
    │{ａ〜ｇ}[<音長>][,<ゲートタイム>]                             │
    └───────────────────────────────┘
    【パラメータ】
        <音長>              音符またはパーセント記号（％）を先頭にステ
                            ップタイムで指定
        <ゲートタイム>      実際に発音する時間をステップタイムで指定

    【解説】
    　MML のもっとも基本的で大切なコマンドで「ｃ，ｄ，ｅ，ｆ，ｇ，ａ，
    ｂ」は，それぞれ「ド，レ，ミ，ファ，ソ，ラ，シ」に対応します。
    　音長が省略された場合は，MML コマンドの'ｌ'で指定された音長が指定
    されたと見なされます。
    　ゲートタイムが省略された場合は，MML コマンドの'ｑ'で指定された割
    合によって決定されます。


    ■  Ｎ：特殊音程

    ┌───────────────────────────────┐
    │ｎ<音程番号>[％<ステップタイム>][,<ゲートタイム>]             │
    └───────────────────────────────┘
    【パラメータ】
        <音程番号>          ０〜127 
        <ステップタイム>    音長はステップタイムでのみ指定可能
        <ゲートタイム>      実際に発音する時間をステップタイムで指定

    【解説】
    　'ｎ'は音程を数値で表すコマンドです。
    　音程番号は０〜127 の数値で表します。
    　数値は半音単位で表しオクターブ４の「ド」が60に対応しています
    　ステップタイムが省略された場合は，MML コマンドの'ｌ'で指定された
    音長が指定されたと見なされます。


  ６．４    音長に関連したコマンド


    ■  Ｌ：音長の指定

    ┌───────────────────────────────┐
    │ｌ<音長>                                                      │
    └───────────────────────────────┘
    【パラメータ】
        <音長>              音符またはパーセント記号（％）を先頭にステ
                            ップタイムで指定

    【解説】
    　休符（ｒ）や音程（ａ〜ｇ，ｎ）で音長が省略された場合に使われる
    音長を設定します。


    ■  Ｑ：ゲートタイムの割合

    ┌───────────────────────────────┐
    │ｑ[＃]<割合>                                                  │
    └───────────────────────────────┘
    【パラメータ】
        ＃                  高精度指定
        <割合>              ゲートタイムの割合
                            （通常１〜16，高精度０〜 200）

    【解説】
    　音程（ａ〜ｇ）または特殊音程（ｎ）でゲートタイムが省略された場合
    は音長に対しての比率でゲートタイムは決定されます。このコマンドはそ
    の比率を指定するものです。
    　比率はパラメータの<割合>で指定しますが，単精度（パラメータに「＃
    」の指定がないとき）の場合は１〜16の範囲をとります。
    　単精度の場合は，

        ゲートタイム ＝ 音符×<割合>÷８

    　となっています。つまり<割合>８で音符の長さと時間発音し，８より小
    さければ音符よりも短い時間，８より大きければ音符よりも長い時間発音
    されます。
    　高精度指定の場合，<割合>はパーセンテージで表し，

        ゲートタイム ＝ 音符×<割合>÷100

    　となります（<割合>100 で音符の長さと同じになる）。
    　高精度指定の場合，<割合>は１〜 200までの範囲をとります。
    　ただし，MML タイプがEDPLAYの場合は，高精度指定は，
    
        ゲートタイム ＝ 音符×<割合>÷256

    となっており，<割合>は１〜255 の範囲で指定しなければなりません。


    ■  ’：スタカート

    ┌───────────────────────────────┐
    │’[＃]<割合>                                                  │
    └───────────────────────────────┘
    【パラメータ】
        ＃                  高精度指定
        <割合>              ゲートタイムの割合
                            （通常１〜16，高精度０〜 200）

    【解説】
    　直後の発音に対してだけゲートタイムの割合を指定します。
    　パラメータの意味，動作はＱコマンドと同じです。


  ６．５    オクターブ


    ■  Ｏ：オクターブの指定

    ┌───────────────────────────────┐
    │ｏ<オクターブ>                                                │
    └───────────────────────────────┘
    【パラメータ】
        <オクターブ>        オクターブ（０〜９）

    【解説】
    　オクターブを指定します。


    ■  ＞，＜：オクターブ・アップ／ダウン

    オクターブアップ
    ┌───────────────────────────────┐
    │＞                                                            │
    └───────────────────────────────┘
    オクターブダウン
    ┌───────────────────────────────┐
    │＜                                                            │
    └───────────────────────────────┘
    【パラメータ】
        なし

    【解説】
    　'＞'はオクターブを１つ上げ，'＜'はオクターブを１つ下げます。


    ■  ＾：１オクターブアップ

    ┌───────────────────────────────┐
    │＾                                                            │
    └───────────────────────────────┘
    【パラメータ】
        なし

    【解説】
    　'＾'の直後の１音だけ１オクターブ上げます。


  ６．６    ベロシティ＆ボリューム


    ■  Ｖ，＠Ｖ：ベロシティ＆ボリューム

    形式１
    ┌───────────────────────────────┐
    │ｖ[{＋,−}]<Vn>[,[{＋,−}]<ボリューム>]                       │
    └───────────────────────────────┘
    形式２
    ┌───────────────────────────────┐
    │ｖ＃[{＋,−}]<ベロシティ>[,[{＋,−}]<ボリューム>]             │
    └───────────────────────────────┘
    形式３
    ┌───────────────────────────────┐
    │＠ｖ[{＋,−}]<ベロシティ>[,[{＋,−}]<ボリューム>]             │
    └───────────────────────────────┘

    【パラメータ】
        <n>                 ベロシティ設定値（０〜15）
        <ベロシティ>        ベロシティ（１〜 127）
        <ボリューム>        コントロールチェンジのボリューム
                            （０〜 127）

    【解説】
    　ベロシティとコントロールチェンジのボリュームを指定します。
    　形式１ではベロシティ<Vn>は０〜15の範囲で指定しますが，実際のベロ
    シティ値はコントロールコマンドの「.vdef 」によって設定された値とな
    ります（「４．４」参照）
    　形式２と形式３は指定の仕方が違うだけで動作はまったく同じです。
    　<ボリューム>は<ベロシティ>の後ろにカンマ（, ）を置いて指定します。
    　どの形式の場合でも<ボリューム>省略できます。
    　<ベロシティ>も省略できますがその場合<ボリューム>は必ず指定しなけ
    ればなりません（例：ｖ,64 ）。
    　<ベロシティ>も<ボリューム>も数値の先頭にプラス記号／マイナス記号
    （＋，−）を置くと相対指定となり，現在のベロシティ値またはボリュー
    ム値にプラス（＋）の場合は値が加えられ，マイナス（−）の場合は値が
    引かれます。


    ■  ］，［：ベロシティ・アップ／ダウン

    ベロシティアップ：形式１
    ┌───────────────────────────────┐
    │］[<Vn>]                                                      │
    └───────────────────────────────┘
    ベロシティアップ：形式２
    ┌───────────────────────────────┐
    │］＃[<ベロシティ>]                                            │
    └───────────────────────────────┘
    ベロシティダウン：形式１
    ┌───────────────────────────────┐
    │［[<Vn>]                                                      │
    └───────────────────────────────┘
    ベロシティダウン：形式２
    ┌───────────────────────────────┐
    │［＃[<ベロシティ>]                                            │
    └───────────────────────────────┘

    【パラメータ】
        <Vn>                ベロシティ設定値（１〜15）
        <ベロシティ>        ベロシティ値（１〜 127）

    【解説】
    　'］'はベロシティ値を大きくし，'［'は反対にベロシティ値を小さくし
    ます。
    　ベロシティ・アップ／ダウンともに形式１ではベロシティ<Vn>は１〜15
    の範囲で指定しますが，実際のベロシティ値はコントロールコマンドの「
    .vdef 」によって設定された値となります（「４．４」参照）
    　形式１，２ともにパラメータが省略された場合はそれぞれの最小の値，
    すなわち「１」が指定されたとみなされます。


    ■  ！：アクセント

    形式１
    ┌───────────────────────────────┐
    │！[{＋,−}]<Vn>                                               │
    └───────────────────────────────┘
    形式２
    ┌───────────────────────────────┐
    │！#[{＋,−}]<ベロシティ>                                      │
    └───────────────────────────────┘

    【パラメータ】
        <Vn>                ベロシティ設定値（１〜15）
        <ベロシティ>        ベロシティ値（１〜 127）

    【解説】
    　直後の発音に対してのみベロシティを指定します。
    　形式１ではベロシティ<Vn>は１〜15の範囲で指定しますが，実際のベロ
    シティ値はコントロールコマンドの「.vdef 」によって設定された値とな
    ります（「４．４」参照）
    　形式１，２とも数値の先頭にプラス記号／マイナス記号（＋，−）を置
    くと相対指定となり，現在のベロシティ値またはボリューム値にプラス（
    ＋）の場合は値が加えられ，マイナス（−）の場合は値が引かれます。

    【使用例】
        !15c
        !#+8c


  ６．７    音色変更


    ■ ＠：プログラムチェンジ

    ┌───────────────────────────────┐
    │＠<音色番号>                                                  │
    └───────────────────────────────┘
    【パラメータ】
        <音色番号>          １〜127

    【解説】
    　MIDIの場合はプログラムチェンジを送信します。内臓音源では音色を
    変更します。

    【使用例】
        @14


  ６．８    テンポ


    ■  Ｔ：テンポ設定

    ┌───────────────────────────────┐
    │ｔ[{＋,−}]<テンポ>                                           │
    └───────────────────────────────┘
    【パラメータ】
        <テンポ>            30〜280

    【解説】
    　演奏のテンポを設定します。
    　プラス記号／マイナス記号（＋，−）を置くと相対指定となり，プラス
    （＋）の場合はテンポが早められ，マイナス（−）の場合はテンポが遅く
    なります。


    ■  Ｓ％：拍子

    ┌───────────────────────────────┐
    │ｓ％<n>／<m>                                                  │
    └───────────────────────────────┘
    【パラメータ】
        <n>, <m>            １，２，３，４，６，８，12，16

    【解説】
    　拍子を「<m>分の<n>拍子」といった具合に指定します。
    　Ｆ-BASIC 386との互換性ため設けられているコマンドで実際には何の動
    作もしません。


  ６．９    ピッチベンド


    ■  Ｕ：ピッチベンド

    ┌───────────────────────────────┐
    │ｕ<ベンド>                                                    │
    └───────────────────────────────┘
    【パラメータ】
        <ベンド>            −8192〜＋8191

    【解説】
    　音程を微妙に変化させるコマンドです。
    　内蔵音源の場合はピッチベンドを一杯に動かすと（−8192〜＋8191）で
    ２オクターブ変化します。


  ６．10    パンポット


    ■  ％Ｃ，％Ｌ，％Ｒ：パンポット

    形式１
    ┌───────────────────────────────┐
    │％ｃ[＃][<n>]                                                 │
    └───────────────────────────────┘
    【パラメータ】
        ＃                  高精度指定
        <n>                 単精度−15〜15，高精度−64〜63

    形式２
    ┌───────────────────────────────┐
    │％ｌ[＃][{＋，−}]<n>                                         │
    └───────────────────────────────┘
    【パラメータ】
        ＃                  高精度指定
        <n>                 単精度１〜15，高精度１〜63

    形式３
    ┌───────────────────────────────┐
    │％ｒ[＃][{＋，−}]<n>                                         │
    └───────────────────────────────┘
    【パラメータ】
        ＃                  高精度指定
        <n>                 単精度１〜15，高精度１〜63

    【解説】
    　パンポット（音の定位）を指定します。
    　形式１（％ｃ）は<n> の値が０で中央，正だと右より，負だと左よりに
    なります。
    　形式２（％ｌ），形式３（％ｒ）はそれぞれ左より，右よりのパンポッ
    トを設定します。またプラス記号／マイナス記号（＋，−）を置くと相対
    指定となり，％ｌはプラス（＋）で左，マイナス（−）で右に，％ｒはプ
    ラスで右，マイナスで左の方向に，指定の値変化します。

    【使用例】
        %c0
        %r9
        %l+2


  ６．11  エフェクト

    ■  ％Ｄ：ディレイ

    ┌───────────────────────────────┐
    │％ｄ<ディレイタイム>                                          │
    └───────────────────────────────┘
    【パラメータ】
        <ディレイタイム>    音長で指定。音符（384 分音符〜全音符）また
                            はパーセント記号（％）を先頭にステップタイ
                            ム（０〜 384）で指定

    【解説】
    　<ディレイタイム>に指定した時間（音符かステップタイムで指定する）
    だけ演奏を遅らせます。
    　一度指定したディレイを解除するには「％ｄ％０」と指定してください。

    【使用例】
        %d%24


    ■  Ｋ：キートランスポーズ

    ┌───────────────────────────────┐
    │ｋ<n>                                                         │
    └───────────────────────────────┘
    【パラメータ】
        <n>         −127〜127

    【解説】
    　指定の値<n> だけ音程をシフトさせます。
    　値<n> が１変わるごとに半音分シフトされます。正の値だと音程が上が
    り，負の値だと音程が下がり，０だとシフトなしです。
    　１オクターブ音程上げたい場合には＋12を指定することになります。


  ６．12  出力コントロール

    ■  Ｈ：ＭＩＤＩチャンネル

    ┌───────────────────────────────┐
    │ｈ<MIDIチャンネル>                                            │
    └───────────────────────────────┘
    【パラメータ】
        <MIDIチャンネル>    MIDIチャンネル（０〜15または１〜16）

    【解説】
    　MIDIに出力する場合のMIDIチャンネルを指定します。
    　コントロールコマンドに「.chbase 0 」が指定されていればMIDIチャン
    ネルは０〜15の範囲で指定しますが，「.chbase 1 」が指定されていれば
    １〜16の範囲で指定します。

    【使用例】
        h1


    ■  ％Ｏ：出力ポート

    ┌───────────────────────────────┐
    │％ｏ<ポート番号>                                              │
    └───────────────────────────────┘
    【パラメータ】
        <ポート番号>        ポート番号（０〜255）

    【解説】
    　演奏中にトラックの出力ポートを変更します。
    　<ポート番号>については「４．５　トラックに関する設定」の表4.5.1 
    を見てください。

    【使用例】
        %o255


  ６．13  ＭＩＤＩ


    ■  ％Ｅ：エクスクルーシブメッセージ

    ┌───────────────────────────────┐
    │％ｅ<データ>[,<データ>･･･]                                    │
    └───────────────────────────────┘
    【パラメータ】
        <データ>            送信データ（０〜127）

    【解説】
    　MIDIにエクスクルーシブメッセージを送信します。
    　データは最大2000バイト指定可能です。


    ■  ＊，￣，＿：モジュレーションデプス

    形式１
    ┌───────────────────────────────┐
    │＊<n>                                                         │
    └───────────────────────────────┘
    【パラメータ】
        <n>                 モジュレーションデプス（０〜127）

    形式２：モジュレーションオン
    ┌───────────────────────────────┐
    │￣                                                            │
    └───────────────────────────────┘
    形式３：モジュレーションオフ
    ┌───────────────────────────────┐
    │＿                                                            │
    └───────────────────────────────┘

    【解説】
    　モジュレーションデプスを指定します。
    　形式２，形式３のモジュレーションのオン／オフは，形式１の<n> に
    127 ／０を指定するのと同じです。


    ■  ？０，＠Ｃ：コントロールチェンジ

    形式１
    ┌───────────────────────────────┐
    │？０／<p1>,<p2>                                               │
    └───────────────────────────────┘
    形式２
    ┌───────────────────────────────┐
    │＠ｃ<p1>／<p2>                                                │
    └───────────────────────────────┘

    【パラメータ】
        <p1>, <p2>          ０〜127

    【解説】
    　MIDIのコントロールチェンジを送信します。
    　形式１，２は書き方が違うだけで内容は同じです。

    【使用例】
        ?0/10,120
        @c7/127


  ６．14  ＳＳＧ


    ■  Ｍ：ＳＳＧエンベロープ周波数の指定

    ┌───────────────────────────────┐
    │ｍ<周波数>                                                    │
    └───────────────────────────────┘
    【パラメータ】
        <周波数>

    【解説】
    　HGPLAYやEDPLAYからの移植作業が楽になるようサポートされているコマ
    ンドです。
    　コントロールコマンドで「SSG 変換」が指定されているパート（PCM 音
    源パート）にだけ有効です。SSG 変換が指定されていないパートで使うと
    コンパイル時にエラーとなります。
    　本来はSSG 音源のエンベロープ周波数を設定するコマンドですがFMＴＯ
    ＷＮＳにはSSG 音源はありませんので実際には何の動作もしません。


    ■  Ｓ：ＳＳＧエンベロープの指定

    ┌───────────────────────────────┐
    │ｓ<エンベロープ>                                              │
    └───────────────────────────────┘
    【パラメータ】
        <エンベロープ>      エンベロープ番号（０〜127）

    【解説】
    　HGPLAYやEDPLAYからの移植作業が楽になるようサポートされているコマ
    ンドです。
    　本来はSSG 音源のエンベロープを指定するコマンドですが,Ｈigh-ＥＵＰ
    Compilerではプログラムチェンジ（音色変更）と同等の動作をします。
    　「＠<n> 」ではプログラムチェンジは１〜128 の範囲で指定しますが，
    ｓコマンドでは０〜127 の範囲で指定します。
    　コントロールコマンドで「SSG 変換」が指定されているパート（PCM 音
    源パート）で使うとエンベロープ番号は次のようにプログラムチェンジに
    変換されます。

        S0〜3   →  @9
        S4〜7   →  @9
        S8      →  @8
        S9      →  @9
        S10     →  @10
        S11     →  @11
        S12     →  @12
        S13     →  @13
        S14     →  @14
        S15     →  @15
        S16〜31 →  @16〜31


    ■  Ｘ：ＳＳＧノイズコントロール

    ┌───────────────────────────────┐
    │ｘ<ノイズモード>                                              │
    └───────────────────────────────┘
    【パラメータ】
        <ノイズモード>      ノイズモード（０〜２）

    【解説】
    　HGPLAYやEDPLAYからの移植作業が楽になるようサポートされているコマ
    ンドです。
    　コントロールコマンドで「SSG 変換」が指定されているパート（PCM 音
    源パート）にだけ有効です。SSG 変換が指定されていないパートで使うと
    コンパイル時にエラーとなります。
    　本来はSSG 音源のノイズモードを設定するコマンドですがFMＴＯＷＮＳ
    にはSSG 音源はありませんので実際には何の動作もしません。


    ■  Ｙ：レジスタ設定

    ┌───────────────────────────────┐
    │ｙ<レジスタ>,<データ>                                         │
    └───────────────────────────────┘
    【パラメータ】
        <レジスタ>          ０〜65535
        <データ>            ０〜65535

    【解説】
    　HGPLAYやEDPLAYからの移植作業が楽になるようサポートされているコマ
    ンドです。
    　コントロールコマンドで「SSG 変換」が指定されているパート（PCM 音
    源パート）にだけ有効です。SSG 変換が指定されていないパートで使うと
    コンパイル時にエラーとなります。
    　本来はSSG 音源やFM音源の内部レジスタを操作するコマンドですが実際
    には何の動作もしません。


  ６．15  連符


    ■  ｛，｝：連符

    ┌───────────────────────────────┐
    │｛<MML>｝[<音長>]                                             │
    └───────────────────────────────┘
    【パラメータ】
        <MML>               MML コマンド文字列
        <音長>              音符またはパーセント記号（％）を先頭にステ
                            ップタイムで指定

    【解説】
    　<音長>で指定した音長に収まるように｛｝の中の発音に関するMML コマ
    ンドを均等に分割します。
    　<音長>が省略された場合は，MML コマンドの'ｌ'で指定された音長が指
    定されたと見なされます。
    　<MML>の中に音長が指定してあってもすべて無効になります。
    　連符のネストはできません。


  ６．17  マクロ展開

    ■  （，）：リピート

    ┌───────────────────────────────┐
    │（<MML>）[<n>]                                                │
    └───────────────────────────────┘
    【パラメータ】
        <MML>               MML コマンド文字列
        <n>                 リピート回数（２〜）

    【解説】
    　（）で括られた<MML> を<n> で指定された回数だけくりかえします。
    　<n> が省略された場合は２が指定されたとみなされます。
    　このリピートはマクロ展開で一度文字列を展開してから処理されますの
    で展開後の文字列が4000文字を越えるとエラーとなります。


    ■  ＄：マクロ展開

    ┌───────────────────────────────┐
    │＄<マクロ名>[（<パラメータ>）]                                │
    └───────────────────────────────┘
    【パラメータ】
        <マクロ名>          マクロ名（16文字以内）
        <パラメタ>          パラメータ文字列

    【解説】
    　ドル記号（＄）の後ろのマクロ名を指定すると，そのマクロ内容が展開
    されます。
    　マクロはコンパイラ制御コマンドの「#define 」で定義したものか，組
    み込みマクロが使えます。
    　<パラメータ>はマクロ名のすぐ後ろに（）をおいてその中に指定します。
    マクロ名と（）の間に空白がひとつでもあると（）がリピート展開とみな
    されて処理されますので注意してください。
    　<パラメータ>は省略可能ですが，その場合マクロ名の後ろには空白を１
    つ以上置いてください。そうしないとマクロ名と他のMML コマンドとの区
    別がつかなくなりエラーとなる場合があります（実際にはマクロ名の取り
    出しはマクロ名に使用できる文字以外の文字が発見されたところまでが有
    効となっています）。


  ６．16  その他のＭＭＬコマンド

    ■  Ｚ：データ出力

    ┌───────────────────────────────┐
    │ｚ<データ>[,<データ>･･･]                                      │
    └───────────────────────────────┘
    【パラメータ】
        <データ>            送信データ（０〜255）

    【解説】
    　コントロールコマンドで「.z_cmd on 」が指定されている場合にも有効
    なコマンドです。
    　本来はMIDIに指定のデータを送信するコマンドですが，Ｈigh-ＥＵＰ C
    ompiler では指定のデータをEUPHONY 演奏データとして書き込みます。
    　ですから使用には充分な注意が必要です。
    　EUPHONY 演奏データの仕様にないデータを指定するとコンパイル時にエ
    ラーとなったり，ワーニングが出る可能性もあります。



        ******************************************************
        ☆  第７章      マクロ展開
        ******************************************************


　この章ではマクロ展開についての解説を行います。


  ７．１    マクロについて


　Ｈigh-ＥＵＰ Compiler のマクロは２種類に大別できます。
　１つは「ユーザー定義マクロ」，ひとつは「組み込みマクロ」です。
　「ユーザー定義マクロ」とはその名のとおりユーザーが自由に定義して使え
るマクロです。マクロの定義と解除はコンパイラ制御コマンドの「#define」，
「#undef」で行います。
　「組み込みマクロ」はシステムに最初から定義されているマクロのことです。
これらはユーザが予め定義していなくても使うことができます。
　組み込みマクロには以下のようなマクロがあります。

    ＄00〜＄FF      対応する16進数を展開する
    ＄cho           チョーキング用
    ＄slide         パラメータスライド用
    ＄vib           ビブラート用
    ＄wave          パラメータウェーブ用

　ユーザー定義マクロはこれらの組み込みマクロ以外のマクロ名を使わなけれ
ばなりません。
　マクロの中から更にマクロを使用することも可能ですが，自分自身を定義し
てしまうような使い方をするとコンパイラがハングアップしますので注意して
ください。
　次のようなマクロ定義は行ってはいけません。

        #define $A      t120 $B 
        #define $B      $A v15

※  　特別なマクロ展開として「（…）n 」といった形式で使用するリピート
    展開があります。使い方は「第６章　ＭＭＬコマンド：６．17　マクロ展
    開」を参照してください。


  ７．２    ユーザー定義マクロ


　ユーザー定義マクロはユーザーが自由に定義して使えるマクロです。
　 256個まで定義可能で，マクロ内容は最大 256文字まで使用可能です。
　マクロの定義・解除はコンパイラ制御行の「#define」，「#undef」 によっ
て行います（「第５章　コンパイラ制御行：５．２　マクロ定義・解除」参照
）。

  ・マクロパラメータ

　マクロ展開時にマクロ名の後ろに（）を指定して括弧に中にパラメータが指
定できます。
　パラメータはマクロ名のすぐ後ろに（）をおいてその中に指定します。マク
ロ名と（）の間に空白がひとつでもあると（）がリピート展開とみなされて処
理されますので注意してください。
　ユーザー定義マクロのパラメータは展開されたマクロ内容の後ろに単純に追
加されるだけです。
　たとえば，

        #define note    Ｃ

　とすると，「$note(４)」は「Ｃ４」と展開されます。

  ・自動設定マクロ

　コンパイラ起動時にMML テキストの入力パス名から拡張子を取り除いたファ
イル名をマクロ名とするマクロが自動的に定義されます（マクロ内容は空です
）。
　このためコンパイラ起動時の入力パス名には組み込みマクロと同じ名前のフ
ァイル名は指定できません。


  ７．３    組み込みマクロ


　組み込みマクロはシステムに最初から定義されているマクロのことで，ユー
ザが予め定義していなくても使うことができます。


    ■  ＄ｓｌｉｄｅ：パラメータスライド用マクロ

    ┌───────────────────────────────┐
    │＄slide（<cmd>,<note>,<len>,<n>,<tie>,<fun>,<sp>,<ep> ）      │
    └───────────────────────────────┘
    【パラメータ】
        <cmd>               コマンド
        <note>              音程（ａ〜ｇ，ｒ，ｎ）
        <len>               音長，音符またはパーセント記号（％）を先頭
                            にステップタイムで指定
        <n>                 分解数，全体の音長は<len> ×<n> となる。
        <tie>               タイを指定する場合は「＆」を指定する
        <fun>               関数    x       １次関数
                                    x^2     ２次関数
                                    e^x     指数関数
                                    sqr     平方根
        <sp>                変化開始値
        <ep>                変化終了値

    【解説】
    　パラメータを変化させるマクロです。
    　<cmd> のパラメータを<sp>から<ep>まで，<fun> に指定された関数によ
    って変化させます。

    【使用例】
        $slide(%c,e,128,16,&,x,15,-15) /* パンポットを変化させる */


    ■  ＄ｗａｖｅ：パラメータウェーブ用マクロ

    ┌───────────────────────────────┐
    │＄wave（<cmd>,<note>,<len>,<n>,<tie>,<fun>,<s>,<a>,<spd>）    │
    └───────────────────────────────┘
    【パラメータ】
        <cmd>               コマンド
        <note>              音程（ａ〜ｇ，ｒ，ｎ）
        <len>               音長，音符またはパーセント記号（％）を先頭
                            にステップタイムで指定
        <n>                 分解数，全体の音長は<len> ×<n> となる。
        <tie>               タイを指定する場合は「＆」を指定する
        <fun>               関数    sin     正弦波（〜〜）
                                    tri     三角波（／＼／＼）
        <s>                 変化開始値
        <a>                 振幅，<s> を中心に±a 変化する
        <spd>               変化速度

    【解説】
    　パラメータを周期的に変化させるマクロ関数です。
    　<cmd> にあたえるパラメータを<s> 中心に振幅<a> の幅で変化させます。
    　具体的には，

        for( i＝0; i ＜ <n>; ＋＋i )
            parameter ＝ <s> ＋ <a> × sin( i×<spd> );

    　で変化させています（sin に与える角度は弧度法）。
    　よって<spd> に180 を指定するとまったく変化しなくなってしまいます
    　<spd> に90を指定すると，

        <s> ⇒ 最大値（<s>＋<a>）⇒ <s> ⇒ 最小値（<s>−<a>）⇒

    　と変化します。

    【アドバイス】
    　変化の周期は<len> と<spd> の組み合わせによって決まります（実際に
    はテンポも関係する）。
    　<len> を64分音符にすると，<spd>は10, 15, 30, 45, 90といった値で
    使うといいようです。

    【使用例】
        $wave(v#,c,64,128,,sin,80,16,30) /* ベロシティを変化させる */


    ■  ＄ｃｈｏ：チョーキング用マクロ

    ┌───────────────────────────────┐
    │＄cho（<note>,<len>,<n>,<fun>,<sp>,<ep> ）                    │
    └───────────────────────────────┘
    【パラメータ】
        <note>              音程（ａ〜ｇ，ｒ，ｎ）
        <len>               音長，音符またはパーセント記号（％）を先頭
                            にステップタイムで指定
        <n>                 分解数，全体の音長は<len> ×<n> となる。
        <fun>               関数    x       １次関数
                                    x^2     ２次関数
                                    e^x     指数関数
                                    sqr     平方根
        <sp>                変化開始値
        <ep>                変化終了値

    【解説】
    　ピッチベンド（MML のＵコマンドのパラメータ）を変化させるマクロで
    す。
    　ピッチベンドを<sp>から<ep>まで，<fun> に指定された関数によって変
    化させます。
    　このマクロは＄slide に次のように指定したのと同じ動作をします。

        ＄slide( u, <note>, c<len>, <n>, &, <fun>, <sp>, <ep> )


    ■  ＄ｖｉｂ：ビブラート用マクロ

    ┌───────────────────────────────┐
    │＄vib（<note>,<len>,<n>,<fun>,<s>,<a>,<spd>）                 │
    └───────────────────────────────┘
    【パラメータ】
        <note>              音程（ａ〜ｇ，ｒ，ｎ）
        <len>               音長，音符またはパーセント記号（％）を先頭
                            にステップタイムで指定
        <n>                 分解数，全体の音長は<len> ×<n> となる。
        <fun>               関数    sin     正弦波（〜〜）
                                    tri     三角波（／＼／＼）
        <s>                 変化開始値
        <a>                 振幅，<s> を中心に±a 変化する
        <spd>               変化速度

    【解説】
    　ピッチベンド（ｕコマンドのパラメータ）パラメータを周期的に変化さ
    せるマクロ関数です。
    　ピッチベンドを<s> 中心に振幅<a> の幅で変化させます。
    　このマクロは＄waveに次のように指定したのと同じ動作をします。

        ＄wave(u,<note>,<len>,<n>,&,<fun>,<s>,<a>,<spd> )



        ******************************************************
        ☆              付録
        ******************************************************



  ●  付録ファイル説明


    ・“ＰＩＡＮＯ．ＤＥＦ”：ピアノ用パンポット定義ファイル

    　"PAINO.DEF" はＨigh-ＥＵＰ Compilerの ノートアサイン機能を使用し
    て音程毎にパンポットを設定するための定義ファイルです。
    　この定義ファイルを読み込むだけで音程の低いほうは左から，音程の高
    いほうは右から音を出すといったことが可能です。
    　実際の使い方，マクロ＄TRK に使用するトラック番号を設定して，「#i
    nclude」でインクルードします。
    　複数のトラックに使いたい場合は，使いたいトラックの数だけ同じよう
    に＄TRK を定義しインクルードします。

    【使用例】
        /* トラック０，１に"PIANO.DEF"を使用する  */
        #define     TRK     0
        #include    "piano.def"
        #define     TRK     1
        #include    "piano.def"


    ・“ＭＰＤＲＵＭＳ．ＤＥＦ”：MUSIC PRO TOWNS 用ドラム設定ファイル

    　ミュージカルプランのMUSIC PRO TOWNS でMML セーブして作成されたフ
    ァイルからドラムパートにパンポットを割り振ります。
    　これによりバスドラムは真ん中，ハイハットは少し右，クラッシュシン
    バルは右から，といった具合にパンポットが設定可能です。
    　実際の使い方，マクロ＄TRK に使用するトラック番号を設定して，「#i
    nclude」でインクルードします。
    　複数のトラックに使いたい場合は，使いたいトラックの数だけ同じよう
    に＄TRK を定義しインクルードします。

    【使用例】
        /* トラック10〜13に"MPDRUMS.DEF"を使用する */
        #define     TRK     10
        #include    "mpdrums.def"
        #define     TRK     11
        #include    "mpdrums.def"
        #define     TRK     12
        #include    "mpdrums.def"
        #define     TRK     13
        #include    "mpdrums.def"



  ●  参考文献


    「HGPLAY version 2 ＥＤＰＬＡＹ」，Tarosa
                    ソフトバンク，月間◎h!FM 1989年６月号

    「FMＴＯＷＮＳ Ｃライブラリ リファレンス」
                    富士通，1989年10月


  ●    Ｅｎｄｉｎｇ


                   《Ｕｓｅｄ  ｔｏｏｌｓ》

               FMＴＯＷＮＳ High Ｃ Compiler V1.4
                            JGAWK
                       MIFES, RED2 & Vz


                《Ｓｐｅｃｉａｌ  Ｔｈａｎｋｓ》

                      初代からくり屋（山）
               二代目からくり屋 た○ぴ○ん(^_^;)
                        組紐屋HideKun
                              ＆ 
                       ALL 『闇』 member

                 自来也愛好会 HONESEN & PONKARA

                 ◎h!FM 編集部 ＆ 協力スタッフ




                    1990.12.10  By TaroPYON

