DTM技術情報
2011/09/17
5.SMFフォーマット
« Prev 0.目次 1.MIDIメッセージ一覧 2.MIDIコントロールチェンジ一覧 3.MIDIユニバーサルシステムエクスクルーシブ 4.GM Level1 音色マップ 5.SMFフォーマット 6.MIDIノートと周波数の関係 7.WAVファイルフォーマット 8.dB(デシベル)と倍率の関係 9.V(ボルト) / dBu / dBV の関係 Next »
フォーマット
SMF (Standard MIDI File)の構造。SMFファイルにはフォーマット0~2までがある。それぞれの違いは下表の通り。
フォーマット | 説明 |
---|---|
0 | 1トラックに全てのイベントをまとめたもの。再生専用向き |
1 | マルチトラックでデータを保持。通常はMIDIチャンネル毎にトラックを分ける。また先頭トラックはテンポ専用トラックとする事も多い。 |
2 | 1ファイルに複数曲、あるいは複数シーケンスパターンを格納。ほとんど使われない |
ファイル構造
ヘッダーチャンクの後に複数のトラックチャンクが続く。数値は全てビッグエンディアンで扱われる。トラックチャンクではChunkIDとChunkSizeの後、デルタタイムとイベントの組が複数格納される。
フィールド名 | 例 | 長さ | 説明 | |
---|---|---|---|---|
ヘ ッ ダ | チ ャ ン ク | ChunkID | 0x4d546864 | 4バイト | 固定文字列 "MThd" |
ChunkSize | 0x00000006 | 4バイト | ヘッダーチャンクの長さ(ChunkID/ChunkSizeは含まず)。"6"に固定されている | |
FormatType | 0x0001 | 2バイト | フォーマット: 0 / 1 / 2 のどれか | |
Number ofTrack | 0x0002 | 2バイト | トラック数:フォーマット0ならば1、それ以外のフォーマットでは任意のトラックチャンクの数(0-65535) | |
TimeDivision | 0x01e0 | 2バイト | タイムベース:
| |
ト ラ ッ ク チ ャ ン ク 1 | ChunkID | 0x4d54726b | 4バイト | 固定文字列 "MTrk" |
ChunkSize | 0x000000ff | 4バイト | トラックチャンク1の長さ(ChunkID/ChunkSizeは含まず) | |
DeltaTime | 0x83 0x60 | 1~4バイト | デルタタイム:直前のイベントからの相対時間 | |
Event | 0x90 0x40 0x40 | 内容に依存 | MIDIイベント / SysExイベント / メタイベント | |
DeltaTime | 0x00 | 1~4バイト | デルタタイム:直前のイベントからの相対時間 | |
Event | 0x90 0x43 0x40 | 内容に依存 | MIDIイベント / SysExイベント / メタイベント | |
・ ・ ・ | ||||
DeltaTime | 0x00 | 1~4バイト | デルタタイム:直前のイベントからの相対時間 | |
Event | 0xff 0x2f 0x00 | 3バイト | トラックの最後は必ず[End of Track] メタイベント。省略不可。 | |
ト ラ ッ ク チ ャ ン ク 2 | ChunkID | 0x4d54726b | 4バイト | 固定文字列 "MTrk" |
・ ・ ・ | ||||
Event | 0xff 0x2f 0x00 | 3バイト | トラックの最後は必ず[End of Track] メタイベント。省略不可。 |
デルタタイム
デルタタイムは1~4バイトの可変長で表す。最上位ビットを継続ビットとして、これが立っている場合、最大4バイトまで次のバイトに続け、各バイトの下位7ビットを連結して値とする。
デルタタイムの例 | 値 |
0x00 | 0x00 |
0x7f | 0x7f |
0x81 0x00 | 0x80 |
0xff 0x7f | 0x3fff |
0x81 0x80 0x00 | 0x4000 |
0xff 0xff 0x7f | 0x1fffff |
0x81 0x80 0x80 0x00 | 0x200000 |
0xff 0xff 0xff 0x7f | 0xfffffff |
MIDIイベント
MIDIイベントは通常のMIDIメッセージを使用する。例えば「ノートオン」ならば
0x90 (ノートオン:チャンネル1) | 0x3c (ノート番号) | 0x40 (ベロシティ) |
のようになる。ランニングステータスを使ってもよい。
SysExイベント
SysExイベントはF0型とF7型の2タイプがある。データ長はデルタタイムと同じ可変長表現を使用する。通常の完結したSysExはF0型を使用し、イベントを分割する必要がある場合はF7型を併用する。
通常型
0xf0 | データ長(1~4バイト) | 先頭のF0を含まないF7で終わるSysExデータ本体(データ長で指定された長さ) |
分割型。SysExを分割してゆっくり送信するする必要がある場合、下の例の各行にデルタタイムをはさんだ形で分割する。
0xf0 | データ長1(1~4バイト) | 先頭のF0を含まないSysExデータ本体1/3(データ長1で指定された長さ) |
0xf7 | データ長2(1~4バイト) | SysExデータ本体2/3(データ長2で指定された長さ) |
0xf7 | データ長3(1~4バイト) | F7で終わるSysExデータ本体3/3(データ長3で指定された長さ) |
一部の古いMIDI機器などでは一度に大量のデータを送りつけると動作しないものがあり、その場合には分割型SysExを使用する必要がある。通常はF0型だけで問題ない。
F0型はデータ本体の先頭にF0を加えたデータを送り出すが、F7型は純粋にデータ本体だけを送り出す。このため、F7型はSysEx以外のリアルタイムバイトの送信にも使用できる。
メタイベント
メタイベントはMIDIに送出しない追加情報などを記録する。0xffで始まり、1バイトのタイプ、可変長のデータ長、データ本体からなる。
タイプ | データ本体の長さ(可変長1~4バイト) | データ本体 | |
0xff | 0 | 0x02 | [Sequence Number] シーケンスナンバー。フォーマット2での使用をメインに想定 |
0xff | 1 | 文字列長 | [Text Event] テキストイベント。汎用のコメント。後に目的が明確なものについては0xff 0x01~0xff 0x0f の範囲で割り当てられた。ASCII文字列 |
0xff | 2 | 文字列長 | [Copyright Notice] 著作権表示。ASCII文字列 |
0xff | 3 | 文字列長 | [Sequence/Track Name] シーケンス名。トラック名 |
0xff | 4 | 文字列長 | [Instrument Name] 楽器名 |
0xff | 5 | 文字列長 | [Lyric] 歌詞 |
0xff | 6 | 文字列長 | [Marker] マーカー。例えば「Aメロ」、「間奏」などのような情報 |
0xff | 7 | 文字列長 | [Cue Point] キューポイント。映像との同期などで使用するコメント |
0xff | 0x08~0x0f | 文字列長 | 各種文字情報用にリザーブ |
0xff | 0x20 | 0x01 | [Channel Prefix] MIDIチャンネルプリフィックス。続くSysEx / メタイベントにMIDIチャンネルを指定 |
0xff | 0x21 | 0x01 | [Port Prefix] MIDIポートプリフィックス。続くSysEx / メタイベントにMIDIポートを指定 |
0xff | 0x2f | 0x00 | [End of Track] トラックの最後を表す。データ本体は使用しない。このメタイベントは各トラックに必ず必要。 |
0xff | 0x51 | 0x03 | [Set Tempo] テンポ設定(3バイト)。四分音符あたりのマイクロ秒 |
0xff | 0x54 | 0x05 | [SMPTE Offset] SMPTEオフセット(5バイト)。 時(0-63):分(0-59):秒(0-59):フレーム(0-29):サブフレーム(0-99)、ただし時は0rrhhhhhでrr:00⇒24fps、rr:01⇒25fps、rr:10⇒30fpsDrop、rr:11⇒30fpsNonDrop |
0xff | 0x58 | 0x04 | [Time Signature] 拍子(4バイト)。分子、分母(2を底とする対数)、メトロノーム間隔(四分音符/24)、24MIDIクロック中の32分音符の数(通常8) |
0xff | 0x59 | 0x02 | [Key Signature] 曲のキー(2バイト)。-7~+7 (マイナスは♭、プラスは♯の数)、0⇒メジャー:1⇒マイナー |
0xff | 0x7f | データ長 | [Sequencer-Specific Meta-Event] シーケンサー固有データ |
« Prev 0.目次 1.MIDIメッセージ一覧 2.MIDIコントロールチェンジ一覧 3.MIDIユニバーサルシステムエクスクルーシブ 4.GM Level1 音色マップ 5.SMFフォーマット 6.MIDIノートと周波数の関係 7.WAVファイルフォーマット 8.dB(デシベル)と倍率の関係 9.V(ボルト) / dBu / dBV の関係 Next »
g200kg