inserted by FC2 system MIDI(SMF)の作り方

MIDIは、0から255までの整数値(10進法)で表現されるバイナリデータ(16進法)ファイルである。
MIDIを作るためには、バイナリファイルを開いて、バイト型の0から255までの整数値(10進法)を入力し、バイナリデータ(16進法)として保存していけばよい。ファイル名にはMIDIの拡張子をつければよい。

 MIDIはデータ数を正確に数えないと動作しない。
 出した音は必ず止めなければならない。音が鳴りっぱなしになる。

カエルの歌のMIDI解説
16進法10進法解説
4D77「MThd」という4文字のアスキーコード (ヘッダ部の開始)、midiファイルの宣言
5484
68104
64100
000ヘッダチャンクのデータの長さは6バイト(2+2+2)
000
000
66
000formatが0、通常0か1
000
000トラックの数が1
11
11タイムベース(4分音符あたりの分解能)16進で1E0だから、480。ここでヘッダはおしまい。
E0224
4D77「MTrk」という4文字のアスキーコード(トラック部の開始部の宣言)
5484
72114
6B107
000このトラックに入っているデータの長さ。この4文字の次の文字から数えてトラックの終わりまで何文字あるかということ。16進で10Dだから、269文字。これが一致しないとmidiは鳴らない。
000
11
0D13
000ここから3文字の「00 C0 XX」はチャンネルと楽器の指定. 「C」の後の数字は0からFまでの16チャンネルのいずれかを意味する。XXは0から127までの楽器コード。
C0192
000
8F143可変長数値表現のデルタタイム。16進で780、つまり1920ということは、480かける4だから、1小節分待っている。
000
90144この3つの数字は、前からノートオンコマンド(90+x:xは0から15までのチャンネル番号)、高さ、音量。
3C60
4064
83131デルタタイム。16進で1E0だから、480。4分音符分の長さ。
6096
80128この3つの数字は、前からノートオフコマンド、高さ、音量。
3C60
000
000これもデルタタイム。零しか待たない。簡単のためにこうしています。
90144ノートオン
3E62音程
4064音量
83131デルタタイム1
6096デルタタイム2
80128ノートオフ
3E62音程
000音量
000デルタタイム
90144ノートオン
4064音程
4064音量
83131デルタタイム1
6096デルタタイム2
80128ノートオフ
4064音程
000音量
000デルタタイム
90144ノートオン
4165音程
4064音量
83131デルタタイム1
6096デルタタイム2
80128ノートオフ
4165音程
000音量
000デルタタイム
90144ノートオン
4064音程
4064音量
83131デルタタイム1
6096デルタタイム2
80128ノートオフ
4064音程
000音量
000デルタタイム
90144ノートオン
3E62音程
4064音量
83131デルタタイム1
6096デルタタイム2
80128ノートオフ
3E62音程
000音量
000デルタタイム
90144ノートオン
3C60音程
4064音量
87135デルタタイム1
4064デルタタイム2
80128ノートオフ
3C60音程
000音量
000デルタタイム
90144ノートオン
4064音程
4064音量
83131デルタタイム1
6096デルタタイム2
80128ノートオフ
4064音程
000音量
000デルタタイム
90144ノートオン
4165音程
4064音量
83131デルタタイム1
6096デルタタイム2
80128ノートオフ
4165音程
000音量
000デルタタイム
90144ノートオン
4367音程
4064音量
83131デルタタイム1
6096デルタタイム2
80128ノートオフ
4367音程
000音量
000デルタタイム
90144ノートオン
4569音程
4064音量
83131デルタタイム1
6096デルタタイム2
80128ノートオフ
4569音程
000音量
000デルタタイム
90144ノートオン
4367音程
4064音量
83131デルタタイム1
6096デルタタイム2
80128ノートオフ
4367音程
000音量
000デルタタイム
90144ノートオン
4165音程
4064音量
83131デルタタイム1
6096デルタタイム2
80128ノートオフ
4165音程
000音量
000デルタタイム
90144ノートオン
4064音程
4064音量
87135デルタタイム1
4064デルタタイム2
80128ノートオフ
4064音程
000音量
000デルタタイム
90144ノートオン
3C60音程
4064音量
87135デルタタイム1
4064デルタタイム2
80128ノートオフ
3C60音程
000音量
000デルタタイム
90144ノートオン
3C60音程
4064音量
87135デルタタイム1
4064デルタタイム2
80128ノートオフ
3C60音程
000音量
000デルタタイム
90144ノートオン
3C60音程
4064音量
87135デルタタイム1
4064デルタタイム2
80128ノートオフ
3C60音程
000音量
000デルタタイム
90144ノートオン
3C60音程
4064音量
87135デルタタイム1
4064デルタタイム2
80128ノートオフ
3C60音程
000音量
000デルタタイム
90144ノートオン
3C60音程
4064音量
81129デルタタイム1
70112デルタタイム2
80128ノートオフ
3C60音程
000音量
000デルタタイム
90144ノートオン
3C60音程
4064音量
81129デルタタイム1
70112デルタタイム2
80128ノートオフ
3C60音程
000音量
000デルタタイム
90144ノートオン
3E62音程
4064音量
81129デルタタイム1
70112デルタタイム2
80128ノートオフ
3E62音程
000音量
000デルタタイム
90144ノートオン
3E62音程
4064音量
81129デルタタイム1
70112デルタタイム2
80128ノートオフ
3E62音程
000音量
000デルタタイム
90144ノートオン
4064音程
4064音量
81129デルタタイム1
70112デルタタイム2
80128ノートオフ
4064音程
000音量
000デルタタイム
90144ノートオン
4064音程
4064音量
81129デルタタイム1
70112デルタタイム2
80128ノートオフ
4064音程
000音量
000デルタタイム
90144ノートオン
4165音程
4064音量
81129デルタタイム1
70112デルタタイム2
80128ノートオフ
4165音程
000音量
000デルタタイム
90144ノートオン
4165音程
4064音量
81129デルタタイム1
70112デルタタイム2
80128ノートオフ
4165音程
000音量
000デルタタイム
90144ノートオン
4064音程
4064音量
83131デルタタイム1
6096デルタタイム2
80128ノートオフ
4064音程
000音量
000デルタタイム
90144ノートオン
3E62音程
4064音量
83131デルタタイム1
6096デルタタイム2
80128ノートオフ
3E62音程
000音量
000デルタタイム
90144ノートオン
3C60音程
4064音量
87135デルタタイム1
4064デルタタイム2
80128ノートオフ
3C60音程
000音量
000デルタタイム
FF255End of Track。それで、曲が全部終わったら1つのトラック部の終了を宣言。
2F47
000

