[ Jpn | Eng ]

Main Menu



Search

サイト内検索:

Archive

Powered by
MTOS 5.04

g200kg > DTM技術情報 > 5.SMFフォーマット

DTM技術情報

2011/09/17

5.SMFフォーマット

Prev < | 0.目次 | 1.MIDIメッセージ一覧 | 2.MIDIコントロールチェンジ一覧 | 3.MIDIユニバーサルシステムエクスクルーシブ | 4.GM Level1 音色マップ | 5.SMFフォーマット | 6.MIDIノートと周波数の関係 | 7.dB(デシベル)と倍率の関係 | 8.V(ボルト) / dBu / dBV の関係 | > Next


SMF (Standard MIDI File)の構造。SMFファイルにはフォーマット0~2までがある。それぞれの違いは下表の通り。

フォーマット説明
01トラックに全てのイベントをまとめたもの。再生専用向き
1マルチトラックでデータを保持。通常はMIDIチャンネル毎にトラックを分ける
21ファイルに複数曲を格納。ほとんど使われない

ファイル構造。ヘッダーチャンクの後に複数のトラックチャンクが続く。数値は全てビッグエンディアンで扱われる。トラックチャンクではChunkIDとChunkSizeの後、デルタタイムとイベントの組が複数格納される。

フィールド名長さ説明







ChunkID0x4d5468644バイト固定文字列 "MThd"
ChunkSize0x000000064バイトここ以降のヘッダーチャンクの長さ。"6"に固定されている
FormatType0x00012バイトフォーマット: 0 / 1 / 2 のどれか
Number
ofTrack
0x00022バイトトラック数:フォーマット0ならば1、それ以外のフォーマットでは任意のトラックチャンクの数(0-65535)
TimeDivision0x01e02バイトタイムベース:最上位ビットが0の場合テンポベース、1の場合絶対時間ベースとなる。
最上位ビットが0の場合:四分音符の分解能。この例では"480"。最上位ビットが1の場合、残り15ビットの内、上位7ビットがFramesPerSec(24 / 25 / 29 (30fpsDrop) / 30のどれか)、下位8ビットがTicksPerFrameを表す。
※ほとんどの場合はテンポベースで扱われる。








1
ChunkID0x4d54726b4バイト固定文字列 "MTrk"
ChunkSize0x000000ff4バイトここ以降のトラックチャンク1の長さ
DeltaTime0x83 0x601~4バイトデルタタイム:直前のイベントからの相対時間
Event0x90 0x40 0x40内容に依存MIDIイベント / SysExイベント / メタイベント
DeltaTime0x001~4バイトデルタタイム:直前のイベントからの相対時間
Event0x90 0x43 0x40内容に依存MIDIイベント / SysExイベント / メタイベント
 ・
 ・
 ・








2
ChunkID0x4d54726b4バイト固定文字列 "MTrk"
 ・
 ・
 ・

デルタタイムは1~4バイトの可変長で表す。最上位ビットを継続ビットとして、これが立っている場合、最大4バイトまで次のバイトに続け、各バイトの下位7ビットを連結して値とする。

デルタタイムの例
0x000x00
0x7f0x7f
0x81 0x000x80
0xff 0x7f0x3fff
0x81 0x80 0x000x4000
0xff 0xff 0x7f0x1fffff
0x81 0x80 0x80 0x000x200000
0xff 0xff 0xff 0x7f0xfffffff

MIDIイベントは通常のMIDIメッセージを使用する。例えば「ノートオン」ならば

0x90 (ノートオン:チャンネル1)0x3c (ノート番号)0x40 (ベロシティ)

のようになる。ランニングステータスを使ってもよい。

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で指定された長さ)

F0型はデータ本体の先頭にF0を加えたデータを送り出すが、F7型は純粋にデータ本体だけを送り出す。このため、F7型はSysEx以外のリアルタイムバイトの送信にも使用できる。

メタイベント

メタイベントはMIDIに送出しない追加情報などを記録する。0xffで始まり、1バイトのタイプ、可変長のデータ長、データ本体からなる。

タイプデータ本体の長さ(可変長1~4バイト)データ本体
0xff00x02シーケンスナンバー
0xff1文字列長テキストイベント。コメントなど。ASCII文字列
0xff2文字列長著作権表示。ASCII文字列
0xff3文字列長シーケンス名。トラック名
0xff4文字列長楽器名
0xff5文字列長歌詞
0xff6文字列長マーカー
0xff7文字列長キューポイント
0xff0x200x01MIDIチャンネルプリフィックス。続くメタイベントにMIDIチャンネルを指定
0xff0x2f0x00トラックの最後を表す。データ本体は使用しない。
0xff0x510x03テンポ設定(3バイト)。四分音符あたりのマイクロ秒
0xff0x540x05SMPTEオフセット(5バイト)。 時(0-63):分(0-59):秒(0-59):フレーム(0-29):サブフレーム(0-99)、ただし時は0rrhhhhhでrr:00⇒24fps、rr:01⇒25fps、rr:10⇒30fpsDrop、rr:11⇒30fpsNonDrop
0xff0x580x04拍子(4バイト)。分子、分母(2を底とする対数)、メトロノーム間隔(四分音符/24)、24MIDIクロック中の32分音符の数(通常8)
0xff0x590x02曲のキー(2バイト)。-7~+7 (マイナスは♭、プラスは♯の数)、0⇒メジャー:1⇒マイナー
0xff0x7fデータ長シーケンサー固有データ

Prev < | 0.目次 | 1.MIDIメッセージ一覧 | 2.MIDIコントロールチェンジ一覧 | 3.MIDIユニバーサルシステムエクスクルーシブ | 4.GM Level1 音色マップ | 5.SMFフォーマット | 6.MIDIノートと周波数の関係 | 7.dB(デシベル)と倍率の関係 | 8.V(ボルト) / dBu / dBV の関係 | > Next


g200kg