MIDI
MIDI(ミディ、Musical Instrument Digital Interface)は、電子楽器の演奏データを機器間で転送・共有するための共通規格である。日本のMIDI規格協議会(JMSC、現在の社団法人音楽電子事業協会)と国際団体のMIDI Manufacturers Association (MMA) により策定され1981年に公開された。
MIDIは音楽制作の現場で幅広く利用されている。MIDI規格に則って作成されたデータは、DAWをはじめとしたシーケンサーなどで再生・編集することができる。
物理的な送受信回路・インタフェース、通信プロトコル、など複数の規定からなる。MIDI 1.0の策定完了から38年後の2019年に、Ver.2.0となるMIDI 2.0の策定開始が発表された。
MIDIデータは、音声データ(マイクなどで録音した音の波形をサンプリングしたもの)ではなく演奏情報(発音せよ、音の高さは - 、音の大きさは - 、といった楽器や音源へのメッセージ)であり、データサイズが小さく、また音楽の細部を容易に変更することができる。
電子楽器以外では劇場の舞台照明のコントロールなどにも応用されている。また、MIDI規格とパソコンの普及は、ホビーとしての音楽制作(DTM)を一般化した。
当初、MIDI規格は、ハードウェアとソフトウェアの両分野にまたがり策定された。ハードウェアの規格は、インタフェースや送受信回路・端子に関することであり、ソフトウェアの規格は、データフォーマット(機器同士がリアルタイム通信する際の規格であって、MIDIデータを保存流通させるとは異なる)に関することである。
その後、MIDIの普及に伴いRP(Recommended Practice、推奨実施例)という拡張規格が策定された。音色配列などを厳密に定めたGMシステムレベル1や、MIDIデータを保存流通させるファイルフォーマット、劇場の舞台照明をコントロールする規格(MIDIショーコントロール)が、このRPに含まれる。
MIDIはJIS(日本産業規格)によって以下のように規格化されている。
X 6054-1 電子楽器デジタルインタフェース(MIDI)- 第1部:総則
X 6054-2 電子楽器デジタルインタフェース(MIDI)- 第2部:プロトコル仕様
31.25Kbps (±1%) の非同期方式シリアル転送を用いる。
MIDI機器(ハードウェア)は5ピンのDINコネクタで接続するのが一般的である。両端に位置する1番ピンと3番ピンは現在の仕様上では使用されず、中央2番ピンはケーブルのシールド用に、4番、5番ピンがデジタル信号のカレントループ伝送に使用される。MIDIケーブルの両端はどちらもオス端子で、シールドされたツイストペアケーブルとして設計される。
コネクタには、MIDI信号を受け取るMIDI IN、MIDI信号を送信するMIDI OUT、受信したMIDI信号をそのまま送信するMIDI THRUの3種類がある。機器パネル側は常にメス端子となる。グラウンドループや障害の連鎖防止のため、MIDI機器同士には電気的絶縁が規定されており、受信側内部では接地線の2番ピンは接続されず、信号はフォトカプラで受信される基本仕様となっている。フォトカプラを経由するたびに信号波形の再現性が下がるため、MIDI THRUを多段直列すると通信エラーが発生することもある。並列に複数のMIDI機器を接続する場合や、信号系統を簡単に切り替えたい時はMIDIパッチベイを用いるが、これを使うことにより多段時の通信エラーも回避できる。
MIDIはバスではない。MIDI IN端子とMIDI OUT端子が別々で用意されていることから判るように、MIDIケーブル間のデータは一方向に送信される。
後述するアクティブセンシング機能で、接続状態が良好か、断線していないかを常に判定しており、アクティブセンシングが途絶えたとき、お互いのMIDI機器はケーブルが抜けたと判定するように作られている。
現代には、MIDI IN、MIDI OUTを使わずRS-232C、USB、IEEE 1394などの規格を使った接続を行う機器も存在している。この場合、MIDIケーブルではなくこれらの規格のケーブル内をMIDI信号が通るため、転送に関して上記の通りではない。
2本のMIDIケーブルを用い、お互いの機器のMIDI IN、MIDI OUTをそれぞれつないだ状態を1つの「システム」と捉える。このシステム毎に16のチャンネルが用意される。基本的にひとつのチャンネルにひとつの楽器(1パート)が割り当てられる。
これにより、1本のMIDIケーブルで16チャンネル分のデータを送信もしくは受信させることができる。例えば「1チャンネルのピアノと3チャンネルのギターを鳴らす」といったことである。16チャンネル分のデータは、後述する「チャンネルメッセージ」にて正確に分類され、相手機器の各チャンネルに届く。
それ以上のチャンネルを制御するためにはMIDIケーブルが複数本必要となり、MIDIデータのパート数(=チャンネル数)によっては、複数のMIDI音源を用意する必要もでてくる。
MIDI規格上のデータの送受信は、すべてMIDIメッセージで行われる。MIDIメッセージは、複数のバイト(8ビット)で構成されている。「電子楽器の鍵盤を弾いたことで音が出る」という一連の流れもMIDIメッセージで制御されている。バイト単位で処理していくため、文言上では16進数を用い、数の後にHを付ける。
MIDIメッセージを効率よく送信するために、MIDIメッセージに使用されるバイトは「ステータスバイト」か「データバイト」の大きく2種類に分けられる。ステータスバイトとはMSB (Most Significant Bit)が「1」、すなわち80H - FFHまでの128個のバイトを指し、データバイトとはMSBが「0」、すなわち00H - 7FHまでの128個のバイトを指す。
MIDIメッセージは複数のバイトで構成されていると前述したが、これらの先頭は常にステータスバイトで始まり、ステータスバイトの後に任意の個数のデータバイトが続く。ステータスバイトでは、ノートオンやコントロールチェンジ、システムエクスクルーシブなどを定義する。データバイトは、ステータスバイトで定義したものについて、その内容や数値を指定するのに使用する。
ステータスバイトが80H - FFHのうち何であるかによって、「チャンネルメッセージ」、「システムメッセージ」に分かれる。
チャンネルメッセージとは、特にチャンネルを指定して送信するMIDIメッセージのことである。チャンネルメッセージのステータスバイトは80H - EFHである。ここからさらに「チャンネルボイスメッセージ」、「チャンネルモードメッセージ」と分類される。
チャンネルボイスメッセージとは、音を鳴らす、止める、音色を変える、ピッチを変えるといった、音源の演奏に必要な情報に関する定義のことである。最大2つのデータバイトが続くことで、その内容・数値を決定する。
ステータスバイトの下位4ビットがMIDIチャンネル番号-1(0(0H)Hはチャンネル1、15(FH)はチャンネル16)を表している。
データバイトにて指定するノートナンバーとは、最も低い音を0、最も高い音を127と割り当てた音の高さのことであり、半音刻みとなっている。中央ハにはノートナンバー60が割り当てられ、88鍵盤のピアノで出せる音域(A0 - C8の7オクターブと短3度)はノートナンバー21 - 108と割り当てられるので、MIDIではそれよりさらに広い音域(C-1 - G9の10オクターブと完全5度)をカバーできる。また、ベロシティとは音の強さ(楽器で例えれば各弦や各鍵を弾く速さによって変化する音の強弱(強弱法))のことである。1 - 127までありmp(メゾピアノ)が64となり、127が最も強く、1が最も弱く、数値が0の場合は発音の終了(楽器で例えれば離鍵など)を表す。
なお、以下の説明では、これら0 - 127までの数字を、16進数で表記する。また、nはチャンネル番号を表わす。
8nH ノートオフ
音を止める命令。鍵盤楽器ではキーを離した時に送信される。ノートオフによって鳴っている音を止める。
第1データバイト - ノートナンバーを指定
第2データバイト - オフベロシティ値
9nH ノートオン
音を鳴らす命令。鍵盤楽器ではキーを押した時に送信される。この後ノートオフが送信されないままだと、音が鳴りっぱなしとなる。
第1データバイト - ノートナンバーを指定
第2データバイト - ベロシティ値
なお「ノートオン・ベロシティ0」もノートオフと同じメッセージとみなされる。
AnH ポリフォニック キープレッシャー
鍵盤楽器で、キーを押した状態でさらにその圧力を変化させた場合に(いわゆるアフタータッチ)、その圧力に応じて送信される。
第1データバイト - ノートナンバーを指定
第2データバイト - プレッシャー値
BnH コントロールチェンジ
音量、音質など様々な要素を制御するための命令。
第1データバイト - コントロールナンバー(00H - 77H)を指定 - どのパラメータをコントロールするのか指定
第2データバイト - コントロール値 - コントロール番号にて指定した要素の大小や強弱を設定
ただし第1データバイトが78H - 7FH(120 - 127)の場合はコントロールチェンジではなく、チャンネルモードメッセージとなる。
CnH プログラムチェンジ
音色を変える命令。00H - 7FHで、最大128種類から音色を選択できる。
第1データバイト - プログラムナンバーを指定
第2データバイトは使用しない。
DnH チャンネルプレッシャー
鍵盤楽器で、キーを押した状態でさらにその圧力を変化させた場合に、その圧力に応じて送信される。ポリフォニック キープレッシャーと違い、そのチャンネルの全ノートナンバーに対して適用される。
第1データバイト - プレッシャー値
第2データバイトは使用しない。
EnH ピッチベンド
鳴っている音のピッチを変える命令。MSB (Most Significant Byte) 128段階の1段階ずつをさらにLSB (Least Significant Byte) で128分割しているので、計16384段階の細かい指定ができる。シーケンサー上では、-8192 - 0 - 8191といった数値で表示することが多い。
第1データバイト - ピッチベンド値LSB
第2データバイト - ピッチベンド値MSB
ステータスバイト部のnには0H - FHが代入され、これは1チャンネル - 16チャンネルを表す。「90H 3CH 40H」というMIDIメッセージがあったとすると、これは「ノートオン、1チャンネル。3CH=60なので中央ハを鳴らす。40H=64なのでmpで鳴らす」という命令である。
チャンネルモードメッセージとは、ある楽器は和音が出せるのか、16チャンネルは区別するのかしないのか、といったことを設定するための定義のことである。BnHで始まるがコントロールチェンジには含まれず、BnHのあとに78H - 7FHが続くと、チャンネルモードメッセージのいずれかと判断される。多くの場合、第2データバイトには00Hがダミーとして送信され、受信側も無視する。ステータスバイト部のnには0H - FHが代入され、これは1チャンネル - 16チャンネルを表す。
BnH 78H オールサウンドオフ
該当するチャンネルの発音中の音を直ちに消音する。後述のオールノートオフより強制力が強い。
BnH 79H リセットオールコントローラ
該当するチャンネルの全種類のコントロール値を初期化する。初期化されるコントロールや初期値は、受信するMIDI機器側に依存する。
BnH 7AH ローカルコントロール
鍵盤と音源を兼ねそろえたシンセサイザーの、鍵盤部と音源部の内部的な接続に関する設定。第2データバイトを指定することでオンオフを行う。
00H - ローカルオフ - 鍵盤と音源が接続されていない状態。鍵盤を弾くと、MIDI OUTからMIDIメッセージは送信されるが、音源は動かない。
7FH - ローカルオン - 鍵盤と音源が接続されている状態。鍵盤を弾くと、音源から音が出る。
BnH 7BH オールノートオフ
該当するチャンネルの発音中の音すべてに対してノートオフ命令を出す。ただし、音の余韻の長いものや、サスティンペダルがオンの状態では音は止まらないので、オールサウンドオフを使用する。
BnH 7CH - 7FH MIDIモード設定
7CH、7DH、7EH、7FHの4つのチャンネルモードメッセージを使いオムニモード、発音数のオンオフを組み合わせることで、4種のMIDIモードを設定できる。
オムニモード - 7CH オムニオン、7DH オムニオフで設定。MIDIチャンネルを区別するかしないか。オフの場合、チャンネルに関係なく全ての情報を受信し処理、発音する。
発音数 - 7EH モノモードオン、7FH ポリモードオンで設定。どちらかを設定すると片方のモードは自動的にオフになる。単音しか出せないのか、和音が出せるのかを設定する。
モード1 = 7DH オムニオン + 7FH ポリモード
MIDIチャンネルを意識せず和音演奏ができるモード。
モード2 = 7DH オムニオン + 7EH モノモード
MIDIチャンネルに関わらず、常に1音のみ鳴らすモード。
モード3 = 7CH オムニオフ + 7FH ポリモード
一般的な送受信モード。MIDIチャンネルを区別し、各チャンネル毎に和音を用いた演奏が可能なモード。
モード4 = 7CH オムニオフ + 7EH モノモード
チャンネルは区別するが、各チャンネル毎に1音しか出せないモード。たとえば6弦あるギターシンセサイザーの各弦を各チャンネルに割り当てる場合に使用する。この場合、単音で発声するチャンネルは6つとなるので、第2データバイトでは06Hを送信する。
システムメッセージとは、チャンネルに関係なくMIDIシステム全体に対する命令を行うMIDIメッセージである。システムメッセージのステータスバイトはF0H - FFHである。機能ごとに「システムエクスクルーシブメッセージ」、「システムコモンメッセージ」、「システムリアルタイムメッセージ」の分類される。
システムエクスクルーシブメッセージ(Sys-Ex、またはSysExと略記し、シスイーエックスと読む場合もある)は、MIDI機器のより細かい設定を行ったり、音色データやサンプリングデータを送受信するなど、各メーカーのMIDI機器の固有のデータのやりとりに使用できるシステムメッセージである。ステータスバイトF0Hで始まる。
MIDIメッセージは大抵2バイト程度のデータバイトで成り立つが、SysExはMIDIメッセージ中、唯一データバイト長が指定されていない。可変長のため、最後にシステムコモンメッセージとして定義されているF7H エンドオブエクスクルーシブ (EOX) を送信することでSysExの終了を表現する。
システムコモンメッセージは、主にシステムリアルタイムメッセージと併用され、MIDIシーケンサーなどの同期に使用される。ステータスバイト以下にデータバイトが続くものが多い。
F1H MTCクォーターフレームメッセージ
MIDIタイムコード (MTC) の絶対時間情報を扱う。全2バイトで構成され、2バイト目で時刻、分、秒、フレームのカウントを処理する。
F2H ソングポジションポインタ
同期時にマスター側で操作したロケータ位置をスレーブ側に送信する際に使用。16分音符単位で指定できる。第1データバイトでソングポジションポインタLSB、第2データバイトでソングポジションポインタMSBを扱う。
F3H ソングセレクト
受信側のMIDI機器が複数のソング・シーケンスを扱える場合、第1データバイトでソングナンバーを選択する。
F4H 未定義
F5H 未定義
定義されず、使われていない。
F6H チューンリクエスト
アナログシンセサイザー(デジタルのそれに比べ自身の発熱や周囲の温度変化、舞台上で浴びる照明などで経時により調律が狂いやすい)などで、オシレータを再調律させるための命令。現在はアナログシンセサイザーとともにほとんど使われない。
F7H エンドオブエクスクルーシブ (EOX)
F0Hから始まるSysExの終了を示すステータスバイト。単独で機能し、データバイトを持たない。
システムリアルタイムメッセージは、MIDIシーケンサーなどの同期、MIDIタイミングクロックに使用される。ステータスバイト以下にデータバイトが続かず、単独の1バイトのみで機能する。リアルタイムに送信される必要があるため、最優先で送信される。
F8H タイミングクロック
絶対時間を持たないクロック情報。4分音符ごとに24カウントされる。
F9H 未定義
定義されず、使われていない。
FAH スタート
FBH コンティニュー
FCH ストップ
マスター側機器のコントロールパネルを操作したときに送信。それぞれスレーブ側機器の先頭から再生、停止中からの再生、停止を行う。
FDH 未定義
定義されず、使われていない。
FEH アクティブセンシング
突然のMIDIケーブルの断線や接触不良や出力側機器の故障などで、音が鳴りっぱなしになったりしないようにするためのフェイルセーフの仕組みである。MIDI機器間ではこのアクティブセンシングが常に送信されている。ウォッチドッグタイマーの一種である。受信側は、一度もアクティブセンシングを受けていない状態では通常通り動作するが、一度送信側からこれを受信すると、300ms(ミリ秒)以内に次のMIDIメッセージが送られてくることを期待するようになる。この状態で、アクティブセンシングや、その他MIDIメッセージを受信しなかった場合、断線したと判定する。
ただし、実際は誤差やMIDI THRU処理の遅れを考慮し270ms - 330msの間で処理するよう余裕を持たせてある。このことから、送信側は270ms間隔でアクティブセンシングを送信し続ける。
FFH システムリセット
これを受信した全てのMIDI機器はリセット(電源投入時の状態に戻)される。通常は使用しない。
サンプルダンプとは、システムエクスクルーシブメッセージを使用してサンプラーとMIDI機器間でサンプリングデータを通信する規格である。サンプルダンプに関するフォーマットをサンプルダンプスタンダード (SDS) という。MMAが1987年に提案した規格で、MMA-0003として定義されている。
ただし、前述の通りMIDIの通信速度は31.25Kbpsと、データ転送用途としては非常に遅い上、現代にはUSBやIEEE 1394などの高速シリアルバスも普及しているため、一部の学習・研究用途を除き使われることは無くなった。
RP (Recommended Practice) とは、MIDI規格策定後、利便性を高めるための推奨実施例として拡張された規格である。現在すでに複数の拡張規格がAMEIとMMAにより承認されており、いずれも共通規格としてMIDI規格に組み込まれている。
スタンダードMIDIファイル(SMF)とは、MIDI機器やMIDIメッセージを用いる演奏に関するデータの保存形式であり、メーカー毎のソフトやハードに関係なく使用できる共通のである。拡張子は.mid。いわゆる「MIDIデータ」は演奏形式である前述した「MIDIデータフォーマット」の略称であるが、このスタンダードMIDIファイルを指すべく拡大使用される場合がある。
Opcode社により独自規格として提案されたが、1991年7月にAMEIとMMAによりRPの第1号(RP-001)に追認された。
GMシステムレベル1、通称GM (General MIDI) とは、それまで各メーカー毎に異なっていた音色配列を統一することを目的として策定されたRPである。1991年に、RP-003にて定義されている。音色配列の他、最低同時発音数や音色数、コントロールチェンジの効き具合といったことも指定されている。
さらに、従来のGMでは時代の進化に伴い補いきれなくなってきた部分を補完するため、GMシステムレベル2 (GM2) が上位規格として拡張された。GMとは完全な上位互換性をもつ。
のちに、主に携帯電話の着信メロディの制作用途として、General MIDI Lite (GML) も上位規格として拡張された。
1991年 - GMシステムレベル1 - RP-003
1999年 - GMシステムレベル2 - RP-024
2001年 - General MIDI Lite - RP-033
DLS (Downloadable Sounds) は、SMFデータをサウンドカードなどの音源機器に転送して再生するために策定されたRPである。1997年に、RP-016にて定義されている。再生する音源が異なると、作者の意図しない音色で再生されてしまうSMFとは異なり、DLS対応機器ならほとんど同じ音での再生を行なうことが可能となる。拡張子は.dls。
のちに、上位規格であるDLSレベル2.1や、携帯電話向けのMobile DLSが拡張された。
1997年 - DLSレベル1.0 - RP-016
1999年 - DLSレベル1.1 - RP-016
2000年 - DLSレベル2.0 - RP-025
2000年 - DLSレベル2.1 - RP-025
2003年 - Mobile DLS - RP-041
XMF (eXtensible Music Format) は、MMAによって提案された新しい音楽である。SMFや、音声ファイルであるWAVなどが一つのファイルとして格納できるようになっている。
複数回改稿されており、それぞれのバージョン毎にRPとして承認されている。
2001年 - XMFメタファイルフォーマット1.00 - RP-030
2003年 - XMFメタファイルフォーマット1.01 - RP-039
2004年 - XMFメタファイルフォーマット2.00 - RP-043
また、複数の用途に向けて、複数のタイプが定義、検討されている。
2001年 - XMFタイプ0 アンド XMFタイプ1ファイル - RP-031
2004年 - XMFタイプ2/Mobile XMFファイル - RP-042
2007年 - XMFタイプ3/Mobile オーディオクリップ for Mobile XMFファイル - RP-045
20XX年 - XMFタイプ4/Interactive XMF (iXMF)
XMFに関する拡張規格も用意されている。
2003年 - UnPackerID for ZLIB - RP-040
2006年 - ID3 Meta-data Tags for XMF - RP-047
MIDIショーコントロール (MIDI Show Control, MSC) とは、照明や映像機器など、ショーの演出をコントロールする目的で策定されたRPである。1991年にRP-002、のちにRP-014にて定義されている。
MIDIタイムコード (MIDI Time Code, MTC) は、同期システムを組むことを目的として策定されたRPである。1987年に、RP-004にて定義されている。
MIDI規格策定時に、同時に策定されたMIDIタイミングクロックは絶対時間を持たなかったが、SMPTEの普及につれMIDI上でも絶対時間を持ったクロックが必要となってきたことが、MTC策定の背景である。
MIDI策定団体であるMMAが中心に提案したため、RPのほかにMMA-0001としても定義されている。
記譜情報はMIDIデータ(MIDIメッセージの集合)を楽譜上に音符として表示するために策定されたRPである。RP-005、RP-006にて定義されている。
ファイルダンプとは、MIDIケーブルを使ってSMFデータを転送するために策定されたRPである。RP-009にて定義されている。
MIDIマシンコントロールとは、システムエクスクルーシブメッセージを用いてMTRやVTRを制御するために策定されたRPである。1992年に、RP-013にて定義されている。
SMF with Lyrics (SMF Language and Display extensions) とは、SMFのメタイベントとして用意されている歌詞格納機能を拡張したRPである。1999年に、RP-026にて定義されている。
メタイベントと違い、表示を目的としており、曲タイトル、作曲者名、作詞者名、歌詞やふりがなを格納できる。カラオケの歌詞表示や楽譜上の歌詞表記などの用途を想定されている。また、日本語 (Shift JIS) も使用できる。
MIDI Media Adaptation Layer for IEEE-1394は、MIDIインタフェースなどのMIDI機器をIEEE 1394を用いて接続することに関するRPである。2000年に、RP-027にて定義されている。
SP-MIDI (Scalable Polyphony MIDI) は、あらゆる音源で最適なデータを再生するために策定されたRPである。2002年に、RP-034、RP-035にて定義されている。
例えば、通常だと24ボイス(パート数)を持つ音源用に作られたデータを16ボイスの音源で再生すると、8ボイス分は無視されてしまう。このままではデータ制作者の意図した再生ができないため、従来なら24ボイス用、16ボイス用と複数のデータを用意する必要が有った。このSP-MIDIの規格に従うと、ひとつのデータに前もって複数環境分の情報を収録できるので、少ない工数で、あらゆる音源で問題なく再生が出来るようになる。この技術は主に携帯電話向けに使用される。
MIDI XML ("MIDI Names, Device Types, & Events in XML") は、SMFをXMLで記述することを目的として策定されたRPである。2003年に、RP-038にて定義されている。
RPとして承認されていないが、各メーカーが独自に打ち出した規格も存在する。中には、比較的一般的となった規格も存在する。ただしメーカーに左右されるため、メーカーを越えた互換性は無い場合が多い。
なお、現在はこれ以上の音色配列などに関する規格の複雑化を防ぐため、AMEI、MMA共にGM2に一本化することを求めており、また、GS・XGはお互い規格をオープンにして相互にサポートすべきとしている。しかし、実際にはローランド製、ヤマハ製の製品であってもGS・XG自体をサポートしない製品が増えてきたことも事実である。
同じ楽譜で演奏をしても、演奏者や楽器が異なると音が違って聴こえるように、使用する音源を変えれば出音は違ってくる。そのため、例えばインターネット上で配布されているMIDIデータをデータ制作者の意図した通りに演奏するためには、制作者が使ったものと同じ、音色設定を完全に一致させた音源が必要になる。たとえGS対応と謳っていてもGS対応音源なら何でもいいというわけではなく、どの音源モジュールを使うかによって音は異なる。
GSフォーマットは、1991年にローランドが提唱、策定した音色配列などに関する独自規格。RP-003であるGMを拡張して作られたと思われがちだが、こちらが先行している。GMは、GSから他社と共有できる部分を抜粋し標準化したものである。
GSに対応した音源には、SC-55やSC-88Proなどのローランド・SCシリーズが有名。
XGフォーマットは、1994年にヤマハが提唱、策定した音色配列などに関する独自規格。ヤマハ製の音源モジュールやシンセサイザーの互換性を持たせるためにGMを拡張する形で作られた。
XGに対応した音源には、MU80やMU500などのヤマハ・MUシリーズが有名。
本項ではMIDI規格が使われる用途と、MIDI規格を使用するハードウェア(機器)、ソフトウェアについて解説する。なお、箇条書きにしているハードウェアやソフトウェアは一例である。