(エクセルVBAでのプログラム例)
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 'Worksheetをダブルクリックしてプログラムを起動
Dim nn As Byte 'nnはバイト型(10進数で表記し16進数扱い)の数値と定義
Open ThisWorkbook.Path & "\test.mid" For Binary As #1 'このブックと同じホルダーにtest.midを新規に作成せよ
m = 1 '1行目から開始する
Do Until Me.Cells(m, 2) = "" '2列目のセルが空白になるまで繰り返せ。空白ならば直ちにLoopから抜けよ
nn = Me.Cells(m, 2) 'バイト型のnnには2列目m行目のセルの10進法の値を代入せよ
Put #1, , nn '#1であるtest.midにnnを書き込め
m = m + 1 'm+1行目にすすめ
Loop 'Doの個所に戻って繰り返せ
Close #1 '#1であるtest.midを閉じろ
End Sub 'プログラムの終了

 上記のような骨格のプログラムでmidiファイルであるtest.mid が作成される。文法的に正しく記述されているならMIDI再生ソフトで音楽が再生される。
 エクセルに上記表2行目から最後までを貼りつけ、上記プログラムを貼りつけエクセルを保存し、シートをダブルクリックすれば、エクセルと同じ場所にカエルの歌のtest.mid が作成される。

Stirlingなどのバイナリエディタを用いて16進法表記から実際のバイト型に変換する方法もある。

