同じ1曲でも、MP3のファイルはおよそ5MB、いわゆるMIDIファイル(.mid)は数十KBしかありません。桁がふたつ違います。圧縮がうまいからではなく、MIDIファイルは何かを大胆に捨てているからです。捨てているのは、音そのもの。MIDIのデータの中に、音の波形は1サンプルも入っていません。

では何が入っているのか。「いつ、どの高さの音を、どの強さで弾け。いつ離せ」という演奏の指示です。MIDI(Musical Instrument Digital Interface)は、この指示を数バイトのメッセージとして送り合うための、楽器の共通語です。音を作る仕事は受け手の音源に任せて、自分は指示だけを運ぶ。この割り切りがMIDIのすべての出発点になります。

左は録音:マイクで拾った音を波形(1秒あたり44100個の数値)として保存する。右はMIDI:鍵盤の操作を「90 3C 64=ドを強さ100で弾け」のような数バイトの指示として保存し、音は受け手の音源が作る。録音は結果を、MIDIは指示を保存するという対比図

この連載の起点 で、音は1秒あたり44,100個の数値の列だと書きました。録音とは、この膨大な数値の列=鳴った結果を丸ごと保存することです。MIDIはその数値の列すら送りません。保存するのは楽譜にずっと近いもので、だからデータが軽く、あとから音の高さや長さを1音単位で直せて、ピアノの指示をそのままストリングスで鳴らし直すこともできます。録音した歌の音程直しがひと仕事なのに対し、MIDIなら数値をひとつ書き換えるだけです。

メーカーの垣根を越えた1983年

1980年ごろのシンセサイザーは、メーカーごとに接続方式がばらばらでした。電圧で音程を伝えるCV/Gateという方式が広く使われていたものの、電圧と音程の対応ルールがメーカーで違い、別々の会社の機材をつないで合奏させるのは一苦労でした。

そこで1981年、Sequential CircuitsのDave SmithがChet Woodとともに、メーカー共通のデジタル接続規格「Universal Synthesizer Interface」をAES(オーディオ技術者の学会)で提案します。この構想にRoland創業者の梯郁太郎ら日本のメーカーが合流し、仕様を擦り合わせて生まれたのがMIDIでした。1983年1月のNAMMショーで、SequentialのProphet-600とRolandのJupiter-6がケーブル1本でつながれ、片方の鍵盤を弾くともう片方が鳴る様子が初めて公開されます。ライバル同士の楽器が共通語で会話した瞬間です。仕様は同年8月にMIDI 1.0として公開されました。

物理的には5ピンのDINコネクタと、毎秒31,250ビットのシリアル通信。今の感覚では細い回線ですが、送るものが指示だけなので、これで足ります。そしてこの仕様が驚くほど長寿でした。40年以上たった今も、1983年の機材と最新の機材はそのままつながります。2020年に後継のMIDI 2.0が策定されましたが、1.0との互換は保たれたままです。2013年には、SmithとKakehashiの2人にテクニカル・グラミー賞が贈られました。音楽の賞が、音を1音も送らない規格の設計者に贈られたわけです。

中身はたった3バイト

MIDIのメッセージがどれくらい簡素か、鍵盤を1回押したときに流れるデータを見てみます。流れるのは次の3バイトだけです。

ノートオン90 3C 64の3バイトの内訳。1バイト目はステータスバイトで先頭ビットが1、上位4ビットが命令の種類(1001=ノートオン)、下位4ビットがチャンネル。2・3バイト目はデータバイトで先頭ビットが0、残り7ビットで0〜127を表す。3C=60は中央のド、64=100はベロシティ。データが7bitなので値は127で止まる

1バイト目の90をステータスバイトと呼びます。先頭ビットが1になっていて、「ここから命令が始まる」という合図です。上位4ビットが命令の種類(1001なら「弾け」=ノートオン)、下位4ビットが宛先チャンネルを表します。続く2バイトはデータバイトで、こちらは先頭ビットが0。残りの7ビットで、鍵盤のどこか(ノート番号)とどれだけ強く押したか(ベロシティ)を伝えます。60が中央のド、つまりピアノの真ん中あたりのドです。

ここでMIDIの値がなぜ127までなのかという定番の疑問も解けます。1バイトは8ビットありますが、先頭の1ビットを「命令かデータか」の見分けに使ってしまうので、データに残るのは7ビット、表せるのは0〜127の128通りです。ノート番号もベロシティも音量も、MIDIの世界の数値がそろって127止まりなのは、この設計のためです。

鍵盤を離すときはノートオフです。80 3C 00のように専用のステータス(8x)で送るのが正式ですが、実際の機材には「ノートオン(90)でベロシティ0を送る」ことをノートオフの代わりにする流儀も広く根付いています。強さ0で弾け、はつまり離せだろう、という論法です。これは単なる横着ではなく、同じステータスバイトが続くときは2回目以降のステータスを省略してよいというランニングステータスという節約規則があり、オンもオフも90系でそろえるとこの省略がよく効いて、細い回線をさらに節約できたのです。

1本のケーブルで16パートの合奏を送る

ステータスバイトの下位4ビットが宛先チャンネルでした。4ビットなので16チャンネル。つまりMIDIケーブル1本の中に、16パートぶんの指示を混ぜて流せます。

