MIDI 2.0ピッチベンドの送受信

MIDI 1.0のピッチベンドは14bit、それに対してMIDI 2.0のピッチベンドは32ビットです。

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

送信プログラム

送信プログラムの詳細はこちらの記事を参照してください。 次のピッチベンドは0x80000000がセンターで、ベンドのかかっていない状態 を意味しています。下のプログラムでは、このセンター0x80000000の前後の値を 送信するように作っています。

m->hdr.type=SND_UMP_MSG_TYPE_MIDI2_CHANNEL_VOICE;
m->hdr.group=0;
m->hdr.channel=0;
m->hdr.status=SND_UMP_MSG_PITCHBEND;
m->channel_pressure.data = 0x80000000-5000000;
                
for(int j=0; j<100; j++){
    m->channel_pressure.data += 100000;
    snd_seq_ump_event_output(seq_handle,&event);
    snd_seq_drain_output(seq_handle);
    usleep(250000);
}

送信する値を抜粋して記載しておきます。

7ff6d840
7ff85ee0
7ff9e580
7ffb6c20
7ffcf2c0
7ffe7960
80000000
800186a0
80030d40
800493e0
80061a80
8007a120
800927c0

Cubase14での録音


十進数で100,000づつ加算して受け取っているピッチベンドは、 小数点以下3桁で表示すると約0.005変化していることがわかります。 MIDI 2.0では精度高くピッチベンドを送ることができます。

Cubase14での再生

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

> aseqdump -p 20:0 -u 2    
20:1   Group  0, Pitch Bend value 0x7ff6d840
20:1   Group  0, Pitch Bend value 0x7ff85ee0
20:1   Group  0, Pitch Bend value 0x7ff9e580
20:1   Group  0, Pitch Bend value 0x7ffb6c20
20:1   Group  0, Pitch Bend value 0x7ffcf2c0
20:1   Group  0, Pitch Bend value 0x7ffe7960
20:1   Group  0, Pitch Bend value 0x80000000
20:1   Group  0, Pitch Bend value 0x800186a0
20:1   Group  0, Pitch Bend value 0x80030d40
20:1   Group  0, Pitch Bend value 0x800493e0
20:1   Group  0, Pitch Bend value 0x80061a80
20:1   Group  0, Pitch Bend value 0x8007a120
20:1   Group  0, Pitch Bend value 0x800927c0

valueの項が送信したピッチベンド値と一致しています。Cubase 14はMIDI 2.0 のピッチベンド値を 32ビットで録音・再生してくれていることがわかります。