(以下Wikipediaから転載)
https://ja.wikipedia.org/wiki/%E3%82%B9%E3%82%BF%E3%83%B3%E3%83%80%E3%83%BC%E3%83%89MIDI%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB
ヘッダチャンク
SMFはチャンクと呼ばれるデータブロックから構成され、ファイルの先頭にあるチャンク(ヘッダチャンク)には
ヘッダチャンクであることを示す"MThd"という4文字のアスキーコード 「4D 54 68 64」(4バイト)
ヘッダチャンクのデータ長 「00 00 00 06」(4バイト)
フォーマット「00 01」(フォーマットタイプが通常0か1、トラック数が複数の場合にはフォーマットタイプは1が良い) (2バイト)
トラック数 「00 01」(トラック数が1個の場合)(2バイト)
時間単位 「01 E0」(タイムベース(4分音符あたりの分解能)が、例えば16進で1E0で、10進法で480の値。)(2バイト)
がこの順序で、ビッグエンディアン形式で格納されている。データ長はそれ以降のヘッダチャンクの長さを示すもので、拡張用に用意されている。 (カッコの中はそれぞれのデータ長を8bit-byte数で示す)

フォーマット(以下Wikipediaから転載)
フォーマット
SMFファイルはチャンク構造の違いで3つのフォーマットに分類される。 ヘッダチャンクとトラックチャンク(複数可)で構成されるフォーマット0、複数トラックを持つフォーマット1、 マルチシーケンスでシーケンスパターンを指定するフォーマット2の3種類である。
複数トラックを使用する場合には、フォーマット0かフォーマット1を指定し、使用するトラック数を記載する。フォーマット2は、現在ほとんど使われていない。

文字列情報
文字列情報は、16進法で記述されたアスキーコードで、次表の形式で記述できるが、すべて省略しても演奏には差し支えない。
SMFファイルはチャンク構造の違いで3つのフォーマットに分類される。 ヘッダチャンクとトラックチャンク(複数可)で構成されるフォーマット0、複数トラックを持つフォーマット1、 マルチシーケンスでシーケンスパターンを指定するフォーマット2の3種類である。
複数トラックを使用する場合には、フォーマット0かフォーマット1を指定し、使用するトラック数を記載する。フォーマット2は、現在ほとんど使われていない。

文字列情報
文字列情報は、16進法で記述されたアスキーコードで、次表の形式で記述できるが、すべて省略しても演奏には差し支えない。
表示項目コード文字列データ数内容
テキストFF 01n任意のテキスト(文字列)をSMF内に記載するために使う。
著作権表示FF 02n著作権表示用のテキスト文字列。トラックチャンクの先頭イベント(タイム0)とする。
シーケンス名/トラック名FF 03nシーケンス/トラック名を記述するテキスト文字列。シーケンス名はフォーマット0のトラック内か、 フォーマット1の最初のトラック内に記載する。その他の場合は、トラック名として扱う。
楽器名FF 04n各チャンネルに対応する楽器名を記述する。
歌詞FF 05n歌詞を記述する場合に使用するテキスト文字列。
マーカFF 06nフォーマット0/1の最初のトラックで使用し、シーケンス内のポイント名を記述するテキスト文字列。
キューポイントFF 07nビデオなどに対して指示を出すときに使う。テキスト文字列。

