MIDI 2.0プログラムチェンジの送受信

MIDI 1.0のプログラムチェンジは バンクセレクトLSB、バンクセレクトMSB、プログラムチェンジの 3つのイベントの組み合わせで成り立っています。 MIDI 2.0ではこれらのメッセージが1つのメッセージで送信することができます。



別ページの実験と同様、Raspberry Pi Zero 2WをMIDI 2.0デバイスに設定し、 Cubase 14 Pro(体験版)で録音します。 さらに、Cubase 14再生しZero 2Wで受信します。 これにより、MIDI 2.0プログラムチェンジがどのように Cubase 14とやりとりできるのか?を確認します。

送信プログラム

以下のプログラムでm->program_change.bank_validは、メッセージが3つの情報を 持っていることを示すフラグです。

送信プログラムの詳細はこちらの記事を参照してください。

m->hdr.status = SND_UMP_MSG_PROGRAM_CHANGE;
m->program_change.program=0x23;     // = 103D
m->program_change.bank_valid=1;
m->program_change.bank_msb=0x45;    // = 69D
m->program_change.bank_lsb=0x67;    // = 23D
snd_seq_ump_event_output(seq_handle, &event);
snd_seq_drain_output(seq_handle);
Cubase14での録音


Cubase 14では受け取ったメッセージを分解して保存しています。

Cubase14での再生

上で録音した3つのデータを再生し、Zero2Wで受信、aseqdumpで表示しています。

> aseqdump -p 20:0 -u 2    
20:1   Group  0, Control change          0, controller 0, value 0x8a28a28a
20:1   Group  0, Control change          0, controller 32, value 0xcf3cf3cf
20:1   Group  0, Program change          0, program 35

バンクセレクトLSBとMSBの値が32bitに変換されています。そこで、これらの値は7bitに変換します。 変換するには以下のようにaseqdumpを使います。

> aseqdump -p 20:0 -u 1    
20:1   Group  0, Control change          0, controller 32, value 103 //0x67
20:1   Group  0, Control change          0, controller 0, value 69   //0x45
20:1   Group  0, Program change          0, program 35               //0x23

Cubase 14とプログラムチェンジのやり取りをする時には工夫が必要になります。