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);
Cubase 14では受け取ったメッセージを分解して保存しています。
上で録音した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とプログラムチェンジのやり取りをする時には工夫が必要になります。