トラックチャンク
続くトラックチャンクに実際の演奏データが格納される。それぞれのチャンクにはトラックチャンクであることを示す識別子"MTrk" 「4D 54 72 6B」(4バイト)
データ長(このトラックに入っているデータセクションのデータの長さ(16進法データの個数)。) (4バイト)
データセクション(可変長)が格納される。データセクションの長さはデータ長で示される。データ長を数え誤って入力するなどデータ構成の整合性を欠くと標準MIDIファイルは演奏されない。
トラックの終了には「FF 2F 00」を宣言する。
トラックは一塊となる。複数トラックで重ねて演奏するには、トラックの一塊を追加するとともにヘッダーチャンク部のトラック数を増やしていけばよい。
トラックのチャンネルは0からFまでのチャンネルを使用できる。
トラックのチャンネル数を0から順次変更する。具体的には、音色の「C0」、最初の音出しの「90」のチャンネルに相当する部分の0のチャンネル数を0から順次変更する。同じチャンネルのトラックチャンクが複数存在しても良い。

https://ja.wikipedia.org/wiki/General_MIDI
データセクション
音色の指定
音色は、「00 C0 XX」によって指定する。00はデルタタイムを意味する。「C」の後の数字は0からFまでの16チャンネルのいずれかを意味する。XXには、0から127を意味する「00」から「7F」までの128種類の値が入る。何も音色を指定しなければ、「00」としてピアノの音色で演奏される。音色の一覧は以下を参照のこと。
楽器は次の128種類が用意されている。プログラム・チェンジの後に数値で指定する。
楽器一覧
16進法10進法英名和名
00Acoustic Piano アコースティックピアノ
11Bright Piano ブライトピアノ
22Electric Grand Piano エレクトリックグランドピアノ
33Honky-tonk Piano ホンキートンクピアノ
44Electric Piano エレクトリックピアノ
55Electric Piano 2 エレクトリックピアノ2
66Harpsichord ハープシコード
77Clavi クラビネット
88Celesta チェレスタ
99Glockenspiel グロッケンシュピール
0A10Musical box オルゴール
0B11Vibraphone ヴィブラフォン
0C12Marimba マリンバ
0D13Xylophone シロフォン
0E14Tubular Bell チューブラーベル
0F15Dulcimer ダルシマー
1016Drawbar Organ ドローバーオルガン
1117Percussive Organ パーカッシブオルガン
1218Rock Organ ロックオルガン
1319Church organ チャーチオルガン
1420Reed organ リードオルガン
1521Accordion アコーディオン
1622Harmonica ハーモニカ
1723Tango Accordion タンゴアコーディオン
1824Acoustic Guitar (nylon) アコースティックギター(ナイロン弦)
1925Acoustic Guitar (steel) アコースティックギター(スチール弦)
1A26Electric Guitar (jazz) ジャズギター
1B27Electric Guitar (clean) クリーンギター
1C28Electric Guitar (muted) ミュートギター
1D29Overdriven Guitar オーバードライブギター
1E30Distortion Guitar ディストーションギター
1F31Guitar harmonics ギターハーモニクス
2032Acoustic Bass アコースティックベース
2133Electric Bass (finger) フィンガー・ベース
2234Electric Bass (pick) ピック・ベース
2335Fretless Bass フレットレスベース
2436Slap Bass 1 スラップベース 1
2537Slap Bass 2 スラップベース 2
2638Synth Bass 1 シンセベース 1
2739Synth Bass 2 シンセベース 2
2840Violin ヴァイオリン
2941Viola ヴィオラ
2A42Cello チェロ
2B43Double bass コントラバス
2C44Tremolo Strings トレモロ
2D45Pizzicato Strings ピッチカート
2E46Orchestral Harp ハープ
2F47Timpani ティンパニ
3048String Ensemble 1ストリングアンサンブル 1
3149String Ensemble 2ストリングアンサンブル 2
3250Synth Strings 1 シンセストリングス 1
3351Synth Strings 2 シンセストリングス 2
3452Voice Aahs 声「あー」
3553Voice Oohs 声「おー」
3654Synth Voice シンセヴォイス
3755Orchestra Hit オーケストラヒット
3856Trumpet トランペット
3957Trombone トロンボーン
3A58Tuba チューバ
3B59Muted Trumpet ミュートトランペット
3C60French horn フレンチ・ホルン
3D61Brass Section ブラスセクション
3E62Synth Brass 1 シンセブラス 1
3F63Synth Brass 2 シンセブラス 2
4064Soprano Sax ソプラノサックス
4165Alto Sax アルトサックス
4266Tenor Sax テナーサックス
4367Baritone Sax バリトンサックス
4468Oboe オーボエ
4569English Horn イングリッシュホルン
4670Bassoon ファゴット
4771Clarinet クラリネット
4872Piccolo ピッコロ
4973Flute フルート
4A74Recorder リコーダー
4B75Pan Flute パンフルート
4C76Blown Bottle 吹きガラス瓶
4D77Shakuhachi 尺八
4E78Whistle 口笛
4F79Ocarina オカリナ
5080Lead 1 (square) 矩形波
5181Lead 2 (sawtooth) ノコギリ波
5282Lead 3 (calliope) カリオペ
5383Lead 4 (chiff) チフ
5484Lead 5 (charang) チャラング
5585Lead 6 (voice)
5686Lead 7 (fifths) フィフスズ
5787Lead 8 (bass + lead) バス + リード
5888Pad 1 (Fantasia) ファンタジア
5989Pad 2 (warm) ウォーム
5A90Pad 3 (polysynth) ポリシンセ
5B91Pad 4 (choir) クワイア
5C92Pad 5 (bowed) ボウ
5D93Pad 6 (metallic) メタリック
5E94Pad 7 (halo) ハロー
5F95Pad 8 (sweep) スウィープ
6096FX 1 (rain)
6197FX 2 (soundtrack) サウンドトラック
6298FX 3 (crystal) クリスタル
6399FX 4 (atmosphere) アトモスフィア
64100FX 5 (brightness) ブライトネス
65101FX 6 (goblins) ゴブリン
66102FX 7 (echoes) エコー
67103FX 8 (sci-fi) サイファイ
68104Sitar シタール
69105Banjo バンジョー
6A106Shamisen 三味線
6B107Koto
6C108Kalimba カリンバ
6D109Bagpipe バグパイプ
6E110Fiddle フィドル
6F111Shanai シャハナーイ
70112Tinkle Bell ティンクルベル
71113Agogo アゴゴ
72114Steel Drums スチールドラム
73115Woodblock ウッドブロック
74116Taiko Drum 太鼓
75117Melodic Tom メロディックタム
76118Synth Drum シンセドラム
77119Reverse Cymbal 逆シンバル
78120Guitar Fret Noise ギターフレットノイズ
79121Breath Noise ブレスノイズ
7A122Seashore 海岸
7B123Bird Tweet 鳥の囀り
7C124Telephone Ring 電話のベル
7D125Helicopter ヘリコプター
7E126Applause 拍手
7F127Gunshot 銃声

