+―■―■―+――――――――――――――――――+―■―■―+ | ■ ■ | 鍵竜[Keyvern] ver. 0.20 | ■ ■ | | ■ ■ |                  | ■ ■ | | | | |    .KVXファイルの書式    | | | | +―+―+―+――――――――――――――――――+―+―+―+ □.KVXファイルとは   .KVXファイル(鍵竜テキストファイル)とは、鍵竜コンパイラによって演奏デ  ータを生成するためのソースファイルです。拡張子 .KVX を持ち、専用の書式で書か  れたテキストファイルのことで、ファイル自体は各種のエディタで作成することが可  能です。   このドキュメントでは、鍵竜コンパイラ ver. 0.20 用の書式を説明します。 □用語など ¥コマンド   \ で始まる文字列のことです。途中にブランクは含まれません。¥コマンドと、そ  の後に続く文字との間はブランクで区切ります。 数値   基本的には 0〜65535 の 10 進非負整数です。値に負数を設定できるときのみ、負  数を指定できます。途中にブランクを含めることはできません。 ブランク   鍵竜コンパイラでは、空白やタブだけではなく、コントロールコードの 00h〜21h  のうち、EOF(1Ah)を除く全てのコードを指します。1個以上あれば、幾つ連続して  いても同様に扱われます。 マーカ   鍵竜プレイヤで画面に表示される「音符」は、実際には音程のほかに発音データや  それらをキーに割り当てるタイミングなどの要素が必要になります。鍵竜コンパイラ  ではこれらの要素をひとまとめにして扱います。これを「マーカ」と呼ぶことにしま  す。   マーカは「音符マーカ」と、「MIDI マーカ」の2種類があります。 マクロ   ソース中で繰り返し使用される文字列を、マクロとして定義することができます。  鍵竜コンパイラではマクロ中にユーザパラメータを最大9種類まで含めることができ  ます。   マクロの定義内容に、既に定義済みのマクロを含めることができますが、このとき  に定義済みマクロは一度展開されます。 予告宣言   MIDI メッセージにはノートオン/オフのように時間を考える必要のあるものと、コ  ントロールチェンジのように時間の概念のないものがあります。鍵竜コンパイラでは  時間の概念のない MIDI メッセージは、MIDI マーカを除き、ノートオンなどと同時刻  に出力するようにコンパイルしますので、ソース中にこれらのメッセージがあっても  次の音符・休符まで保留されます。このようなメッセージの種類を【予告宣言】とい  うことにします。   【予告宣言】扱いの MIDI メッセージの後に音符・休符がないままモード切り替え  等を行なうと、保留されたものはコンパイルされませんのでご注意ください。 □ブランクの必要性、不必要性とコメント   ¥コマンド、数値、マーカ名、マクロ名等は複数の文字で意味をなしているので、  これらの途中にブランクを含めることはできません。それ以外は1文字でも意味をな  しています。これらの意味をなす単位を「単語」と呼ぶことにします。   これらの単語の前後には、ブランクはあってもなくても、どちらでも構いません。  ただし、¥コマンドの直後、マクロ定義時のマクロ名の直後、パラメータのないマク  ロの使用時のマクロ名の直後には区切りとして、ブランク(マクロ名の直後の場合に  はマクロに使用不可能な文字も可能)が必要です。   また、改行はブランクに含まれるので、書式は行に依存しません。単語の途中でな  ければいつでも改行を入れることが可能ですし、改行を省いて1行に多くの単語を並  べることが可能です。   しかし、あまりゴチャゴチャすると読みにくいので、適当に改行したりスペースを  入れたりして、読みやすいソースに整えておくのがよいでしょう。   ソース中に % があると、以後改行コード(CR または CR+LF)までをコメント文と  みなし、この部分はコンパイルに影響しません。% はブランクを挿入可能な場所にな  らどこにでも入れることができます。   マクロ定義の数式中の % はコメントではなく、演算子 % とみなされます。 □内部モード   鍵竜コンパイラの PHASE0(ソース解析フェーズ)開始時の内部モードは「トップレ  ベル」になっています。ソース中の指定により内部モードは切り替わります。 トップレベル ---+--- ノートトラックモード(Nモード) +--- BGMトラックモード(Bモード) +--- 音符マーカモード +--- MIDI マーカモード +--- マクロ定義モード   Nモードでは、実際に演奏するデータを書きます。   Bモードでは、BGM データを書きます。   音符マーカモード、MIDI マーカモードではそれぞれのマーカの内容を定義します。   マクロ定義モードではマクロの内容を定義します。 □パート   N、Bいずれのモードでも、パート毎にデータを分けて書くことができます。  ソース記述時に複雑なフレーズや異なる声部をパート毎に分けると便利です。   パートの最大数は以下の通りです。それぞれのモードでパートは独立しています。 Nトラック 0〜63 Bトラック 0〜63   コンパイルの際にパートはすべてまとめられるので、出力データにはパートの概念  はありません。また、出力データではNトラックはS・Aトラックに、Bトラックは  Mトラックに、マーカはPトラックに展開されます。 □書式   鍵竜コンパイラでは MML ライクな書式となっていますが、開発時に[美羽蝶]のル  ーチンを一部応用しているのでその名残がいくらかあります。   以下で、各部分の書式を詳しく説明します。 ■説明の補足   説明には大文字を使用しますが、小文字であっても大文字と区別されません。ただ  し、タイトルの文字列中では、大文字と小文字は区別されます。   半角文字は、実際の文字を書くことを示します。   全角文字は、括弧を除き、その言葉の意味するものを書くことを示します。   []は、省略可能なものを示します。   {}は、その中の、|で区切ったもののうち1つを選択することを示します。   …は、以後同様に続くことを示します。   記号が紛らわしいときは、例えば "[" のようにも表現しますが、実際にはこの引用  符は書きません。 ■トップレベル 《¥コマンド》 \ARTIST {作者文字列|"{" 作者文字列[作者文字列]… "}"}   演奏データの作者を設定します。書式は \TITLE と同様です。   作者は合計で 255 文字までです。 \END   コンパイルを終了します。   ソース中に必ずなければなりません。また、これ以降はすべて無視されます。 \GENRE {ジャンル文字列|"{" ジャンル文字列[ジャンル文字列]… "}"}   演奏データのジャンルを設定します。書式は \TITLE と同様です。   ジャンルは合計で 255 文字までです。 \JUDGE Miss幅音長 "," Good幅音長   判定用のクロック幅を設定します。Miss幅、Good幅とも、正しい音符の時  刻からの最大音長を指定します(結果として、判定幅はこの2倍となります)。有効  な範囲はクロック数換算で 1〜255 で、Miss幅よりGood幅を広くすることは  できません。   デフォルトはMiss幅は 2(2分音符)、Good幅は 8(8分音符)です。 \LEVEL 難易度   難易度を設定します。範囲は 0 または 1〜9 で、9 が最も難しくなります。また、  0 のときは難易度不定となります。   難易度設定はあくまで付加情報です(どの難易度設定でも実際の演奏には影響しま  せん)。   デフォルトは 3 です。 \SYNC   各パートの開始時刻を揃えます。   MML の末尾の休符などを端折った場合に各パートの終了時刻が不揃いになることが  ありますが、このコマンドにより、すべてのパートの、これ以後最初に書き込む時の  時刻が、\SYNC 以前で最も遅い終了時刻に揃えられます。 \TEMPO テンポ   曲のテンポを設定します。単位は BPM で、範囲は 1〜255 です。   デフォルトは 120 になっています。 \TITLE {タイトル文字列|"{" タイトル文字列[タイトル文字列]… "}"}   演奏データのタイトルを設定します。文字列はダブルクォートで括ります。ダブル  クォート中ではブランク類やコメントもそのまま出力されます。ダブルクォート自身  を書きたいときは "" と2つ続けます。   タイトルを1行で設定する場合、前後の中括弧 { } は特に必要ありません。複数行  に渡ったタイトルの場合、複数の文字列を並べて(この場合、ブランクやコメントを  自由に挟むことができます)、全体を中括弧 { } で括ります。このとき、各文字列の  間に改行が自動的に補われます。   タイトルは 255 文字までです。 《マーカデフォルト設定》 ? デフォルト設定[デフォルト設定]…;   音符マーカモード、MIDI マーカモードでのデフォルト値を設定します。この設定は  両方のモードに共通です。設定できるのは以下のものです。   O オクターブ オクターブを設定します。範囲は -1〜9 です。 デフォルトは 4 になっています。   > オクターブを1つ上げます。最高は 9 です。   < オクターブを1つ下げます。最低は -1 です。   L 長さ 音符・休符のデフォルト音長を設定します。長さとして指定可能な値は以下の    値のみです。   1 2 3 4 6 8 12 16 24 32 48 64 96 192 デフォルトは 4 になっています。   Q 音長比 音符が実際に発音される長さの、音長に対しての比を設定します。範囲は 0〜    128 で、発音音長 : 音長 = Q : 128 となります。端数は切り捨てられます。た    だし 1 クロック(192 分音符)未満となった場合は 1 クロックとなります。 デフォルトは 128 になっています。   V ヴェロシティ MIDI の発音時のヴェロシティを設定します。範囲は 0〜127 です。 デフォルトは 127 になっています。   = チャンネル MIDI 出力をするチャンネルを設定します。範囲は 1〜16 です。 デフォルトは 1 になっています。   オクターブの設定可能な範囲は -1〜9 ですが、音符マーカモードでは 1〜6 のみが  有効です。 《モード移行》 N パート番号   Nモードへ移行します。パート番号の範囲は 0〜63 です。 B パート番号   Bモードへ移行します。パート番号の範囲は 0〜63 です。 "[" マーカ名 "]"   音符マーカモードへ移行します。マーカ名は 1〜8 文字で、大文字と小文字は区別  されません。マーカに使用できる文字は以下の通りです。 0〜9 A〜Z(a〜z) _ "<" マーカ名 ">"   MIDI マーカモードへ移行します。マーカ名の条件は音符マーカのものと同様です。  音符マーカと MIDI マーカはそれぞれ独立に扱われるので、同じマーカ名でも区別さ  れます。 @ マクロ名   マクロ定義モードへ移行します。マクロ名の条件は音符マーカのものと同様です。  マーカとマクロはそれぞれ独立に扱われるので、マーカ名と同じマクロ名でも区別さ  れます。 ■各モード共通事項 《音符・和音》(Bモード、音符マーカモード共通)   単音の音符の場合は、A〜G の実際の音程を書きます。直後に + または # があると  半音上がり、- の場合は半音下がります。   和音の場合、複数の単音を並べて全体を括弧 ( ) で括ります。 "("[[オクターブ変更]…]単音[[[オクターブ変更]…]単音 …]")"  このとき、単音の前にオクターブ変更の指定ができます。   O オクターブ オクターブを設定します。範囲は -1〜9 です。   > オクターブを1つ上げます。最高は 9 です。   < オクターブを1つ下げます。最低は -1 です。   和音中でオクターブを変更しても、和音の外では元に戻ります。 (例) O4CDE (CEG> CE) GFE O4 |O5| O4 《音長》(全モード共通) {[長さ]|_ クロック}["." …][&{[長さ]|_ クロック}["." …]]…   4 分音符 = 48 クロックに固定なので、長さとして指定可能な値は以下の値のみで  す。 1 2 3 4 6 8 12 16 24 32 48 64 96 192   省略すると、L で設定した値になります。   また _ を用いてクロック数で指定することもできます。範囲は 1〜65535 です。   "." は付点の役割をします。複数個並べることができますが、1 クロック(192 分  音符)未満の端数が出るとエラーになります。   & の後に、さらに長さを追加することができます(タイ機能)が、合計は 65535 ク  ロックまでです。 ■Nモード   Nモードではマーカを並べて演奏データを作成します。このモードは他のモードと  異なり、音程や MIDI メッセージを扱う MML はありません。 《マーカ類》 {音符マーカ|MIDI マーカ}[音長]   マーカを設定し、音長だけ時刻を進めます。音符マーカの場合は [ ] で、MIDI マ  ーカの場合は < > で括ってマーカ名を書きます。   音長を省略すると、L で設定した値になります。 "("{音符マーカ|MIDI マーカ}[{音符マーカ|MIDI マーカ} …]")"[音長]   同時刻にマーカを複数設定したい場合には、複数のマーカを並べて全体を括弧 ( )  で括ります。   和音とは異なり、オクターブ変更指定はありません。   音長を省略すると、L で設定した値になります。 R[音長]   休符です。画面には何も表示されません。   音長を省略すると、L で設定した値になります。 《小節線》 | 【予告宣言】   小節線を書きます。 《テンポ》 T テンポ 【予告宣言】   曲のテンポを途中で変更します。単位は BPM で、範囲は 1〜255 です。   曲の最初のテンポを設定する場合は、トップレベルの \TEMPO コマンドが使用でき  ます。   テンポの変更はNモードでしかできません。 《音長設定》 L 長さ   音符・休符のデフォルト音長を設定します。長さとして指定可能な値は以下の値の  みです。 1 2 3 4 6 8 12 16 24 32 48 64 96 192   デフォルトは 4 になっています。 《チャンネル》 ={R|L}   チャンネルを設定します。途中で変更が可能です。R で右手用、L で左手用のチャ  ンネルです。   デフォルトは R になっています。 《終端》 ;   トップレベルに戻ります。 ■Bモード   Bモードでは BGM データを作成します。このモードで使用可能な音程は O-1C〜O9G  (ノートナンバ 0〜127)、使用可能なオクターブは -1〜9 です。 《音符・休符》 音符・和音[音長]   音符を MIDI 出力します。   音長を省略すると、L で設定した値になります。 R[音長]   休符です。   音長を省略すると、L で設定した値になります。 《オクターブ変更》 O オクターブ   オクターブを設定します。範囲は -1〜9 です。   デフォルトは 4 になっています。 >   オクターブを1つ上げます。最高は 9 です。 <   オクターブを1つ下げます。最低は -1 です。 《音長設定》 L 長さ   音符・休符のデフォルト音長を設定します。長さとして指定可能な値は以下の値の  みです。 1 2 3 4 6 8 12 16 24 32 48 64 96 192   デフォルトは 4 になっています。 Q 音長比   音符が実際に発音される長さの、音長に対しての比を設定します。範囲は 0〜128  で、発音音長 : 音長 = Q : 128 となります。端数は切り捨てられます。ただし 1 ク  ロック(192 分音符)未満となった場合は 1 クロックとなります。   デフォルトは 128 になっています。 《ヴェロシティ》 V ヴェロシティ   MIDI の発音時のヴェロシティを設定します。範囲は 0〜127 です。   デフォルトは 127 になっています。 《チャンネル》 = チャンネル   MIDI 出力をするチャンネルを設定します。範囲は 1〜16 です。   デフォルトは 1 になっています。 《音色》 @ プログラムナンバ[- バンク] 【予告宣言】   プログラムチェンジを出力します。範囲は、プログラムナンバは 1〜128、バンクは  0〜127 です。 《コントロールチェンジ》 Y コントローラナンバ "," バリュー 【予告宣言】   コントロールチェンジを出力します。範囲は、いずれも 0〜127 です。 《エクスクルーシブ》 X "(" データ["," データ]… ")" 【予告宣言】   システムエクスクルーシブメッセージを出力します。データの範囲は、いずれも  0〜127 です。0F0H および 0F7H は自動的に付加されます。 《ピッチベンド》 P バリュー 【予告宣言】   ピッチベンドチェンジを出力します。範囲は、-8192〜8191 です。 《プレッシャー》 J バリュー 【予告宣言】   チャンネルプレッシャーを出力します。範囲は、0〜127 です。 K[オクターブ変更]音程 "," バリュー 【予告宣言】   ポリフォニックキープレッシャーを出力します。バリューの範囲は、0〜127 です。   音程の前にオクターブ変更を含めることができます。範囲は、O-1C〜O9G です。 《直接出力》 Z "(" データ["," データ]… ")" 【予告宣言】   データをそのまま出力します。範囲は、いずれも 0〜255 です。 《終端》 ;   トップレベルに戻ります。 ■音符マーカモード   音符マーカモードではNモードで設定されたマーカの内容を定義します。このモー  ドは基本的には、 - 時間差[オクターブ変更]音程 : 発音データ ;  という形式になっています。   発音データの後に / があると、以下 ; までが無視されます。これは ver. 0.12 ま  でのソースもコンパイルできるようにするためです(/ の後は ver. 0.12 までは消音  データを書きましたが、ver. 0.20 では消音データはありません)。   以下でそれぞれの部分に分けて説明します。   (後述の「□発音データについて」も併せて参照ください) ○時間差   演奏データでは画面上の音符より前にその発音データが設定されている必要があり  ます。   音符よりどれだけ前の時刻に設定するかをここで指定します。0 あるいは音長で指  定できますが、省略することはできません。 ○音程   発音データを設定する音程を指定します。   音程の前にオクターブ変更を含めることができます。範囲は、O1C〜O6B です。 ○発音データ   鍵盤が打鍵されたときに再生されるシーケンスをここで定義します。   使用できるものはBモードのものと同じです。   O の値はデータを設定する音程と同じオクターブになっており、= L Q V の値はト  ップレベルでの ? による設定が持ち越されます。データの途中でこれらの値を変更し  ても、マーカ定義の外では元に戻ります。   このモードで使用可能な音程は O-1C〜O9G(ノートナンバ 0〜127)、オクターブは  -1〜9 です。 《音符・休符》 音符・和音[音長]   音符を MIDI 出力します。   音程の代わりに * を書くと、データを設定する音程の代用になります。   音長を省略すると、L で設定した値になります。 R[音長]   休符です。   音長を省略すると、L で設定した値になります。 《オクターブ変更》 O オクターブ   オクターブを設定します。範囲は -1〜9 です。 >   オクターブを1つ上げます。最高は 9 です。 <   オクターブを1つ下げます。最低は -1 です。 《音長設定》 L 長さ   音符・休符のデフォルト音長を設定します。長さとして指定可能な値は以下の値の  みです。 1 2 3 4 6 8 12 16 24 32 48 64 96 192 Q 音長比   音符が実際に発音される長さの、音長に対しての比を設定します。範囲は 0〜128  で、発音音長 : 音長 = Q : 128 となります。端数は切り捨てられます。ただし 1 ク  ロック(192 分音符)未満となった場合は 1 クロックとなります。 《ヴェロシティ》 V ヴェロシティ   MIDI の発音時のヴェロシティを設定します。範囲は 0〜127 です。 《チャンネル》 = チャンネル   MIDI 出力をするチャンネルを設定します。範囲は 1〜16 です。 《音色》 @ プログラムナンバ[- バンク] 【予告宣言】   プログラムチェンジを出力します。範囲は、プログラムナンバは 1〜128、バンクは  0〜127 です。 《コントロールチェンジ》 Y コントローラナンバ "," バリュー 【予告宣言】   コントロールチェンジを出力します。範囲は、いずれも 0〜127 です。 《エクスクルーシブ》 X "(" データ["," データ]… ")" 【予告宣言】   システムエクスクルーシブメッセージを出力します。データの範囲は、いずれも  0〜127 です。0F0H および 0F7H は自動的に付加されます。 《ピッチベンド》 P バリュー 【予告宣言】   ピッチベンドチェンジを出力します。範囲は、-8192〜8191 です。 《プレッシャー》 J バリュー 【予告宣言】   チャンネルプレッシャーを出力します。範囲は、0〜127 です。 K[オクターブ変更]音程 "," バリュー 【予告宣言】   ポリフォニックキープレッシャーを出力します。バリューの範囲は、0〜127 です。   音程の前にオクターブ変更を含めることができます。範囲は、O-1C〜O9G です。 《直接出力》 Z "(" データ["," データ]… ")" 【予告宣言】   データをそのまま出力します。範囲は、いずれも 0〜255 です。 ○省略形   音符マーカモードでは、 - 時間差[オクターブ変更]音程 : 発音データ ;  が基本形となりますが、ソースの記述を簡単にするためにいくつかの省略形を使用す  ることができます。 - 時間差[オクターブ変更]音程 ;   マーカを設定する音程と発音する音程(単音)が同じ場合。   音長は L で設定した値になります。 (例) -16O4C; → -1604C:C; と同じ - 時間差[オクターブ変更]音程 音長 ;   マーカを設定する音程と発音する音程(単音)が同じで、音長を指定する場合。 (例) -16O4C8; → -16O4C:C8; と同じ - 時間差[オクターブ変更]音程 / ;   ver. 0.12 までは強制消音でしたが、ver. 0.20 では単なるヌルデータとして扱わ  れます。このとき音符は表示されません。 (例) -0O4C/; → -0O4C:; と同じ ■MIDI マーカモード   MIDI マーカモードではNモードで設定されたマーカの内容を定義します。主に演奏  データの音色設定やコントロールチェンジを出力するために使用します。   音符マーカモードと異なり、時間差の指定がなく、データ本体に時間の概念がない  ので、データはマーカの置かれた時刻に同時に出力されます。   このモードでは音符・和音を出力することはできません。   また、< > L O Q R V は使用できません。   @ J K P X Y Z はこのモードでは予告宣言ではありません。必ず出力されます。   = O の値はトップレベルでの ? による設定が持ち越されます。データの途中でこれ  らの値を変更しても、マーカ定義の外では元に戻ります。   このモードで使用可能な音程(ただしキープレッシャー内でのみ可能)は O-1C〜O9G  (ノートナンバ 0〜127)、オクターブは -1〜9 です。 《チャンネル》 = チャンネル   MIDI 出力をするチャンネルを設定します。範囲は 1〜16 です。 《音色》 @ プログラムナンバ[- バンク]   プログラムチェンジを出力します。範囲は、プログラムナンバは 1〜128、バンクは  0〜127 です。 《コントロールチェンジ》 Y コントローラナンバ "," バリュー   コントロールチェンジを出力します。範囲は、いずれも 0〜127 です。 《エクスクルーシブ》 X "(" データ["," データ]… ")"   システムエクスクルーシブメッセージを出力します。データの範囲は、いずれも  0〜127 です。0F0H および 0F7H は自動的に付加されます。 《ピッチベンド》 P バリュー   ピッチベンドチェンジを出力します。範囲は、-8192〜8191 です。 《プレッシャー》 J バリュー   チャンネルプレッシャーを出力します。範囲は、0〜127 です。 K[オクターブ変更]音程 "," バリュー   ポリフォニックキープレッシャーを出力します。バリューの範囲は、0〜127 です。   音程の前にオクターブ変更を含めることができます。範囲は、O-1C〜O9G です。 《直接出力》 Z "(" データ["," データ]… ")"   データをそのまま出力します。範囲は、いずれも 0〜255 です。 ■マクロ定義モード   マクロをユーザ定義します。詳しくは「□マクロについて」を参照ください。 □マクロについて ■マクロ定義   マクロ名は 1〜8 文字で、大文字と小文字は区別されません。マクロに使用できる  文字は以下の通りです。 0〜9 A〜Z(a〜z) _   マクロ文字列中に¥コマンドを含めることはできません。また、内部でブランクは  取り除かれます。   以下の機能を使用可能です。 $0 〜 $9   マクロ中で使用するパラメータです。パラメータは $0〜$9 まで使用できます。た  だし $0 は特殊なもので、マクロが展開された時点でのチャンネル番号に展開されま  す。$0 を含むマクロを MIDI データ以外の箇所で展開した場合は正しくコンパイルさ  れない場合があります(特に、マクロ定義モードで使用することは避けてください。  マクロ定義モードでは定義済みマクロは一度展開されます)。   使用したパラメータの最大の番号がそのマクロのパラメータ数となります($3 なら  3 個)。 { 数式 }   数式は中括弧 { } で括って書きます。使用可能なものは以下の通りです。 数値 0〜65535 パラメータ $0〜$9 演算子 ( ) * / % + -   優先順位は以下の順です。 ( ) * / % + -   数式は内部表現に変換して定義されます。演算はマクロ展開時に 16bit で行われ、  結果の下位 8bit が数字列に展開されます。 ! 定義済みマクロ名["(" パラメータ["," パラメータ …]")"]   後述の「マクロ使用」と同様にマクロを展開します。定義済みマクロを含むマクロ  定義では「一度展開されてから定義される」ことに注意してください。   パラメータは実際の数値のみで、(定義済みマクロの外でのパラメータ)$0〜$9、  および数式を使用することはできません。 ■マクロ使用 ! マクロ名["(" パラメータ["," パラメータ …]")"]   定義したマクロは¥コマンド以外の箇所ならどこでも展開することが可能です(コ  メント中でも展開は可能ですが、定義時に改行が削除されているので実際には意味は  ありません)。   パラメータは括弧 ( ) で括ります。先頭が $1 になります。パラメータがない(あ  るいは $0 のみの)場合は ( ) 全体を省略します。パラメータに使用できるものは 0  〜65535 の数値のみで、途中を省略することはできません。定義時と展開時のパラメ  ータ数が一致しない場合はエラーになります。   マーカとは異なり、マクロは PHASE0 で展開されるので、使用するマクロはソース  のそれよりも前の位置で定義されていなければなりません。 ■内部定義マクロ   以下のマクロは鍵竜コンパイラ内部で定義済みです。 マクロ 定義内容 説明 !VOL (vv) Y7,$1 ボリューム !EXP (vv) Y11,$1 エクスプレッション !PAN (vv) Y10,{$1+64} パンポット (-64〜0〜63) !RVB (vv) Y91,$1 リバーブ !CHR (vv) Y93,$1 コーラス !DLY (vv) Y94,$1 ディレイ !MOD (vv) Y1,$1 モジュレーション !PTM (vv) Y65,$1 ポルタメント (0-63:OFF/64-127:ON) !HLD (vv) Y64,$1 ホールド1 (0-63:OFF/64-127:ON) !STN (vv) Y66,$1 ソステヌート (0-63:OFF/64-127:ON) !SFT (vv) Y67,$1 ソフト (0-63:OFF/64-127:ON) !NRP (mm,ll) Y99,$1 Y98,$2 NRPN (mm:MSB/ll:LSB) !RPN (mm,ll) Y101,$1 Y100,$2 RPN (mm:MSB/ll:LSB) !DAT (mm,ll) Y6,$1 Y38,$2 データエントリ (mm:MSB/ll:LSB) !GMR X(126,127,9,1) GMシステム・オン !GSR X(65,16,66,18,64,0,127,0,65) GSリセット !88R (vv) X(65,16,66,18,0,0,127,$1,{1-$1}) SC-88 リセット (0:mode1/1:mode2) !MVO (mm,ll) X(127,127,4,1,$2,$1) マスタボリューム(mm:MSB/ll:LSB)   内部定義マクロは今後も増える予定ですが、全て 3 文字の予定です。マクロ名が 3  文字のマクロをユーザ定義することはなるべく避けてください。 □発音データについて   発音データとそれを設定する音程の両方を書くというのは煩雑なのですが、必ずし  も同一の音程にしなければならないという規定はありません。これが鍵竜のメリット  の1つです。すなわち、鍵竜で扱える「音符」は C1〜B6 までですが、この範囲の鍵  盤に対して発音データは C-1〜G9 まで使用可能なので、鍵盤で出せない音程も発音す  ることができます。また、データを設定する鍵盤の音域を狭くすることで、音域の狭  いキーボードでもさまざまな音程を演奏することができるのです。   他に、簡単には弾くことができないフレーズや和音をまとめて1つの発音データと  することにより、それを一度の打鍵で簡単に演奏することができます。更に、通常は  キーボードでは不可能なパート毎、音程毎のエフェクトも別個にかけることが可能で  す。   発音データに音程以外の情報、例えばコントロールチェンジなどを含めることがで  きますが、この場合にはその変更を元に戻すコントロールチェンジなどを、必ずデー  タの最後に書いてください。   途中からそのチャンネルの音色を変えたいというような場合に、プログラムチェン  ジを発音データ中に書くことはお薦めしません。その発音データは実際には「演奏さ  れない」ことがあるからです。このような場合は、MIDI マーカを使用してプログラム  チェンジを出力してください。MIDI マーカは打鍵にかかわらず必ず演奏されます(B  モードでのプログラムチェンジは、プレイヤ側で BGM をオフに設定した場合に出力さ  れなくなります)。   どのような弾き方をしても(その時にのみ変な音が出ても)、以降に変な設定を残  さない、ということが特に重要です。あらゆる事態に対応するのは無理があるとは思  いますが、違った鍵盤を弾いてしまった、または弾き忘れたといったミスタッチには  対応していたほうがいいです。最低限、プレイヤの /A オプションによる自動演奏で  は正しく演奏されることを確認してください。 □エラー   鍵竜コンパイル時にエラーが発生すると、画面にエラーメッセージが表示され、コ  ンパイルを中止します。   各エラーメッセージとその内容を以下に示します。 ■ソ−ス解析時(PHASE0)のエラー ERROR: エラーメッセージ in LINE xx : エラー発生時に読んでいた行の内容   マクロ展開中にエラーが発生した場合にはマクロ名も表示されます。 ERROR: エラーメッセージ in MACRO : [xxxxxxxx] in LINE xx : エラー発生時に読んでいた行の内容(マクロの内容ではありません)   行番号は先頭が0行目で、KID や AKID と同一です。   エラーの種類によっては、必ずしも表示された行の中にエラー箇所があるとは限ら  ないので注意してください。 \END not found   ソース中に \END が見つかりません。   ソースの途中に EOF がある場合にも発生します。 Channel error Channel pressure error Control change error Direct message error Exclusive message error Key pressure error Length error Note error Octave error Part error Pitch bend error Program change error Quantity error Tempo error Velocity error   それぞれ、チャンネル、チャンネルプレッシャー、コントロールチェンジ、直接出  力メッセージ、システムエクスクルーシブメッセージ、ポリフォニックキープレッシ  ャー、音長、音程、オクターブ、パート、ピッチベンドチェンジ、プログラムチェン  ジ、音長比、テンポ、ヴェロシティの指定が適切でありません。 Command error   ¥コマンド名が間違っています。 Formula error   数式が適切でありません。 Formula too complex   数式が複雑すぎます。 LARGE QUEUE full   LARGE QUEUE が一杯になりました。 Level error   難易度の指定が正しくありません。 MACRO duplicate : [xxxxxxxx]   同一名のマクロを2重に定義しています。内部定義済みのマクロをユーザ定義した  場合も同様です。   xxxxxxxx にはマクロ名が入ります。 MACRO name error   マクロの名前に不正な文字が使用されています。 MACRO not found : [xxxxxxxx]   使用するマクロは未定義です。マーカとは異なり、マクロは PHASE0 で展開される  ので、使用するマクロはソースのそれよりも前の位置で定義されていなければなりま  せん。   xxxxxxxx にはマクロ名が入ります。 MACRO string error   マクロ定義中に不正な文字が含まれています。 MACRO variable error   マクロ定義時・使用時のパラメータが適切でありません。 MARKER duplicate : [xxxxxxxx]   同一名のマーカを2重に定義しています。   xxxxxxxx にはマーカ名が入ります。 MARKER name error   マーカの名前に不正な文字が使用されています。 Overflow   数値の絶対値が大きすぎます。 Piece data too long   音符マーカデータ、MIDI マーカデータが大きすぎます。 String too long   文字列が長すぎます。 Syntax error   ソースに文法的な誤りがあります。   ; などは忘れやすいので注意してください。 TINY QUEUE full   TINY QUEUE が一杯になりました。 Title too long   タイトル、作者、ジャンルが長すぎます。 Too many MARKERS : [xxxxxxxx]   マーカが多すぎます。   マーカ数の制限は音符マーカ、MIDI マーカとも 8190 です(ヌルデータを除く)。   xxxxxxxx にはマーカ名が入ります。 ■Nトラック展開時(PHASE2)のエラー ERROR: エラーメッセージ at CLOCK 処理中の時刻 MARKER not found : [xxxxxxxx]   Nトラックに使用したマーカはソース中のどこにも定義されていません。   xxxxxxxx にはマーカ名が入ります。 MARKER time error : [xxxxxxxx]   マーカの展開されるべき時刻にエラーがあります。   xxxxxxxx にはマーカ名が入ります。   同一の音程に設定した音符マーカについて、Nトラック上のマーカの順番と、展開  後の(時間差を加算した)設定時刻の順番が逆転する場合、または設定時刻が負にな  る場合に発生します。   発音データの設定時刻が、それ以前の同一音程の「音符の位置より前か」では判定  していないのでご注意ください。 ■複数のフェーズで発生するエラー ERROR: エラーメッセージ in PHASE 処理中のフェーズ MEMORY shortage   コンパイル中にメモリが不足しました。 □内部的なこと   とくに必要がないなら、読み飛ばしてください。 ■使用メモリ   以下のように割り当てられています。 SOURCE ソースデータ 1セグメント以上 TARGET 出力データ 5セグメント以上 BUFFER 各トラック・パートの一時データ 1セグメント以上 MARKER 音符マーカ・MIDI マーカデータ 1セグメント以上 MACRO マクロデータ 1セグメント以上 TINY QUEUE 予告宣言データの保留用 TPA 約 256 バイト LARGE QUEUE マクロデータの保留用・その他 TPA 約 1792 バイト   可変長のものはセグメント中の領域が不足すると新たに別のセグメントを使用しま  すが、このときに使用できるセグメントがない場合にはエラーが出ます。固定長のも  のはその領域を使い切ってしまうとエラーが出ます。いずれの場合にもコンパイルは  中止されます。   マッパ RAM が複数ある場合、その内の最も多く「連続した番号で空いているセグメ  ント」のあるスロットのメモリを使用します。鍵竜コンパイラの起動時に、 xx SEGMENTS available  というように、そのスロットで使用できるセグメント数が表示されます。 ■フェーズ   鍵竜コンパイラの実行フェーズを簡単に説明します。 PHASE0 ソース解析・パートデータ生成・Pトラック生成   ソースを解析し、同時にパートごとのデータを BUFFER に生成します。   マーカデータの本体はPトラックとして TARGET に生成し、インデクス情報などは  MARKER に生成します。   マクロデータは MACRO に保存し、必要に応じて展開します。 PHASE1 トラックマージ・Mトラック生成   \SYNC、および \END によりこのフェーズになります。   BUFFER のデータを時刻ごとにマージしてN、Bトラックのデータを TARGET に生成  します(BトラックのデータはそのままMトラック用出力データとなります)。   BUFFER をクリアして PHASE0 に戻ります(\END からの場合は PHASE2 に移行しま  す)。 PHASE2 Nトラック展開・Sトラック生成   Nトラックのマーカを展開します。Sトラック用出力データはここで生成します。  Pトラック用のデータは、Nトラックのマーカの設定時刻と時間差から実際の音符マ  ーカ、MIDI マーカの設定時刻を算出し、この設定時刻順にマーカを並べて BUFFER に  生成します。 PHASE3 Aトラック生成   PHASE2 が完了すると、最終フェーズに移ります。   BUFFER のマーカの並びを展開し、マーカの設定情報をAトラックに生成します。 _______________     / .KVX Format (for ver. 0.20) \ +―■―■―+――――――――――――――――――+―■―■―+ | ■ ■ |     Keyvern ver. 0.20     | ■ ■ | | ■ ■ | Copyright (c) 1999-2000 MIJINKO  | ■ ■ | | | | |    All Rights Reserved.    | | | | +―+―+―+――――――――――――――――――+―+―+―+