MIDIファイル(SMF)の基礎知識

このページでは、トラック及びチャンネルを 0から数えている。 1から数えることもあるので、その点注意。

用語

■トラックとチャンネル  ・トラック   MIDIファイル上の論理的な区分、単位。例えるなら譜面。          トラック数は最大 65535個。  ・チャンネル  音源の(仮想的な)区分、単位。例えるなら楽器。          チャンネルは 0〜F の16個。チャンネル 9は打楽器に割り当てられる。  トラックとチャンネルの関係は、SMF0とSMF1の場合とで異なる。 ■SMF0とSMF1 MIDIファイル(SMF)には、SMF0, SMF1, SMF2の3種類がある。SMF2はほとんど使用されていないのでここでは無視。  ・SMF0    トラック数は1つ。全てのイベントをチャンネルに依らず、1つのトラックに格納する。    さっきの例えで言うなら、全ての楽器の演奏情報が1つの譜面に入っている。  ・SMF1    トラック数は1つ以上。    最初のトラックはコンダクタトラックと呼ばれ、テンポなど曲全体の情報を格納する。MIDIイベント(後述)は入れない。    MIDIイベントはチャンネルごとにトラックを分けて格納する。多いのは、1トラック−1チャンネルというケース。    複数のトラックに、1つのチャンネルのMIDIイベントを分散して入れてもよい。    1つのトラックに、複数のチャンネルのMIDIイベントを入れるのはダメ。    さっきの例えで言うなら、楽器ごとに譜面を分けている。    1つの楽器に対し、譜面が複数あるのは可。    1つの譜面に、複数の楽器の情報を書くのはダメ。 トラックとチャンネルの関係の例 (あくまでも例) ■イベント  曲、演奏に関する情報はイベントという形で格納されている。  1つのイベントはステータスバイト(1byte)とデータバイト(1byte以上)から成る。  イベントは次の3種類があり、ステータスバイトの値により区別できる。  ・MIDIイベント ステータスバイト: 8n, 9n, An, Bn, Cn, Dn, En (nにはチャンネル番号が入る)    演奏を制御するためのイベント。    MIDI Dump Playerにおいて個別に色を割り当てているイベントについて、その機能を説明すると、     8n kk vv Note on ノート番号 kkの音をベロシティ vvで鳴らす     9n kk vv Note off ノート番号 kkの音を止める。8n で vv=0 としてもよい。     Bn cc vv Control Change ccの値によって機能はさまざま。例えば、                   cc=01 Modulation 変調の深さを vvに設定                   cc=0B Expression 音の大きさを vvに設定     En mm ll Pitch Bend ピッチを (llmm-0x2000)だけ変化させる  ・メタイベント ステータスバイト: FF    曲全体の演奏の制御(テンポ)やテキストデータを埋め込む(曲名、トラック名など)ためのイベント。    例)     FF 03 … 曲名/トラック名     FF 51 … テンポ     FF 2F 00 End of Track  ・システムエクスクルーシブイベント ステータスバイト: F0, F7    機種依存の情報を埋め込むためのイベント。 ■ランニングステータス   ステータスバイトが同一のMIDIイベントが連続する時、2つ目以降のMIDIイベントのステータスバイトを   省略できる。これをランニングステータスという。   ファイルサイズは小さくなるけど、曲の途中から再生する時処理が面倒になる。プログラマ泣かせ。

MIDIファイルの構造

SMF0 と SMF1のファイルの構造  1、ヘッダ   ・フォーマットが何か?(SMF0, 1, 2)   ・トラック数   ・タイムベース(四分音符の長さをいくつで表現するか:デルタタイムの基準)    が記録されている。通常14byte固定。  2、トラック(ヘッダで示された個数ある)    2.1 チャンク     データ部が何バイト続くか、記録されている。8byte固定。    2.2 データ部     デルタタイムとイベントが交互に並ぶ。     デルタタイムイベントデルタタイムイベント … デルタタイムイベント     「前のイベントからデルタタイムだけ待って、イベントを実行しろ」という意味。     デルタタイムはSMFファイル上では、値によってバイト数が異なる可変長形式で記録されている。  参考   ・MIDI Dump Playerでは、Setting - Viewer - Underline の設定によってデルタタイムに下線を付けることができる。   ・MIDI Dump Playerでは、「デルタタイムイベント」を1つのペアとみなしている。    このためダンプリスト中のデルタタイムの色は、直後のイベントの色と同じにしている。

戻る