Percussion notes
GMでは10チャンネルは、パーカッションのために予約されている。このチャンネルはプログラムが音色変更命令を送っても常にパーカションパートとなり、各音階番号には異なる楽器が割り当てられている。この、音階に対する打楽器割り当て表をドラムマップ(drum map)と呼ぶことがある。
打楽器は、10チャンネルが割り当てられている。ただし最初の1チャンネルが「0」であるので、10チャンネルは「9」となる。ノートオンの16進法で90番台になるので、打楽器指定は「99」となる。
打楽器指定の「99」は、複数トラックで指定することができる。
 打楽器の指定は音階(音高)で指定する。
打楽器一覧
16進法10進法英名和名
2335 Bass Drum 2 バスドラム 2
2436 Bass Drum 1 バスドラム 1
2537 Side Stick サイドスティック
2638 Snare Drum 1 スネアドラム 1
2739 Hand Clap 手拍子
2840 Snare Drum 2 スネアドラム 2
2941 Low Tom 2 ロートム 2
2A42 Closed Hi-hat クローズハイハット
2B43 Low Tom 1 ロートム 1
2C44 Pedal Hi-hat ペダルハイハット
2D45 Mid Tom 2 ミドルトム 2
2E46 Open Hi-hat オープンハイハット
2F47 Mid Tom 1 ミドルトム 1
3048 High Tom 2 ハイトム 2
3149 Crash Cymbal 1 クラッシュシンバル 1
3250 High Tom 1 ハイトム 1
3351 Ride Cymbal 1 ライドシンバル 1
3452 Chinese Cymbal チャイニーズシンバル
3553 Ride Bell ライドベル
3654 Tambourine タンバリン
3755 Splash Cymbal スプラッシュシンバル
3856 Cowbell カウベル
3957 Crash Cymbal 2 クラッシュシンバル 2
3A58 Vibra Slap ヴィブラスラップ
3B59 Ride Cymbal 2 ライドシンバル 2
3C60 High Bongo ハイボンゴ
3D61 Low Bongo ローボンゴ
3E62 Mute High Conga ミュートハイコンガ
3F63 Open High Conga オープンハイコンガ
4064 Low Conga ローコンガ
4165 High Timbale ハイティンバル
4266 Low Timbale ローティンバル
4367 High Agogo ハイアゴゴ
4468 Low Agogo ローアゴゴ
4569 Cabasa カバサ
4670 Maracas マラカス
4771 Short Whistle ショートホイッスル
4872 Long Whistle ロングホイッスル
4973 Short Guiro ショートギロ
4A74 Long Guiro ロングギロ
4B75 Claves クラベス
4C76 High Wood Block ハイウッドブロック
4D77 Low Wood Block ローウッドブロック
4E78 Mute Cuica ミュートクイーカ
4F79 Open Cuica オープンクイーカ
5080 Mute Triangle ミュートトライアングル
5181 Open Triangle オープントライアングル

