Baud
プロトコル一覧

MIDI

31,250 baud のシリアル線を流れる、3 バイトの音楽メッセージ。

Note On の中身

3 バイトをビットに分けて見ます。最上位ビットがステータスとデータを区別し、残りが種別・チャンネル・音・強さを運びます。

MIDI Note On・3 バイト090100100003C001111006401100100メッ…チャン…ノート番号ベロシティフィールドをクリックして中身を見る

フレーム全体

3 バイトで「チャンネル 1、ノート 60(真ん中のド)を、ベロシティ 100 で鳴らせ」と伝えます。各バイトの最上位ビットでステータスとデータを区別できるので、途中から聞き始めた受信側も次のステータスバイトで同期できます。

フィールド位置例の値意味
ステータスフラグ0 バイト目の bit 711 = このバイトはメッセージの先頭
メッセージ種別0 バイト目の bits 6–4001 = Note On001 = Note On。ほかに 000 Note Off、010 ポリプレッシャー、011 コントロールチェンジ、100 プログラムチェンジ、101 チャンネルプレッシャー、110 ピッチベンドがあります。
チャンネル0 バイト目の bits 3–00 = チャンネル 1線上では 0〜15、演奏者には チャンネル 1〜16 と表示されます。0 = チャンネル 1。
データフラグ1 バイト目の bit 700 = データバイト。値に使えるのは残り 7 ビット
ノート番号1 バイト目の bits 6–060 = C4(真ん中のド)0〜127。60 が真ん中のド(C4)で、+1 ごとに半音上がります。69 が A4 = 440 Hz です。
データフラグ2 バイト目の bit 70ここも 0。データバイトは最上位ビットを必ず 0 にします
ベロシティ2 バイト目の bits 6–0100(かなり強め)0〜127。鍵盤を押した強さ。0 は Note Off の意味です。

概要

MIDI 1.0(1983 年)は、キーボード・シンセサイザ・コンピュータを会話させる規格です。音そのものではなく「鍵盤を押した」「つまみを回した」といったイベントを運びます。線上の形式は 31,250 baud の UART で、1 つのメッセージは 1 バイトのステータスと 1〜2 バイトのデータでできています。

設計の工夫は最上位ビットです。ステータスバイトは 1(0x80〜0xFF)、データバイトは 0(0x00〜0x7F)。受信側はストリームのどこから聞き始めても、メッセージの境目が分かります。

基本情報

信号線
5 ピン DIN の電流ループ(または USB)
速度
31,250 baud (8N1)
メッセージ長
1〜3 バイト(+ SysEx)
チャンネル
16
音域
0 – 127
方向
ケーブル 1 本につき一方向

同じメッセージを線の上で

下の層は普通の UART です。スタートビット、下位から 8 ビット、ストップビットを 3 回繰り返します。

MIDI0S0D00D10D20D31D40D50D61D71P0S0D00D11D21D31D41D50D60D71P0S0D00D11D20D30D41D51D60D71Pステータス 0x90ノート 0x3C(C4)ベロシティ 0x64区分1 バイト目71605041302010000x901442 バイト目70605141312110000x3C603 バイト目70615140302110000x64100

フレーム全体

Note On 1 つは線上で約 1 ミリ秒(31,250 baud で 30 ビット)です。10 音の同時発音なら 10 ms かかり、古い MIDI 機材で和音がずれる理由になります。

  1. スタート

    スタートビット(常に 0)。普通のシリアルポートと同じ UART のフレーミングです。MIDI は 31,250 baud・データ 8 ビット・パリティなし・ストップ 1 ビットの UART そのものです。

  2. ステータス 0x90

    ステータスバイトです。最上位ビットが 1(受信側がステータスとデータを見分ける目印)、001 は Note On、下位 4 ビットの 0 は MIDI チャンネル 1 を表します。

  3. ストップ

    ストップビット(常に 1)。メッセージ全体は 3 × 10 = 30 ビット時間で、約 0.96 ms です。

  4. ノート 0x3C(C4)

    データ 1 バイト目: ノート番号です。データバイトの最上位ビットは常に 0 で、残り 7 ビット(0〜127)が値です。0x3C = 60 = 真ん中のドです。

  5. ベロシティ 0x64

    データ 2 バイト目: 鍵盤を叩いた強さで、0x64 = 100(最大 127)です。ベロシティ 0 の Note On は Note Off として扱われます。

ランニングステータス

連続するメッセージが同じステータスなら、送信側は省略できます。低速な回線で帯域を節約するための仕組みです。

ランニングステータスの和音・7 バイト0490100100003C0011110064011001004001000000640110010043010000116401100100ステータス 0x90ノート 60(C4)ベロシティ 100ノート 64(E4)ベロシティ 100ノート 67(G4)ベロシティ 100フィールドをクリックして中身を見る

フレーム全体

ランニングステータスは、繰り返しのステータスバイトを省きます。C メジャーの和音が 9 バイトではなく 7 バイトで送れ、31,250 baud の回線では 22% の節約になります。

フィールド位置例の値意味
ステータス 0x900 バイト目Note On ch.1最初に 1 回だけ送ります。Note On、チャンネル 1。
ノート 60(C4)1 バイト目0x3C = 601 つ目の音: C4。
ベロシティ 1002 バイト目0x64 = 100強さ: 100。
ノート 64(E4)3 バイト目0x40 = 64 = E4ここにステータスバイトはありません。データバイト(最上位ビット 0)が来たら、受信側は直前のステータスを使い回します。これがランニングステータスで、2 つ目の音は 3 バイトではなく 2 バイトで済みます。
ベロシティ 1004 バイト目0x64 = 1002 つ目の音のベロシティ。
ノート 67(G4)5 バイト目0x43 = 67 = G43 つ目の音もステータスなし。C メジャーの和音 C4・E4・G4 がそろいます。
ベロシティ 1006 バイト目0x64 = 1003 つ目の音のベロシティ。合計 7 バイト(通常なら 9 バイト)です。

使われる場面

  • キーボード・ドラムパッド・コントローラと DAW・シンセの接続
  • 舞台照明やショーコントロール(MIDI Show Control)
  • USB-MIDI や Bluetooth-MIDI も同じメッセージを運びます

つまずきやすい点

  • 線の速度は 38400 でも 115200 でもなく、ちょうど 31,250 baud(1 MHz ÷ 32)です。PC の普通のシリアルポートでは出せず、マイコンなら出せます。
  • チャンネルは線上で 0〜15、画面では 1〜16 です。1 ずれの勘違いが定番です。
  • 音が鳴りっぱなしになるのは、たいてい Note Off が失われたためです。多くの機器は「All Notes Off」(コントローラ 123)に反応します。

出典・規格

  • MIDI 1.0 Detailed Specification (MIDI Manufacturers Association)

関連するプロトコル