更新日:
確認環境: MIDIFabric 開発版。opsix の番号は Korg の資料と照合、NRPN の表示は Sequential Prophet Rev2 で取得

モニタに CC 102 = 100 と表示されても、何の設定が変わったのかは機種ごとに調べる必要があります。Korg opsix ならオペレーター 1 のレベルですが、別のシンセでは同じ番号が別の機能に割り当てられていたり、使われていなかったりします。

MIDIFabric では、機種ごとの番号と名前の対応をデバイス定義に記述しています。形式は JSON です。モニタと MIDI Debugger が同じ定義を使い、メッセージの表示や入力補完に名前を反映します。

CC に名前を付ける

opsix のコントローラーは、opsix、opsix SE、opsix module、opsix mk II の定義が共通で読み込むライブラリのファイルにあります。CC 102 はこう書かれています。

"102": { "name": "OP1 Level", "category": "Operator", "range": [0, 127] }

CC 103〜107 も、同じ形で OP2〜OP6 Level です。番号は、Korg の取扱説明書と MIDI インプリメンテーション・チャートから取りました。この定義が opsix のポートに割り当てられていると、モニタにはこう表示されます。

OP1 Level(#102) = 100

名前が番号の代わりに表示され、CC の番号も括弧の中に残ります。コントローラーには、値の意味(ラベル)も書けます。たとえば opsix の Glide Mode は、値をモードの名前に対応させているので、モニタには数ではなくモードの名前が表示されます。ラベルのない値は、数のままです。

どの定義を、どのポートに使うか

ポートに使う定義は、手動で選んだ定義、機器からの識別応答、ポート名の順に照合します。いずれにも該当しなければ、機器固有の定義は使いません。定義のないポートでも、Modulation や Sustain のような一般的なコントローラーは、標準の名前で表示します。

4 つのメッセージを、1 つのパラメータに

128 の CC で足りないパラメータには、NRPN を使うシンセがあります。NRPN の 1 回の変更は、4 つの CC に分かれています。CC 99 と 98 でパラメータを選び、CC 6 と 38 で値を送ります。1 メッセージずつ表示すると 4 行に分かれるため、パラメータ番号と値を読み取るには、それらを組み合わせる必要があります。

MIDIFabric はポートとチャンネルごとに選択されたパラメータを保持し、CC 6 と 38 が届いたら 1 つの値として表示します。定義では、パラメータを 2 つの選択の番号で名付けます。Sequential Prophet Rev2 の例です。

"0:36": { "name": "VCA Env Release", "range": [0, 127], "category": "Amp Envelope" }

CC 99 = 0、CC 98 = 36、CC 6 = 0、CC 38 = 8 は、1 行になります。

VCA Env Release = 8

MIDIFabric のモニタ。NRPN を VCA Env Release として解読し、元の 4 つのメッセージを表示している。下は 16 ビットのベロシティを持つ MIDI 2.0 の Note On と Note Off

行を展開すると、元の 4 メッセージも確認できます。選択の番号 127 / 127(ヌル)はパラメータの選択を解除し、選択の後 0.5 秒以内にデータが来なければ選択を解除するので、後から無関係な CC 6 が届いても結び付けません。MIDIFabric が送ったメッセージも、受け取ったものとは別に、同じようにまとめます。

定義を編集する

付属の定義をコピーしてアプリの中で編集することも、自分で書くこともできます。同じ ID の付属の定義より、自分のコピーが優先され、コピーを削除すると付属の定義に戻ります。アプリで保存した変更はすぐに反映され、アプリの外で編集したファイルは次の起動時に読み込まれます。MIDI Debugger でメッセージを入力するときも、同じ名前が補完の候補に出ます。

MIDIFabric には、今のところ 31 台分のデバイス定義が付属しています。すべての定義は、検査ツールで構造と一貫性(ID、読み込み、CC と NRPN の番号と範囲、SysEx の形、メーカー ID)を確かめています。機器の実際の動作との対応は、メーカー資料との照合や実機での確認が別途必要です。opsix の CC の番号は Korg の資料と照合しましたが、実機ですべてのつまみを操作して確かめたわけではありません。

アプリを作り直さずに定義を追加する

opsix の CC 102 が「OP1 Level」であるという対応は、アプリのコードから切り離しています。

そのため、定義を直したり足したりすると、アプリを作り直さなくても、モニタの表示も MIDI Debugger の補完も変わります。アプリの中で保存すれば、その場で変わります。付属の定義と利用者が書いた定義は同じ形式で、同じ仕組みで読み込まれます。手元の機材の定義が付属していなくても、自分で書けば、付属の機材と同じように扱えます。

デバイス定義は、MIDIFabric とは別に、オープンソースで公開する予定です。アプリのコードから切り離したデータなので、MIDIFabric 以外の道具からも使えるように設計しています。

エフェクトも同じ考え方です。付属のものも利用者が作るものも、同じ Lua のプログラムです(「MIDIFabric と AI を MCP でつなぐ」)。デバイス定義もエフェクトも、付属のものを参考にして追加・編集できるようにしています。

同じ考え方を SysEx に広げたのが、「JUNO-D の SysEx を名前で送り、名前で読む」です。

← 開発ノートの一覧