JUNO-D のシーンの設定を読み出すため、MIDI Debugger の入力欄に sysex data request 1 (rq1) scene common と打って Send を押すと、63 バイトの返事が届き、「Temporary Scene / Scene Common」と名前付きで読めました。
MIDI Debugger は、MIDI のメッセージを入力欄で組み立てて送り、送ったものと返ってきたものを同じ一覧に並べて、選べば中身を読める画面です。送る、観る、読むを一つの画面で行い、機器についての知識はデバイス定義から借ります。メッセージの名前の補完も、届いたメッセージの解読も、モニタと同じ定義と同じ解読の仕組みを使っています。
入力欄で組み立てる
画面の下に、送り先、チャンネル、入力欄(CLI)、HEX の欄があります。入力欄には、短いコマンドでメッセージを書きます。
note on C4 100
cc 74 96 ch2
nrpn 0:36 8
sysex data request 1 (rq1) scene common
コマンドは note、cc、pc、pb、cp、pp、rpn、nrpn、sysex、panic、reset です。入力に合わせて、入力欄のすぐ上に候補が並びます。Tab かクリックで確定でき、候補を選んだだけでは送信しません。

候補は、送り先に割り当てたデバイス定義から作られます。
- 音名と値。 ノートは C-1〜G9(C4 = 60)の音名で入力できます。値には
min、center、maxも使えます。 - CC と RPN、NRPN の名前。 定義にある名前で入力できます。番号での入力もそのまま使えます。
- SysEx。 共通のメッセージに加えて、送り先の機器のメッセージと、アドレスマップの区分とブロックが候補に出ます。上の画面では、JUNO-D のシーンの区分が、アドレスとサイズ付きで並んでいます。
入力した内容は、すぐ下の HEX の欄にバイト列で表示されます。HEX の欄に直接バイト列を書いて送ることもできます。
送る
Send を押すと送ります。NRPN は 4 つの CC、長い SysEx は複数のパケットになりますが、どちらも 1 回の操作として、まとめて受け付けます。入力の誤りや送り先の問題で受け付けられないときは、一部だけを送ることはせず、1 件も送りません。Roland の checksum のように、機器ごとに必要なバイトも、定義に従って付け足します。
送信の受付、実際の送信、機器からの返事は、別のものとして扱っています。一覧の Tx の行は、実際に送ったことの観測で、アプリが「送れたはず」として作った行ではありません。入力の誤りや送信の失敗は、ダイアログで知らせます。
返事を読む
送ったメッセージと届いたメッセージは、時刻、方向(Rx / Tx)、送り元、種類、チャンネル、長さ、データの列で、同じ一覧に並びます。冒頭の例では、17 バイトの RQ1 が Tx、63 バイトの DT1 が Rx として続いています。

行を選ぶと、右の Message Detail に中身が出ます。DT1 なら、メーカー、機種、メッセージの種類、アドレスとその名前(「Temporary Scene / Scene Common」)、全体の Hex Dump です。Hex Dump の右側には文字も表示されるので、この例ではシーンの名前「Studio Piano」が読めます。
解読はモニタと同じ仕組みで、MIDI Debugger のために別の解読を作ってはいません。モニタで名前が付くメッセージは、MIDI Debugger でも同じ名前で表示されます。
比べる、見張る
- Compare。 一覧で 2 件を選ぶと、同じ位置のバイトを並べて比べ、違うバイトを赤で示します。違うバイトの数と割合、長さの差も出ます。挿入されたバイトを探して位置をずらす比較ではありません。
- Watch。 CC 74 や Pitch Bend などを登録しておくと、一覧が流れても最新の値と時刻が残ります。観測が欠けたときは、値を確定せずに「不確定」と示します。
- Channel State。 選んだメッセージのチャンネルについて、押されたままのノート、Bank Select、Program、Pitch Bend、Sustain などの最新の観測値を並べます。観測したものだけを表示し、機器の状態を推測はしません。
記録して、送り直す
Record で、選んだ機器との送受信を記録し、Take として保存できます。Replay では、記録から選んだメッセージを、送り先を明示して、まとめて 1 回、または 1 つずつ送り直せます。返事が来なかったときに、同じ要求をもう一度送ることもできます。
まだできないこと
- 複数のメッセージを続けて送るマクロと、一定の間隔で送り続ける機能は、まだありません。
- DT1 のデータの中身を、パラメータごとの値に分けて表示することは、まだできません。今は区分とブロックの名前までです。
なぜこう作ったか
MIDI を調べるときは、メッセージを送り、届いたものを確かめ、また少し変えて送る、の繰り返しになります。送る道具と見る道具が別だと、そのたびに画面を行き来し、送った内容と返事を自分で突き合わせることになります。MIDI Debugger は、その往復を一つの画面に収めました。
もう一つは、機器の知識をこの画面に作り込まないことです。補完の名前も、解読の名前も、デバイス定義から来ています。定義を直せば、モニタと MIDI Debugger の両方が変わります。この考え方は「CC 102 が「OP1 Level」と読めるまで」に、JUNO-D のアドレスマップの作り方は「JUNO-D の SysEx を名前で送り、名前で読む」に書きました。