7.3. SMCファイルの構造


[表紙に戻る] [<<<<<] [>>>>>] [ひとつ上へ]


SMCの入力となるMMLを記述したファイルを以降「SMCファイル」または単に「ファイル」と書きます。

SMCファイルの書式に関してはリファレンスマニュアルに譲るとして、ここでは筆者が採用しているフォーマットを紹介します。

筆者のフォーマットはどのファイルも概ね以下のようになっています。

インクルード文は必要に応じて記述するものですが、“SMFSTD.SMI”はまず必要でしょう。その上で、GMフォーマットで記述するなら“SMF_GM.SMI”を、ローランドGSを利用するなら、“ROL_GS.SMI”をインクルードします。ローランドのSCシリーズを利用する場合でしたら、この3つをインクルードしておけばまず問題は生じません。“YUU.SMI”は、筆者が個人的に定義したマクロ命令集で、今回のファイルでも多いに活用されています。

タイトルデータのうち、曲名(“#MUSIC-NAME”)、ターゲットとしている楽器名(“#INSTRUMENT”)は必ず記述する習慣をつけた方がよいと思われます。あとは、誰がデータ入力を行なったのかを“#PROGRAMMER”で明記しておくのもマナーであると筆者は考えています。

テンポ設定は2種類の記述方法があり、いずれも4分音符が基準となります。分解能の設定(“#DIVISION”)は、曲の内容や好みに応じて適宜設定できます。普通は48にしておけば問題ないですが、それでは足りない場合や、MIDファイルにした後にステップエディタで編集する場合には、それらの環境や作業内容も考慮した上で決める必要があります。ただし、あまり大きくしすぎると送信側のマシンの負担が増大します。

SPBは主に、フェードコントロールを行なったり、ポルタメントを記述するのに利用します。また、規則的なパラメータ変化(オートパンニングなど)や、トーンのエンベロープを記述するのにも利用できます。

グローバル初期化は、ターゲット楽器を初期化するための記述です。多くの楽器は、初期化のためのMIDIメッセージを受信すると、その後ほんのわずかの間だけMIDIメッセージの受信がおこなえない期間があります。ですから初期化コマンドのあとには休符をいれるようにします。詳しい内容は各楽器のマニュアルを参照して下さい。リセット・オール・コントローラーズは「念のため」といった感があり、このメッセージによってどのコントローラがどのように初期化されるのかは、これも楽器によって差があるので、マニュアルで確認するようにして下さい。なお、筆者はエフェクトの設定もここで行なっています。

グローバル初期化部以降、“@{REM:}”によるコメントが随所にありますが、これはMIDファイルにしてからステップエディタでエディットする際にわかりやすくするための措置で、そういった作業を必要としない場合には、注釈行として記述する方がテキストも見やすくなり、よいと思われます。

チャンネルアサインは、トラック番号と一致させるとわかりやすくてよいのですが、筆者の都合によりこのような設定となっています。

トラック毎の設定は、MIDIメッセージを生成するものとしないものとに分けて、MIDIメッセージを生成するコマンドの場合には休符を挿入することによって同じMIDIクロックで大量のデータが送信されるのを防ぐようにしています。それに対してMIDIメッセージを生成しないコマンドの場合は、そのような心配はいりません。ちなみに、内部パラメータ設定部で“@%1”を記述するまで、音長の単位はMIDIクロックが基準になっています(つまり4分休符は“r48”となるわけです)。

サブシーケンスデータとは、要するにサブルーチンみたいなものをいいます。SMCは、複数のトラックの記述を同一行で行なうことができないので、複数のトラックで共通のMMLを必要とする場合には、SMCの強力なマクロ機能を利用します。これは、入力の手間の軽減と、あとになって修正する場合の修正箇所を最小限に抑えるための工夫です。

以上でほとんどの設定が完了しますので、あとは演奏データをどんどん記述していけばよいわけです。筆者はここまでの内容を別ファイルに記録しておき、新たに曲をおこす時にはそのファイルを書きなおすことから始めます(いわゆるテンプレートです)。

最後の“@%1 r1 @{REM:"End of track"} @e”という記述には意味があります。まず、演奏終了後しばらくの間、何もしない期間を作っておくのが目的です。休符を挿入しておけば、リリースの具合を確認したりすることが可能となります。ただし、ただ休符を挿入するだけだと余分な休符とみなされて削除されてしまうため、“@{REM:}”でコメントを記述しておきます。もう一つは、MMLで曲データを作る場合は、ステップエディタとは異なり、曲の一部分を取り出して聞くのが困難です。ですから筆者は、トラック毎に最後まで打ち込まずに、曲のパート(曲の構成の意味でのパート)ごとにまとめて打ち込むようにしています。Aパートまで完成したら、テキストエディタのカット&ペースト機能を用いてAパートのMMLを“@%1 r1 @e”の後ろに移動します。すると、次にSMCを通した時には続きのBパートから演奏が始まるため、最初の部分を聞く手間が大幅に軽減されますし、コンパイル時間も短縮されます。時々、既に完成している部分をつなげてみて、パート間のバランス調整を行ないます。また、この方法ですと曲の別の部分で同じようなパートがあった場合には、該当パートをコピーするだけで全てのトラックのデータをコピーできるので、便利であると筆者は考えています。筆者のSMCファイルで同名のパートとしてコメントされている部分のMMLは全く同一です(つまり入力の手間を省くことができます)。

なお、マクロ名以外は大文字小文字は区別しません。


[表紙に戻る] [<<<<<] [>>>>>] [ひとつ上へ]