MIDI 2.0のメッセージにはMIDI 1.0のメッセージを拡張したもにと、 MIDI2.0になって新しく追加されたものがあります。レジスタードコントローラ、 アサイナブルコントローラはその一つです。両者とも(例えば音源の)パラメータを 制御するもので、7ビットのバンクと7ビットのインデックスでパラメータの種類を設定します。 バンクとインデックスで計16,384種類のパラーメータから1つを選択することができます。 それぞれのパラメータを32ビットで設定することができます。
別ページの実験と同様、Raspberry Pi Zero 2WをMIDI 2.0デバイスに設定し、 Cubase 14 Pro(体験版)で録音します。 新しいパラメータがCubase 14でどのように録音されるかを確かめます。
レジスタードコントローラの 送信には3つの情報、index, bank, dataを設定します。 以下は一例で、indexとdataをインクリメントしながら送信しています。
m->hdr.type=SND_UMP_MSG_TYPE_MIDI2_CHANNEL_VOICE; m->hdr.group=0; m->hdr.channel=0; m->hdr.status=SND_UMP_MSG_RPN; m->rpn.bank = 0x3F; m->rpn.index = 0x2E; m->rpn.data = 0x12345678; for(int j=0; j<100; j++){ m->rpn.index =0x10+j, m->rpn.data += 0xFFFF; snd_seq_ump_event_output(seq_handle,&event); snd_seq_drain_output(seq_handle); usleep(250000); }
送信する値の先頭を抜粋して記載しておきます。
bank index data 0x3F 0x10 0x12355677 0x3F 0x11 0x12365676 0x3F 0x12 0x12375675 0x3F 0x13 0x12385674
MIDI 2.0のメッセージは以下のようになります。
40203F10 12355677 40203F11 12365677 40203F12 12375675 40203F13 12385674
Cubaseでは1つのメッセージが4つのコントロールチェンジメッセージに分割されて保存されます。 RPN MSB, RPN LSB, DataEnt MSB, DataEnt Labs の4つです。RPNはレジスタードパラメータの、DataEnt はData Entryの略です。
Cubaseでは、MIDI 2.0の新しいメッセージを、MIDI 1.0で定義されているメッセージ (コントロールチェンジのRPNメッセージ)に展開して記録されたことがわかります。
Cubaseのリストエディタから、RPN MSBは64(すなわち0x3F)でメッセージのbankの値が、 RPN LSBは16(0x10)、17(0x11)、18(0x12)、19(0x13)とindexを受信しています。
Data Entryの9, 13は、送信したdataの上位14bitを表しています。 送信データは0x12385674ですので、上位14bitは以下のように抽出され、 9, 13(0x0D)が受信側で記録されています。
従ってCubase 14ではこのメッセージの32bitのデータは保持されず下位14bitが捨てられてしまっています。
アサイナブルコントローラの 送信もレジスタードコントローラと同様3つの情報、index, bank, dataを設定します。 プログラムは、statusにSND_UMP_MSG_NRPNを設定します。 ここではbankを0x7Fと設定しています。 後はレジスタードコントローラと同じです。
m->hdr.status=SND_UMP_MSG_NRPN; m->rpn.bank = 0x3F;
MIDI 2.0のメッセージは以下のようになります。
40307F10 12355677 40307F10 12355677 40307F11 12365676 40307F11 12365676
Cubaseでは1つのメッセージが4つのメッセージに分割されて保存されます。 レジスタードコントローラとの違いは、RPNでは無く、NRPN MSB, NRPN LSB すなわち、ノンレジスタード(すなわちアサイナブル)パラメータのコントロールチェンジで保存されます。