ノートナンバー、ベロシティ
音程(ノートナンバー)、音量(ベロシティ値)については、以下を参照のこと。
また、ベロシティとは音の強さ(楽器で例えれば指などで1本の弦や鍵盤を弾く速さによって変化する音の強弱(強弱法))のことである。ベロシティは10進法で0-127までありmp(メゾピアノ)が64となり、127が最も強い。

音域音程16進数10進数
低500
11
22
33
44
ファ55
66
77
88
99
0A10
0B11
低40C12
0D13
0E14
0F15
1016
ファ1117
1218
1319
1420
1521
1622
1723
低31824
1925
1A26
1B27
1C28
ファ1D29
1E30
1F31
2032
2133
2234
2335
低22436
2537
2638
2739
2840
ファ2941
2A42
2B43
2C44
2D45
2E46
2F47
低13048
3149
3250
3351
3452
ファ3553
3654
3755
3856
3957
3A58
3B59
3C60
3D61
3E62
3F63
4064
ファ4165
4266
4367
4468
4569
4670
4771
高14872
4973
4A74
4B75
4C76
ファ4D77
4E78
4F79
5080
5181
5282
5383
高25484
5585
5686
5787
5888
ファ5989
5A90
5B91
5C92
5D93
5E94
5F95
高36096
6197
6298
6399
64100
ファ65101
66102
67103
68104
69105
6A106
6B107
高46C108
6D109
6E110
6F111
70112
ファ71113
72114
73115
74116
75117
76118
77119
高578120
79121
7A122
7B123
7C124
ファ7D125
7E126
7F127

