MIDI 1.0の仕様書は、こちらのサイト からpdfをダウンロードすることができます。1983年に規格が作成され、1998年に規格書として第1版が発行された とのことです。ちなみにpdf版は、2019年に配布が始まりました。
MIDIの昔話です。その昔どんな工夫をしていたかというお話。今回はランニングステータスについて書いて見ます。 MIDIは遅い、と言われることがあります。元々、MIDIはシリアル通信が基本でボーレート(Baud Rate)は31.25kbpsと仕様で決まっています。 ボーレートは1秒間に送信できるビットの数で、31.25kbpsは1秒間に31,250ビットを送ることを意味しています。 1981年の仕様です。その当時のパソコンやマイコンではこのスピードが限界だったのだと思います。
MIDIのメッセージ、例えば鍵盤(真ん中のド)を押したというメッセージは8ビット3バイトのメッセージです。
90H 3CH 7FH
このメッセージを送信するためにかかる時間は約1msecです。測定した記録、MIDIを観測 がこちらにあります。もし、3和音、ドミソを同時に押したとします。押したという3つのMIDIメッセージは以下のような9バイトの メッセージになります。
90H 3CH 7FH 90H 40H 7FH 90H 43H 7FH
それぞれのメッセージが送信されるタイミングを時間軸に乗せて見ます。
このメッセージを鍵盤が送信し、音源が受信したとします。 音源側は、1つのメッセージ(3バイト)を受け取った時から音を鳴らすプログラムが起動し、その後に音が鳴ります。 この準備に何msecかかるかわかりませんが、例えば5msecとします。あくまでも例です。 音源側で音の出るタイピングを上の図に書き加えて見ます。 赤丸の位置がドが鳴る時間、青丸の位置がミが鳴る時間、緑丸の位置がソが鳴る時間になります。
最初のメッセージが送信され始めてから、ドが鳴るまでに6msec、ソがなるまでに8msecかかります。 すなわち、ドとソの鳴時間に約2msecの差がある。この2msecの差をもっと短くする工夫は無いものか? そこで考えられた工夫がランニングステータスです。 (プログラムの音を鳴らすための準備時間5msecは楽器メーカの努力でしか解決することができません。)
ランニングステータスは、今回送るメッセージが手前で送ったメッセージと、最初のバイトデータ(ステータスバイトと言います。) が同じ場合、ステータスバイトを送らなくて良い。という送信方法です。この場合、ミのメッセージのステータスバイトは 90Hで、ドのメッセージのステータスバイト90Hと同じなので省くことができます。また、ソのメッセージのステータスバイトも 90Hなので省くことができます。そこでドミソを押した、というMIDIメッセージは 次のようなメッセージとなります。
90H 3CH 7FH 40H 7FH 43H 7FH
これを上と同じように時間軸に並べてみると、ドが鳴るタイミングは変わりませんが、ミとソは少しずつ早く鳴ことがわかります。 ドとソの時間差は約1.2msecと短くなります。
ランニングステータスはあくまでもステータスバイトが同じ、という条件でステータスバイトを省くことができます。 次のように、途中で違うステータスを持つメッセージが挿入されると、それ以降は省くことができなくなります。 このメッセージを(1)とします。
90H 3CH 7FH 90H 40H 7FH 80H 40H 7FH 90H 43H 7FH ---(1)
例えば、上のように80Hというステータスバイトがはさまると、次のステータスバイトは省略できません。
90H 3CH 7FH 40H 7FH 80H 40H 7FH 90H 43H 7FH ---(2)
(2)は(1)に対して1バイトしか減らすことができません。
上の説明で違うステータスバイトがはさまると省略できない。と書きました。 ピアノの演奏のように、鍵盤を押した、離したを連続して送信したい場合、データを短くして タイミングをなるべく揃えたくなります。(2)で言えば、80H 40H 7FH の80Hも送らなく済むようにしたいのです。
そこで、鍵盤を離したという情報は、鍵盤を押した、でもベロシティはゼロでとして送信することとします。とすると、上の(2)の中で、 80H 40H 7FHというメッセージは、90H 40H 00Hとすることができます。したがって、
90H 3CH 7FH 40H 7FH 90H 40H 00H 90H 43H 7FH ---(3)
となりす。(3) はステータスがすべて90Hになりましたので、これをランニングステータスで端折ることができます。
90H 3CH 7FH 40H 7FH 40H 00H 43H 7FH ---(4)
もともとのメッセージは(1)は12バイトでした。それがベロシティゼロのノートオンとランニングステータスを使うことで (4)のように9バイトになりました。3バイト、MIDIの転送時間にすると約1msrcを短くすることができました。
MIDI 1.0の仕様書では、MIDIはこのハードウェアを使いなさい、という規定がなされています。曰く
さらにこのドキュメントには標準の回路図が掲載されています。
この回路図のDINコネクタの接続は、メスコネクタのハンダ付けするピンの側から見ています。
5pin DINには3種類の形状があるそうです。こちらは 秋月電子通商さんのカタログからコピーしています。MIDIは180°とカッコの中に記載があるように、半円の中にピンが収められている -5A の形状です。
System Exclusive Messageは、その名の通り楽器やシーケンサーのシステムで専用に使われるメッセージです。 楽器のパネルの制御、音色やエフェクトのパラメータ、PCM音源のサンプルデータ、音源のモード切り替えなどに使われます。
コントロールチェンジメッセージもパラメータを送受信することができます。しかし、こちらは1つのメッセージで 1つの7ビットのデータを送れるに過ぎません。システム・エクスクルーシブ・メッセージは0xF0で始まり、0xF7で終わる メッセージで、その間には理論上何バイトでもデータを挟んで送ることができます。 ただし、データの最上位ビットはゼロでなければなりません。 (ただし一部、0xF0と0xF7の間に割り込むことができるメッセージがあります。後述します。)
F0H Data1 Data2 Data3 ... DataN F7H
エレクトーンELB-01の操作パネルをシステム・エクスクルーシブ・メッセージで制御する例を こちらのページに記載しています。