MIDI 2.0コントロールチェンジの送受信

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
Cubase14での録音

Cubase 14の設定はこちらの記事を参照してください。ただし、編集操作MIDIの 高解像度表示形式を小数点以下3桁に設定しています。


録音したMIDIデータをリストエディタで見ると以下のように、 32bitのコントロールチェンジ値が、メイン値という欄に小数点以下3桁で表示されています。



Cubase14での再生

上で録音したデータを再生し、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ビットで録音・再生してくれていることがわかります。