送り手のシーケンサーから1本のMIDIケーブルでメッセージが流れ、ステータスバイトの下位4bitのチャンネル番号によって、受け手の音源の中でch1のピアノ、ch2のベース、ch10のドラムへ振り分けられる図。90はch1宛て、91はch2宛て、99はch10宛て

受け手の音源は、届いたメッセージのチャンネル番号を見て、ch1はピアノの音色で、ch2はベースで、ch10はドラムで、とパートごとに鳴らし分けます。90 3C 64はch1宛ての「弾け」、91 3C 64なら同じ「弾け」でもch2宛て。宛先が変わるだけで、バイト列の形はまったく同じです。

この仕組みを土台に、1988年には演奏データをファイルに保存する共通形式SMF(Standard MIDI File、拡張子.mid)が、1991年には「音色番号1番はピアノ」「ch10はドラム」といった音色の割り当てまで統一するGeneral MIDIが定められました。どの機材で再生してもそれなりに同じ曲として鳴る「指示の缶詰」の完成です。冒頭の数十KBのMIDIファイルの正体はこれで、ガラケーの着メロが小さなデータで済んだのも、通信カラオケが細い電話回線で新曲を配信できたのも、送っていたのが音ではなく指示だったからでした。

鍵盤を押して、流れるバイトを見る

ここまでの話を、目で確かめられるデモを用意しました。画面の鍵盤を押すと、その瞬間に流れるMIDIメッセージが16進数で表示されます。音はブラウザ内のシンセが「指示を受け取った音源」の役を演じて鳴らしています。

うまく表示されないときは、デモを別タブで開く

まず鍵盤をひとつ押して、離してみてください。押した瞬間に90で始まる3バイト、離した瞬間に80で始まる3バイトが流れます。ベロシティのスライダーを動かすと3バイト目が変わり、チャンネルを切り替えるとステータスバイトの下位4ビットだけが変わります。ノートオフの流儀を「90 vel 0」に切り替えると、離したときのバイト列がノートオンと同じ90で始まるのも見ておいてください。どのつまみがどのバイトに効くかが結びつくと、MIDIのメッセージはただの表ではなく、読める言葉になってきます。

どう実現するか

デモの中身は、MIDIメッセージの組み立てと解釈をJavaScriptで書いたものです。組み立ては、ビット演算で3つの数を並べるだけです。

function noteOn(channel, note, velocity) {   // channelは1〜16
  return [0x90 | (channel - 1), note, velocity];
}

function noteOff(channel, note) {
  return [0x80 | (channel - 1), note, 0];
}

noteOn(1, 60, 100);   // [0x90, 0x3C, 0x64] = ch1でドを強さ100で弾け

0x90 | (channel - 1)が、命令の上位4ビットとチャンネルの下位4ビットをひとつのバイトに合成している部分です。受け取る側は逆に、status & 0xF0で命令の種類を、status & 0x0Fでチャンネルを取り出します。規格書の表で見ると無機質なMIDIメッセージも、書いてみればビット演算の初歩だけでできています。デモではこのバイト列を自前のシンセ(Web Audio)に渡して鳴らしていますが、同じバイト列は1983年のシンセにもそのまま通じます。

MIDI前夜と、MIDIの時代を聴く

最後に、この「指示で音楽を組み立てる」文化を体で感じられる2枚を紹介します。1枚はMIDIが生まれる前夜、もう1枚はMIDIが当たり前になった時代の音です。

Yellow Magic Orchestra『ソリッド・ステイト・サヴァイヴァー』のアルバムジャケット

Yellow Magic Orchestra / 1979

ソリッド・ステイト・サヴァイヴァー

MIDI誕生の4年前。シンセに指示を出すにはRoland MC-8という当時120万円のシーケンサーに数値を手打ちする必要があり、専任の松武秀樹が「YMO第4の男」と呼ばれ、ツアーのステージ上でもマシンを操っていました。指示で音楽を鳴らすことがまだ職人技だった時代の金字塔です。

Jan Hammer『Escape From Television』のアルバムジャケット

Jan Hammer / 1987

Escape From Television

ドラマ『マイアミ・バイス』の劇伴を、ニューヨーク郊外の自宅スタジオからほぼ一人で作り続けたJan Hammerの曲集。シンセとシーケンサーを従えた一人スタジオという働き方はMIDIが可能にしたもので、テーマ曲は1985年に全米1位まで上りました。

ジャケット画像はMusicBrainz / Cover Art Archive由来の画像を記事内に同梱して配信しています。

ここで少し宣伝を。Harmonizeは筆者が個人開発している音感トレーニングアプリです。この記事のようにMIDIを扱うアプリではありませんが、ノート番号60が「ド」だと言われてもピンと来ない、という耳を鍛える道具として公開しています。

音を送らず、指示を送る。1983年のこの割り切りは、データを軽くしただけでなく、「演奏の記録はあとから自由に編集できるものだ」という発想を音楽制作に持ち込みました。ピアノロールの上で音符をつまんで動かす現代のDTMは、すべてこの3バイトの延長線上にあります。次回の番外編MIDI編②では、この指示をコンピューター側で受け取る話、つまりブラウザが本物の楽器とつながるWeb MIDI APIを扱います。

参考文献