来たる12月3日に迫った第19回MIDI検定2級1次試験であるが、直前最後の追い込みとしてMIDIメッセージ構造の再復習をしておきたい(少々マニアックです)。
2級1次の知識問題を大別すると、MIDIメッセージの構成・構造に関する問題と、それ以外の音楽制作一般に関連する問題(DAWやシンセの基本、楽典基礎および著作権に関連する問題)に2分できる。このうち後者はほとんど常識レベルだと思うが、前者のMIDI関連だけはたとえ制作経験者であったとしても改めて覚え込む必要があることが多く、しかも結構ややこしい。率直に言ってDAWを使った実務で意識するケースは今日稀なため、試験のためと割り切って丸暗記するしかないだろう。
幸い毎回出題される箇所はほぼ一定であるから、概ね以下の項目を頭に入れておけば十分とは思う*1。
バイト単位メッセージと送信プロトコル
メッセージはすべて1バイト単位で定義される。入れ物としてのデータ形式は概略下記の通り:
- MIDIメッセージ = ステータス・バイト + データ・バイト1 (+ データ・バイト2)
- ステータス・バイト: MSB(先頭ビット) = 1
- データ・バイト: MSB(先頭ビット) = 0
送信方法
メッセージ・データは非同期シリアル転送方式で送信される。したがって、上記各データ・バイトの塊は、実際には前後に1ビットずつスタート・ビットとストップ・ビットが付いて合計10ビット単位で送信されることになる。
転送速度は、31.25kbpsと決まっている。
ランニング・ステータス
同一ステータス・バイトが連続する場合は、2つ目以降のステータス・バイトを省略して転送データ量を軽減できる。
メッセージの種類と構成
MIDIメッセージは、その機能により以下の2種に分類される:
- チャネル・メッセージ: チャネル(トラック)毎の制御メッセージ。
- システム・メッセージ: チャネル横断的なシステム全般に関わる制御メッセージ。
チャネル・メッセージ
これはさらに、チャネル・ボイス・メッセージとチャネル・モード・メッセージ2分される。
ボイス・メッセージ
具体的な演奏表現に関わるデータで、DAWにて編集操作するMIDIデータはほぼこれに尽きる。具体的には*2、
- ノートオフ (8nH)
- ノートオン (9nH)
- コントロール・チェンジ (BnH)
- プログラム・チェンジ (CnH)
- ピッチベンド・チェンジ (EnH)
が代表例(これだけ覚えておけば十分でしょう)。ちなみに3級はここの中身を中心に出題される(特にコントロール・チェンジ)。
モード・メッセージ
非常にざっくり言えば、各チャネルの状態を定義するセットアップ用のメッセージ (ステータス・バイトは、コントロール・チェンジと同じBnH)。初期化リセットなどに用いられるが、オール・ノート・オフとオール・サウンド・オフが頻出項目。CC#64(ホールド1)が適用されている時に発音を一切止めたい場合は、後者のオール・サウンド・オフを送信する。
もう一つの頻出項目は、いわゆるMIDIモードの定義で、オムニオン・オフとポリ・モノの組み合わせによりモード1から4まで4種類設定できる。オムニモードはMIDIチャネルを一切無視して受信・発音させる設定だが、今日使用することはまずないと思われる。
システム・メッセージ
これについては、以下の過去記事で一度簡単にまとめたことがある。
頻出項目としては、
- SysExのデータ形式は、F0H + メーカーID + データ + ... + データ + F7H (=EOX)
- ユニバーサルSysEx: メーカーIDが7D(非営利)、7E(ノンリアルタイム)あるいは7F(リアルタイム)となる特殊ケースで、メーカーに依存しない汎用データの送信に用いる。
- コモン・メッセージ (F1H〜F7H): よく出るのは、MTC(MIDI Time Code)クォーター・フレーム・メッセージ (F1H) と、ソング・ポジショニング (F2H)の2つ(これ以外は覚えなくてもいいだろう)。前者は、SMPTE同様の絶対時間管理に基づく同期信号で、時分秒フレームの時間情報データを扱う。後から追加で仕様が足された部分。
- リアルタイム・メッセージ (F8H〜FFH): タイミング・クロック (F8H) を押さえておけば十分。これはMIDI機器間の同期に用いられるMIDI本来の同期信号。絶対時間に基づかないため、曲の途中からの同期は上記コモン・メッセージのソング・ポジショニング (F2H) と組み合わせる。4分音符あたりの分解能は24クロックとされる(DAWの分解能TPQNとは無関係)。