MIDI 2.0プロトコルでは MIDI1.0では7bitの精度であったコントロールチェンジメッセージが 32ビット精度に拡張されています。
Raspberry Pi Zero 2WをMIDI 2.0デバイスに設定し、 Cubase 14 Pro(体験版)で録音します。 さらに、Cubase 14再生しZero 2Wで受信します。 これにより、32bitのコントロールチェンジがUSB-MIDIで送受信でき、 さらに、Cubase 14できちんと録音することができることを確認します。
送信プログラムの詳細はこちらの記事を参照してください。 次のプログラムではコントロールチェンジを250msecごとに100回送信します。 初期値を0x12345678とし、1回ごとに0xFFFFインクリメントしています。
snd_ump_msg_midi2_t *m = (snd_ump_msg_midi2_t *)&event.ump; m->hdr.type=SND_UMP_MSG_TYPE_MIDI2_CHANNEL_VOICE; m->hdr.group=0; m->hdr.channel=0; m->hdr.status=SND_UMP_MSG_CONTROL_CHANGE; m->control_change.data = 0x12345678; for(int j=0; j<100; j++){ m->control_change.index =0x10+j, m->control_change.data += 0xFFFF; snd_seq_ump_event_output(seq_handle,&event); snd_seq_drain_output(seq_handle); usleep(250000); }
送信されるコントロールチェンジの値の先頭の20個を以下に記載します。
0x12355677 0x12365676 0x12375675 0x12385674 0x12395673 0x123a5672 0x123b5671 0x123c5670 0x123d566f 0x123e566e 0x123f566d 0x1240566c 0x1241566b 0x1242566a 0x12435669 0x12445668 0x12455667 0x12465666 0x12475665 0x12485664
Cubase 14の設定はこちらの記事を参照してください。ただし、編集操作MIDIの 高解像度表示形式を小数点以下3桁に設定しています。
録音したMIDIデータをリストエディタで見ると以下のように、 32bitのコントロールチェンジ値が、メイン値という欄に小数点以下3桁で表示されています。
上で録音したデータを再生し、Zero2Wで受信、aseqdumpで表示しています。 詳細はこちらの記事を参照してください。
> aseqdump -p 20:0 -u 2 Group 0, Control change 0, controller 16, value 0x12355677 Group 0, Control change 0, controller 17, value 0x12365676 Group 0, Control change 0, controller 18, value 0x12375675 Group 0, Control change 0, controller 19, value 0x12385674 Group 0, Control change 0, controller 20, value 0x12395673 Group 0, Control change 0, controller 21, value 0x123a5672 Group 0, Control change 0, controller 22, value 0x123b5671 Group 0, Control change 0, controller 23, value 0x123c5670 Group 0, Control change 0, controller 24, value 0x123d566f Group 0, Control change 0, controller 25, value 0x123e566e Group 0, Control change 0, controller 26, value 0x123f566d Group 0, Control change 0, controller 27, value 0x1240566c Group 0, Control change 0, controller 28, value 0x1241566b Group 0, Control change 0, controller 29, value 0x1242566a Group 0, Control change 0, controller 30, value 0x12435669 Group 0, Control change 0, controller 31, value 0x12445668 Group 0, Control change 0, controller 32, value 0x12455667 Group 0, Control change 0, controller 33, value 0x12465666 Group 0, Control change 0, controller 34, value 0x12475665 Group 0, Control change 0, controller 35, value 0x12485664
valueの項が送信したコントロールチェンジ値と一致しています。Cubase 14はMIDI 2.0 のコントロールチェンジ値を 32ビットで録音・再生してくれていることがわかります。