音を出す・音を止める
データセクションには時間情報と共にイベント(音楽データのこと。どのキーをどの速さで押し下げたか等。MIDIイベント、システムエクスクルーシブ (SysEx) イベント、メタイベントの3種類がある)を順次格納する。
なお、時間情報やイベント内のいくつかの数値については、同じくビッグエンディアン形式であるが一種の圧縮形式で格納されている。この形式は1byte〜4byteの可変長で、可変長数値表現とも呼ばれ、1byteあたりには7bitの数値情報を持ち、最大28bitの数値情報を表すことができる。そして、それぞれの最上位bitがフラグとなっており、1である場合は次の1byteにビッグエンディアン形式の下位7bitずつの情報を含むことを示す。4byte目の最上位bitは使用しない。具体的には、音の長さを2進数で記載し、下7桁ずつで区切り、最下位の7桁に8桁目として0を付記し、次の7桁に8桁目として1を付記し、さらに次の7桁が存在すれば8桁目として1を付記し、それぞれの8桁の2進数を16進法表記に変換して時間情報(デルタタイム)を表現する。
例えば、2進法で10000 00000000(16進法で10 00、10進法で4096)ならば、100000 0000000のように下7桁毎に区切られて、最初の下7桁の冒頭に0を書き加え、次の下7桁の8桁目になる部分に1と間の桁に必要な数の0を書き加えて16桁の10 10000 0 0000000となる。これをそのまま2進法にすると10100000 00000000となる。これを16進法に変換するとA0 00という可変長数値表現が得られる。時間情報(デルタタイム)はこのような可変長数値表現が用いられる。
データセクションでは、音を出す、音を止める、の操作指示を出している。音を出す場合には、デルタタイム(待ち時間)、ノートオンコマンド「90」、音程(ノートナンバー)、音量(ベロシティ値)、の4つのデータを示す。音を消す場合には、デルタタイム、ノートオフコマンド「80」、音程、音量「00」、の4つのデータを示す。音を消す際のデルタタイムが、音を消す待ち時間となり、実際には音を出している時間に相当する。
4分音符のドの音を出して止めるには、音を出すデルタタイム「00」、音を出すノートオンコマンド「90」、音を出すドの音程「3C」、音を出す音量「40」、音を消すデルタタイム(可変長数値表現での待ち時間)「83 60」、音を消すノートオフコマンド「80」」、音を消すドの音程「3C」、消した後の音量「00」、のようなコードになる。
このような音を出す、音を止める操作の繰り返しとなる。
 同一トラックで一度ノートオンとチャンネルを記載すれば以下、ノートオン、ノートオフとも省略可能である。

和音
和音の場合には、音を出すデルタタイムをそれぞれ「00」にすることで同時に複数の音を出すことができる。

トラックの終了
トラックの終了には「FF 2F 00」を宣言する。

タイムベース(4分音符あたりの分解能)を「01 E0」(10進法で480)とした場合の可変長数値表現のデルタタイム一覧
音符10進法可変長10進法可変長16進法音符10進法可変長10進法可変長16進法
4倍全音符76801880BC 00付点4倍全音符115202180DA 00
倍全音符384015809E 00付点倍全音符57601730AD 00
全音符192014308F 00付点全音符28801506496 40
2分音符9601356487 40付点2分音符1440139328B 20
4分音符4801319683 60付点4分音符7201338085 50
8分音符24012911281 70付点8分音符36013010482 68
16分音符12012078付点16分音符1801295281 34
32分音符60603C付点32分音符90905A
64分音符30301E付点64分音符45452D
128分音符15150F3連符1601293281 20
(Wikipediaから転載)

タイムベース(4分音符あたりの分解能)を「18」(10進法で24)とした場合の可変長数値表現のデルタタイム一覧
この場合可変長表記が簡単になる。
音符10進法可変長10進法可変長16進法音符10進法可変長10進法可変長16進法
16倍全音符1,53614008C08倍全音符7681340860
4倍全音符38413108303倍全音符288130328220
2倍全音符192129648140全音符969660
2分音符484830付点2分音符727248
4分音符242418付点4分音符363624
8分音符12120C付点8分音符181812
16分音符666付点16分音符999
32分音符3333連符888

 MIDI文法は以下が分かりやすい。
http://www.geocities.co.jp/SiliconValley-SanJose/8132/(リンク切れ)
https://dtm-solutions.jp/smfgmgsxg.html
http://www.midi.org/techspecs/index.php(英語版規格)
 Wikipediaも参考になる。
スタンダードMIDIファイル
http://ja.wikipedia.org/wiki/General_MIDI(General MIDI)

転倒夢想庵