MIDI(SMF)の作り方
MIDIは、0から255までの整数値(10進法)で表現されるバイナリデータ(16進法)ファイルである。
MIDIを作るためには、バイナリファイルを開いて、バイト型の0から255までの整数値(10進法)を入力し、バイナリデータ(16進法)として保存していけばよい。ファイル名にはMIDIの拡張子をつければよい。
MIDIはデータ数を正確に数えないと動作しない。
出した音は必ず止めなければならない。音が鳴りっぱなしになる。
カエルの歌のMIDI解説
16進法 | 10進法 | 解説 |
4D | 77 | 「MThd」という4文字のアスキーコード (ヘッダ部の開始)、midiファイルの宣言 |
54 | 84 | |
68 | 104 | |
64 | 100 | |
00 | 0 | ヘッダチャンクのデータの長さは6バイト(2+2+2) |
00 | 0 | |
00 | 0 | |
6 | 6 | |
00 | 0 | formatが0、通常0か1 |
00 | 0 | |
00 | 0 | トラックの数が1 |
1 | 1 | |
1 | 1 | タイムベース(4分音符あたりの分解能)16進で1E0だから、480。ここでヘッダはおしまい。 |
E0 | 224 | |
4D | 77 | 「MTrk」という4文字のアスキーコード(トラック部の開始部の宣言) |
54 | 84 | |
72 | 114 | |
6B | 107 | |
00 | 0 | このトラックに入っているデータの長さ。この4文字の次の文字から数えてトラックの終わりまで何文字あるかということ。16進で10Dだから、269文字。これが一致しないとmidiは鳴らない。 |
00 | 0 | |
1 | 1 | |
0D | 13 | |
00 | 0 | ここから3文字の「00 C0 XX」はチャンネルと楽器の指定. 「C」の後の数字は0からFまでの16チャンネルのいずれかを意味する。XXは0から127までの楽器コード。 |
C0 | 192 | |
00 | 0 | |
8F | 143 | 可変長数値表現のデルタタイム。16進で780、つまり1920ということは、480かける4だから、1小節分待っている。 |
00 | 0 | |
90 | 144 | この3つの数字は、前からノートオンコマンド(90+x:xは0から15までのチャンネル番号)、高さ、音量。 |
3C | 60 | |
40 | 64 | |
83 | 131 | デルタタイム。16進で1E0だから、480。4分音符分の長さ。 |
60 | 96 | |
80 | 128 | この3つの数字は、前からノートオフコマンド、高さ、音量。 |
3C | 60 | |
00 | 0 | |
00 | 0 | これもデルタタイム。零しか待たない。簡単のためにこうしています。 |
90 | 144 | ノートオン |
3E | 62 | 音程 |
40 | 64 | 音量 |
83 | 131 | デルタタイム1 |
60 | 96 | デルタタイム2 |
80 | 128 | ノートオフ |
3E | 62 | 音程 |
00 | 0 | 音量 |
00 | 0 | デルタタイム |
90 | 144 | ノートオン |
40 | 64 | 音程 |
40 | 64 | 音量 |
83 | 131 | デルタタイム1 |
60 | 96 | デルタタイム2 |
80 | 128 | ノートオフ |
40 | 64 | 音程 |
00 | 0 | 音量 |
00 | 0 | デルタタイム |
90 | 144 | ノートオン |
41 | 65 | 音程 |
40 | 64 | 音量 |
83 | 131 | デルタタイム1 |
60 | 96 | デルタタイム2 |
80 | 128 | ノートオフ |
41 | 65 | 音程 |
00 | 0 | 音量 |
00 | 0 | デルタタイム |
90 | 144 | ノートオン |
40 | 64 | 音程 |
40 | 64 | 音量 |
83 | 131 | デルタタイム1 |
60 | 96 | デルタタイム2 |
80 | 128 | ノートオフ |
40 | 64 | 音程 |
00 | 0 | 音量 |
00 | 0 | デルタタイム |
90 | 144 | ノートオン |
3E | 62 | 音程 |
40 | 64 | 音量 |
83 | 131 | デルタタイム1 |
60 | 96 | デルタタイム2 |
80 | 128 | ノートオフ |
3E | 62 | 音程 |
00 | 0 | 音量 |
00 | 0 | デルタタイム |
90 | 144 | ノートオン |
3C | 60 | 音程 |
40 | 64 | 音量 |
87 | 135 | デルタタイム1 |
40 | 64 | デルタタイム2 |
80 | 128 | ノートオフ |
3C | 60 | 音程 |
00 | 0 | 音量 |
00 | 0 | デルタタイム |
90 | 144 | ノートオン |
40 | 64 | 音程 |
40 | 64 | 音量 |
83 | 131 | デルタタイム1 |
60 | 96 | デルタタイム2 |
80 | 128 | ノートオフ |
40 | 64 | 音程 |
00 | 0 | 音量 |
00 | 0 | デルタタイム |
90 | 144 | ノートオン |
41 | 65 | 音程 |
40 | 64 | 音量 |
83 | 131 | デルタタイム1 |
60 | 96 | デルタタイム2 |
80 | 128 | ノートオフ |
41 | 65 | 音程 |
00 | 0 | 音量 |
00 | 0 | デルタタイム |
90 | 144 | ノートオン |
43 | 67 | 音程 |
40 | 64 | 音量 |
83 | 131 | デルタタイム1 |
60 | 96 | デルタタイム2 |
80 | 128 | ノートオフ |
43 | 67 | 音程 |
00 | 0 | 音量 |
00 | 0 | デルタタイム |
90 | 144 | ノートオン |
45 | 69 | 音程 |
40 | 64 | 音量 |
83 | 131 | デルタタイム1 |
60 | 96 | デルタタイム2 |
80 | 128 | ノートオフ |
45 | 69 | 音程 |
00 | 0 | 音量 |
00 | 0 | デルタタイム |
90 | 144 | ノートオン |
43 | 67 | 音程 |
40 | 64 | 音量 |
83 | 131 | デルタタイム1 |
60 | 96 | デルタタイム2 |
80 | 128 | ノートオフ |
43 | 67 | 音程 |
00 | 0 | 音量 |
00 | 0 | デルタタイム |
90 | 144 | ノートオン |
41 | 65 | 音程 |
40 | 64 | 音量 |
83 | 131 | デルタタイム1 |
60 | 96 | デルタタイム2 |
80 | 128 | ノートオフ |
41 | 65 | 音程 |
00 | 0 | 音量 |
00 | 0 | デルタタイム |
90 | 144 | ノートオン |
40 | 64 | 音程 |
40 | 64 | 音量 |
87 | 135 | デルタタイム1 |
40 | 64 | デルタタイム2 |
80 | 128 | ノートオフ |
40 | 64 | 音程 |
00 | 0 | 音量 |
00 | 0 | デルタタイム |
90 | 144 | ノートオン |
3C | 60 | 音程 |
40 | 64 | 音量 |
87 | 135 | デルタタイム1 |
40 | 64 | デルタタイム2 |
80 | 128 | ノートオフ |
3C | 60 | 音程 |
00 | 0 | 音量 |
00 | 0 | デルタタイム |
90 | 144 | ノートオン |
3C | 60 | 音程 |
40 | 64 | 音量 |
87 | 135 | デルタタイム1 |
40 | 64 | デルタタイム2 |
80 | 128 | ノートオフ |
3C | 60 | 音程 |
00 | 0 | 音量 |
00 | 0 | デルタタイム |
90 | 144 | ノートオン |
3C | 60 | 音程 |
40 | 64 | 音量 |
87 | 135 | デルタタイム1 |
40 | 64 | デルタタイム2 |
80 | 128 | ノートオフ |
3C | 60 | 音程 |
00 | 0 | 音量 |
00 | 0 | デルタタイム |
90 | 144 | ノートオン |
3C | 60 | 音程 |
40 | 64 | 音量 |
87 | 135 | デルタタイム1 |
40 | 64 | デルタタイム2 |
80 | 128 | ノートオフ |
3C | 60 | 音程 |
00 | 0 | 音量 |
00 | 0 | デルタタイム |
90 | 144 | ノートオン |
3C | 60 | 音程 |
40 | 64 | 音量 |
81 | 129 | デルタタイム1 |
70 | 112 | デルタタイム2 |
80 | 128 | ノートオフ |
3C | 60 | 音程 |
00 | 0 | 音量 |
00 | 0 | デルタタイム |
90 | 144 | ノートオン |
3C | 60 | 音程 |
40 | 64 | 音量 |
81 | 129 | デルタタイム1 |
70 | 112 | デルタタイム2 |
80 | 128 | ノートオフ |
3C | 60 | 音程 |
00 | 0 | 音量 |
00 | 0 | デルタタイム |
90 | 144 | ノートオン |
3E | 62 | 音程 |
40 | 64 | 音量 |
81 | 129 | デルタタイム1 |
70 | 112 | デルタタイム2 |
80 | 128 | ノートオフ |
3E | 62 | 音程 |
00 | 0 | 音量 |
00 | 0 | デルタタイム |
90 | 144 | ノートオン |
3E | 62 | 音程 |
40 | 64 | 音量 |
81 | 129 | デルタタイム1 |
70 | 112 | デルタタイム2 |
80 | 128 | ノートオフ |
3E | 62 | 音程 |
00 | 0 | 音量 |
00 | 0 | デルタタイム |
90 | 144 | ノートオン |
40 | 64 | 音程 |
40 | 64 | 音量 |
81 | 129 | デルタタイム1 |
70 | 112 | デルタタイム2 |
80 | 128 | ノートオフ |
40 | 64 | 音程 |
00 | 0 | 音量 |
00 | 0 | デルタタイム |
90 | 144 | ノートオン |
40 | 64 | 音程 |
40 | 64 | 音量 |
81 | 129 | デルタタイム1 |
70 | 112 | デルタタイム2 |
80 | 128 | ノートオフ |
40 | 64 | 音程 |
00 | 0 | 音量 |
00 | 0 | デルタタイム |
90 | 144 | ノートオン |
41 | 65 | 音程 |
40 | 64 | 音量 |
81 | 129 | デルタタイム1 |
70 | 112 | デルタタイム2 |
80 | 128 | ノートオフ |
41 | 65 | 音程 |
00 | 0 | 音量 |
00 | 0 | デルタタイム |
90 | 144 | ノートオン |
41 | 65 | 音程 |
40 | 64 | 音量 |
81 | 129 | デルタタイム1 |
70 | 112 | デルタタイム2 |
80 | 128 | ノートオフ |
41 | 65 | 音程 |
00 | 0 | 音量 |
00 | 0 | デルタタイム |
90 | 144 | ノートオン |
40 | 64 | 音程 |
40 | 64 | 音量 |
83 | 131 | デルタタイム1 |
60 | 96 | デルタタイム2 |
80 | 128 | ノートオフ |
40 | 64 | 音程 |
00 | 0 | 音量 |
00 | 0 | デルタタイム |
90 | 144 | ノートオン |
3E | 62 | 音程 |
40 | 64 | 音量 |
83 | 131 | デルタタイム1 |
60 | 96 | デルタタイム2 |
80 | 128 | ノートオフ |
3E | 62 | 音程 |
00 | 0 | 音量 |
00 | 0 | デルタタイム |
90 | 144 | ノートオン |
3C | 60 | 音程 |
40 | 64 | 音量 |
87 | 135 | デルタタイム1 |
40 | 64 | デルタタイム2 |
80 | 128 | ノートオフ |
3C | 60 | 音程 |
00 | 0 | 音量 |
00 | 0 | デルタタイム |
FF | 255 | End of Track。それで、曲が全部終わったら1つのトラック部の終了を宣言。 |
2F | 47 | |
00 | 0 |
(エクセル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 01 | n | 任意のテキスト(文字列)をSMF内に記載するために使う。 |
著作権表示 | FF 02 | n | 著作権表示用のテキスト文字列。トラックチャンクの先頭イベント(タイム0)とする。 |
シーケンス名/トラック名 | FF 03 | n | シーケンス/トラック名を記述するテキスト文字列。シーケンス名はフォーマット0のトラック内か、 フォーマット1の最初のトラック内に記載する。その他の場合は、トラック名として扱う。 |
楽器名 | FF 04 | n | 各チャンネルに対応する楽器名を記述する。 |
歌詞 | FF 05 | n | 歌詞を記述する場合に使用するテキスト文字列。 |
マーカ | FF 06 | n | フォーマット0/1の最初のトラックで使用し、シーケンス内のポイント名を記述するテキスト文字列。 |
キューポイント | FF 07 | n | ビデオなどに対して指示を出すときに使う。テキスト文字列。 |
トラックチャンク
続くトラックチャンクに実際の演奏データが格納される。それぞれのチャンクにはトラックチャンクであることを示す識別子"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進法 | 英名 | 和名 |
0 | 0 | Acoustic Piano | アコースティックピアノ |
1 | 1 | Bright Piano | ブライトピアノ |
2 | 2 | Electric Grand Piano | エレクトリックグランドピアノ |
3 | 3 | Honky-tonk Piano | ホンキートンクピアノ |
4 | 4 | Electric Piano | エレクトリックピアノ |
5 | 5 | Electric Piano 2 | エレクトリックピアノ2 |
6 | 6 | Harpsichord | ハープシコード |
7 | 7 | Clavi | クラビネット |
8 | 8 | Celesta | チェレスタ |
9 | 9 | Glockenspiel | グロッケンシュピール |
0A | 10 | Musical box | オルゴール |
0B | 11 | Vibraphone | ヴィブラフォン |
0C | 12 | Marimba | マリンバ |
0D | 13 | Xylophone | シロフォン |
0E | 14 | Tubular Bell | チューブラーベル |
0F | 15 | Dulcimer | ダルシマー |
10 | 16 | Drawbar Organ | ドローバーオルガン |
11 | 17 | Percussive Organ | パーカッシブオルガン |
12 | 18 | Rock Organ | ロックオルガン |
13 | 19 | Church organ | チャーチオルガン |
14 | 20 | Reed organ | リードオルガン |
15 | 21 | Accordion | アコーディオン |
16 | 22 | Harmonica | ハーモニカ |
17 | 23 | Tango Accordion | タンゴアコーディオン |
18 | 24 | Acoustic Guitar (nylon) | アコースティックギター(ナイロン弦) |
19 | 25 | Acoustic Guitar (steel) | アコースティックギター(スチール弦) |
1A | 26 | Electric Guitar (jazz) | ジャズギター |
1B | 27 | Electric Guitar (clean) | クリーンギター |
1C | 28 | Electric Guitar (muted) | ミュートギター |
1D | 29 | Overdriven Guitar | オーバードライブギター |
1E | 30 | Distortion Guitar | ディストーションギター |
1F | 31 | Guitar harmonics | ギターハーモニクス |
20 | 32 | Acoustic Bass | アコースティックベース |
21 | 33 | Electric Bass (finger) | フィンガー・ベース |
22 | 34 | Electric Bass (pick) | ピック・ベース |
23 | 35 | Fretless Bass | フレットレスベース |
24 | 36 | Slap Bass 1 | スラップベース 1 |
25 | 37 | Slap Bass 2 | スラップベース 2 |
26 | 38 | Synth Bass 1 | シンセベース 1 |
27 | 39 | Synth Bass 2 | シンセベース 2 |
28 | 40 | Violin | ヴァイオリン |
29 | 41 | Viola | ヴィオラ |
2A | 42 | Cello | チェロ |
2B | 43 | Double bass | コントラバス |
2C | 44 | Tremolo Strings | トレモロ |
2D | 45 | Pizzicato Strings | ピッチカート |
2E | 46 | Orchestral Harp | ハープ |
2F | 47 | Timpani | ティンパニ |
30 | 48 | String Ensemble 1 | ストリングアンサンブル 1 |
31 | 49 | String Ensemble 2 | ストリングアンサンブル 2 |
32 | 50 | Synth Strings 1 | シンセストリングス 1 |
33 | 51 | Synth Strings 2 | シンセストリングス 2 |
34 | 52 | Voice Aahs | 声「あー」 |
35 | 53 | Voice Oohs | 声「おー」 |
36 | 54 | Synth Voice | シンセヴォイス |
37 | 55 | Orchestra Hit | オーケストラヒット |
38 | 56 | Trumpet | トランペット |
39 | 57 | Trombone | トロンボーン |
3A | 58 | Tuba | チューバ |
3B | 59 | Muted Trumpet | ミュートトランペット |
3C | 60 | French horn | フレンチ・ホルン |
3D | 61 | Brass Section | ブラスセクション |
3E | 62 | Synth Brass 1 | シンセブラス 1 |
3F | 63 | Synth Brass 2 | シンセブラス 2 |
40 | 64 | Soprano Sax | ソプラノサックス |
41 | 65 | Alto Sax | アルトサックス |
42 | 66 | Tenor Sax | テナーサックス |
43 | 67 | Baritone Sax | バリトンサックス |
44 | 68 | Oboe | オーボエ |
45 | 69 | English Horn | イングリッシュホルン |
46 | 70 | Bassoon | ファゴット |
47 | 71 | Clarinet | クラリネット |
48 | 72 | Piccolo | ピッコロ |
49 | 73 | Flute | フルート |
4A | 74 | Recorder | リコーダー |
4B | 75 | Pan Flute | パンフルート |
4C | 76 | Blown Bottle | 吹きガラス瓶 |
4D | 77 | Shakuhachi | 尺八 |
4E | 78 | Whistle | 口笛 |
4F | 79 | Ocarina | オカリナ |
50 | 80 | Lead 1 (square) | 矩形波 |
51 | 81 | Lead 2 (sawtooth) | ノコギリ波 |
52 | 82 | Lead 3 (calliope) | カリオペ |
53 | 83 | Lead 4 (chiff) | チフ |
54 | 84 | Lead 5 (charang) | チャラング |
55 | 85 | Lead 6 (voice) | 声 |
56 | 86 | Lead 7 (fifths) | フィフスズ |
57 | 87 | Lead 8 (bass + lead) | バス + リード |
58 | 88 | Pad 1 (Fantasia) | ファンタジア |
59 | 89 | Pad 2 (warm) | ウォーム |
5A | 90 | Pad 3 (polysynth) | ポリシンセ |
5B | 91 | Pad 4 (choir) | クワイア |
5C | 92 | Pad 5 (bowed) | ボウ |
5D | 93 | Pad 6 (metallic) | メタリック |
5E | 94 | Pad 7 (halo) | ハロー |
5F | 95 | Pad 8 (sweep) | スウィープ |
60 | 96 | FX 1 (rain) | 雨 |
61 | 97 | FX 2 (soundtrack) | サウンドトラック |
62 | 98 | FX 3 (crystal) | クリスタル |
63 | 99 | FX 4 (atmosphere) | アトモスフィア |
64 | 100 | FX 5 (brightness) | ブライトネス |
65 | 101 | FX 6 (goblins) | ゴブリン |
66 | 102 | FX 7 (echoes) | エコー |
67 | 103 | FX 8 (sci-fi) | サイファイ |
68 | 104 | Sitar | シタール |
69 | 105 | Banjo | バンジョー |
6A | 106 | Shamisen | 三味線 |
6B | 107 | Koto | 琴 |
6C | 108 | Kalimba | カリンバ |
6D | 109 | Bagpipe | バグパイプ |
6E | 110 | Fiddle | フィドル |
6F | 111 | Shanai | シャハナーイ |
70 | 112 | Tinkle Bell | ティンクルベル |
71 | 113 | Agogo | アゴゴ |
72 | 114 | Steel Drums | スチールドラム |
73 | 115 | Woodblock | ウッドブロック |
74 | 116 | Taiko Drum | 太鼓 |
75 | 117 | Melodic Tom | メロディックタム |
76 | 118 | Synth Drum | シンセドラム |
77 | 119 | Reverse Cymbal | 逆シンバル |
78 | 120 | Guitar Fret Noise | ギターフレットノイズ |
79 | 121 | Breath Noise | ブレスノイズ |
7A | 122 | Seashore | 海岸 |
7B | 123 | Bird Tweet | 鳥の囀り |
7C | 124 | Telephone Ring | 電話のベル |
7D | 125 | Helicopter | ヘリコプター |
7E | 126 | Applause | 拍手 |
7F | 127 | Gunshot | 銃声 |
Percussion notes
GMでは10チャンネルは、パーカッションのために予約されている。このチャンネルはプログラムが音色変更命令を送っても常にパーカションパートとなり、各音階番号には異なる楽器が割り当てられている。この、音階に対する打楽器割り当て表をドラムマップ(drum map)と呼ぶことがある。
打楽器は、10チャンネルが割り当てられている。ただし最初の1チャンネルが「0」であるので、10チャンネルは「9」となる。ノートオンの16進法で90番台になるので、打楽器指定は「99」となる。
打楽器指定の「99」は、複数トラックで指定することができる。
打楽器の指定は音階(音高)で指定する。
打楽器一覧
16進法 | 10進法 | 英名 | 和名 |
23 | 35 | Bass Drum 2 | バスドラム 2 |
24 | 36 | Bass Drum 1 | バスドラム 1 |
25 | 37 | Side Stick | サイドスティック |
26 | 38 | Snare Drum 1 | スネアドラム 1 |
27 | 39 | Hand Clap | 手拍子 |
28 | 40 | Snare Drum 2 | スネアドラム 2 |
29 | 41 | Low Tom 2 | ロートム 2 |
2A | 42 | Closed Hi-hat | クローズハイハット |
2B | 43 | Low Tom 1 | ロートム 1 |
2C | 44 | Pedal Hi-hat | ペダルハイハット |
2D | 45 | Mid Tom 2 | ミドルトム 2 |
2E | 46 | Open Hi-hat | オープンハイハット |
2F | 47 | Mid Tom 1 | ミドルトム 1 |
30 | 48 | High Tom 2 | ハイトム 2 |
31 | 49 | Crash Cymbal 1 | クラッシュシンバル 1 |
32 | 50 | High Tom 1 | ハイトム 1 |
33 | 51 | Ride Cymbal 1 | ライドシンバル 1 |
34 | 52 | Chinese Cymbal | チャイニーズシンバル |
35 | 53 | Ride Bell | ライドベル |
36 | 54 | Tambourine | タンバリン |
37 | 55 | Splash Cymbal | スプラッシュシンバル |
38 | 56 | Cowbell | カウベル |
39 | 57 | Crash Cymbal 2 | クラッシュシンバル 2 |
3A | 58 | Vibra Slap | ヴィブラスラップ |
3B | 59 | Ride Cymbal 2 | ライドシンバル 2 |
3C | 60 | High Bongo | ハイボンゴ |
3D | 61 | Low Bongo | ローボンゴ |
3E | 62 | Mute High Conga | ミュートハイコンガ |
3F | 63 | Open High Conga | オープンハイコンガ |
40 | 64 | Low Conga | ローコンガ |
41 | 65 | High Timbale | ハイティンバル |
42 | 66 | Low Timbale | ローティンバル |
43 | 67 | High Agogo | ハイアゴゴ |
44 | 68 | Low Agogo | ローアゴゴ |
45 | 69 | Cabasa | カバサ |
46 | 70 | Maracas | マラカス |
47 | 71 | Short Whistle | ショートホイッスル |
48 | 72 | Long Whistle | ロングホイッスル |
49 | 73 | Short Guiro | ショートギロ |
4A | 74 | Long Guiro | ロングギロ |
4B | 75 | Claves | クラベス |
4C | 76 | High Wood Block | ハイウッドブロック |
4D | 77 | Low Wood Block | ローウッドブロック |
4E | 78 | Mute Cuica | ミュートクイーカ |
4F | 79 | Open Cuica | オープンクイーカ |
50 | 80 | Mute Triangle | ミュートトライアングル |
51 | 81 | Open Triangle | オープントライアングル |
ノートナンバー、ベロシティ
音程(ノートナンバー)、音量(ベロシティ値)については、以下を参照のこと。
また、ベロシティとは音の強さ(楽器で例えれば指などで1本の弦や鍵盤を弾く速さによって変化する音の強弱(強弱法))のことである。ベロシティは10進法で0-127までありmp(メゾピアノ)が64となり、127が最も強い。
音域 | 音程 | 16進数 | 10進数 |
低5 | ド | 0 | 0 |
1 | 1 | ||
レ | 2 | 2 | |
3 | 3 | ||
ミ | 4 | 4 | |
ファ | 5 | 5 | |
6 | 6 | ||
ソ | 7 | 7 | |
8 | 8 | ||
ラ | 9 | 9 | |
0A | 10 | ||
シ | 0B | 11 | |
低4 | ド | 0C | 12 |
0D | 13 | ||
レ | 0E | 14 | |
0F | 15 | ||
ミ | 10 | 16 | |
ファ | 11 | 17 | |
12 | 18 | ||
ソ | 13 | 19 | |
14 | 20 | ||
ラ | 15 | 21 | |
16 | 22 | ||
シ | 17 | 23 | |
低3 | ド | 18 | 24 |
19 | 25 | ||
レ | 1A | 26 | |
1B | 27 | ||
ミ | 1C | 28 | |
ファ | 1D | 29 | |
1E | 30 | ||
ソ | 1F | 31 | |
20 | 32 | ||
ラ | 21 | 33 | |
22 | 34 | ||
シ | 23 | 35 | |
低2 | ド | 24 | 36 |
25 | 37 | ||
レ | 26 | 38 | |
27 | 39 | ||
ミ | 28 | 40 | |
ファ | 29 | 41 | |
2A | 42 | ||
ソ | 2B | 43 | |
2C | 44 | ||
ラ | 2D | 45 | |
2E | 46 | ||
シ | 2F | 47 | |
低1 | ド | 30 | 48 |
31 | 49 | ||
レ | 32 | 50 | |
33 | 51 | ||
ミ | 34 | 52 | |
ファ | 35 | 53 | |
36 | 54 | ||
ソ | 37 | 55 | |
38 | 56 | ||
ラ | 39 | 57 | |
3A | 58 | ||
シ | 3B | 59 | |
中 | ド | 3C | 60 |
3D | 61 | ||
レ | 3E | 62 | |
3F | 63 | ||
ミ | 40 | 64 | |
ファ | 41 | 65 | |
42 | 66 | ||
ソ | 43 | 67 | |
44 | 68 | ||
ラ | 45 | 69 | |
46 | 70 | ||
シ | 47 | 71 | |
高1 | ド | 48 | 72 |
49 | 73 | ||
レ | 4A | 74 | |
4B | 75 | ||
ミ | 4C | 76 | |
ファ | 4D | 77 | |
4E | 78 | ||
ソ | 4F | 79 | |
50 | 80 | ||
ラ | 51 | 81 | |
52 | 82 | ||
シ | 53 | 83 | |
高2 | ド | 54 | 84 |
55 | 85 | ||
レ | 56 | 86 | |
57 | 87 | ||
ミ | 58 | 88 | |
ファ | 59 | 89 | |
5A | 90 | ||
ソ | 5B | 91 | |
5C | 92 | ||
ラ | 5D | 93 | |
5E | 94 | ||
シ | 5F | 95 | |
高3 | ド | 60 | 96 |
61 | 97 | ||
レ | 62 | 98 | |
63 | 99 | ||
ミ | 64 | 100 | |
ファ | 65 | 101 | |
66 | 102 | ||
ソ | 67 | 103 | |
68 | 104 | ||
ラ | 69 | 105 | |
6A | 106 | ||
シ | 6B | 107 | |
高4 | ド | 6C | 108 |
6D | 109 | ||
レ | 6E | 110 | |
6F | 111 | ||
ミ | 70 | 112 | |
ファ | 71 | 113 | |
72 | 114 | ||
ソ | 73 | 115 | |
74 | 116 | ||
ラ | 75 | 117 | |
76 | 118 | ||
シ | 77 | 119 | |
高5 | ド | 78 | 120 |
79 | 121 | ||
レ | 7A | 122 | |
7B | 123 | ||
ミ | 7C | 124 | |
ファ | 7D | 125 | |
7E | 126 | ||
ソ | 7F | 127 |
音を出す・音を止める
データセクションには時間情報と共にイベント(音楽データのこと。どのキーをどの速さで押し下げたか等。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倍全音符 | 7680 | 188 | 0 | BC 00 | 付点4倍全音符 | 11520 | 218 | 0 | DA 00 |
倍全音符 | 3840 | 158 | 0 | 9E 00 | 付点倍全音符 | 5760 | 173 | 0 | AD 00 |
全音符 | 1920 | 143 | 0 | 8F 00 | 付点全音符 | 2880 | 150 | 64 | 96 40 |
2分音符 | 960 | 135 | 64 | 87 40 | 付点2分音符 | 1440 | 139 | 32 | 8B 20 |
4分音符 | 480 | 131 | 96 | 83 60 | 付点4分音符 | 720 | 133 | 80 | 85 50 |
8分音符 | 240 | 129 | 112 | 81 70 | 付点8分音符 | 360 | 130 | 104 | 82 68 |
16分音符 | 120 | 120 | 78 | 付点16分音符 | 180 | 129 | 52 | 81 34 | |
32分音符 | 60 | 60 | 3C | 付点32分音符 | 90 | 90 | 5A | ||
64分音符 | 30 | 30 | 1E | 付点64分音符 | 45 | 45 | 2D | ||
128分音符 | 15 | 15 | 0F | 3連符 | 160 | 129 | 32 | 81 20 |
(Wikipediaから転載)
タイムベース(4分音符あたりの分解能)を「18」(10進法で24)とした場合の可変長数値表現のデルタタイム一覧
この場合可変長表記が簡単になる。
音符 | 10進法 | 可変長10進法 | 可変長16進法 | 音符 | 10進法 | 可変長10進法 | 可変長16進法 | ||||
16倍全音符 | 1,536 | 140 | 0 | 8C | 0 | 8倍全音符 | 768 | 134 | 0 | 86 | 0 |
4倍全音符 | 384 | 131 | 0 | 83 | 0 | 3倍全音符 | 288 | 130 | 32 | 82 | 20 |
2倍全音符 | 192 | 129 | 64 | 81 | 40 | 全音符 | 96 | 96 | 60 | ||
2分音符 | 48 | 48 | 30 | 付点2分音符 | 72 | 72 | 48 | ||||
4分音符 | 24 | 24 | 18 | 付点4分音符 | 36 | 36 | 24 | ||||
8分音符 | 12 | 12 | 0C | 付点8分音符 | 18 | 18 | 12 | ||||
16分音符 | 6 | 6 | 6 | 付点16分音符 | 9 | 9 | 9 | ||||
32分音符 | 3 | 3 | 3 | 3連符 | 8 | 8 | 8 |
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)
転倒夢想庵