MIDIチャンネルメッセージのプレッシャーには2種類あります。 一つはポリフォニックキープレッシャー、もう一つはチャンネルプレッシャーです。 電子楽器では鍵盤を叩いた後、鍵盤を押し込む強さで音色、音量を変更できるモノがあります。 チャンネルプレッシャーは基本的に全部の鍵盤に一つの情報を送信します。 ポリフォニックキープレッシャーは、鍵盤ごとに押し込んだ情報を送信します。 もっぱら、ポリフォニックキープレッシャーの方が指ごとに音色、音量を 変化させることができrので、より細やかな表現ができます。 どちらの情報を出力することができるのかは業電子楽器のハードウェアに寄っています。
MIDI 2.0プロトコルでは両者のメッセージとも、 MIDI1.0では7bitの精度であった プレッシャー値が 32ビット精度に拡張されています。 ポリフォニックキープレッシャーとチャンネルプレッシャーの違いは、 3バイト目にキーナンバーが入っているか、いないかです。
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_POLY_PRESSURE; m->poly_pressure.data = 0x12345678; for(int j=0; j<100; j++){ m->poly_pressure.note =0x10+j, m->poly_pressure.data += 0xFFFF; snd_seq_ump_event_output(seq_handle,&event); snd_seq_drain_output(seq_handle); usleep(250000); }
送信されるコントロールチェンジの値の末尾の20個を以下に記載します。
0x2855627 0x2865626 0x2875625 0x2885624 0x2895623 0x28a5622 0x28b5621 0x28c5620 0x28d561f 0x28e561e 0x28f561d 0x290561c 0x291561b 0x292561a 0x2935619 0x2945618 0x2955617 0x2965616 0x2975615 0x2985614
Cubase 14の設定はこちらの記事を参照してください。ただし、編集操作MIDIの 高解像度表示形式を小数点以下3桁に設定しています。
録音したMIDIデータをリストエディタで見ると以下のように、 32bitのプレッシャー値が、メイン値という欄に小数点以下3桁で表示されています。
上で録音したデータを再生し、Zero2Wで受信、aseqdumpで表示しています。 詳細はこちらの記事を参照してください。
> aseqdump -p 20:0 -u 2 Group 0, Poly pressure 0, note 96, value 0x12855627 Group 0, Poly pressure 0, note 97, value 0x12865626 Group 0, Poly pressure 0, note 98, value 0x12875625 Group 0, Poly pressure 0, note 99, value 0x12885624 Group 0, Poly pressure 0, note 100, value 0x12895623 Group 0, Poly pressure 0, note 101, value 0x128a5622 Group 0, Poly pressure 0, note 102, value 0x128b5621 Group 0, Poly pressure 0, note 103, value 0x128c5620 Group 0, Poly pressure 0, note 104, value 0x128d561f Group 0, Poly pressure 0, note 105, value 0x128e561e Group 0, Poly pressure 0, note 106, value 0x128f561d Group 0, Poly pressure 0, note 107, value 0x1290561c Group 0, Poly pressure 0, note 108, value 0x1291561b Group 0, Poly pressure 0, note 109, value 0x1292561a Group 0, Poly pressure 0, note 110, value 0x12935619 Group 0, Poly pressure 0, note 111, value 0x12945618 Group 0, Poly pressure 0, note 112, value 0x12955617 Group 0, Poly pressure 0, note 113, value 0x12965616 Group 0, Poly pressure 0, note 114, value 0x12975615 Group 0, Poly pressure 0, note 115, value 0x12985614
valueの項が送信したプレッシャー値と一致しています。Cubase 14はMIDI 2.0 はポリフォニックキープレッシャー メッセージのプレッシャー値を32ビットで録音・再生してくれていることがわかります。
送信プログラムは以下の通りです。プログラムは、ポリフォニックキープレッシャと同じです。
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_CHANNEL_PRESSURE; m->channel_pressure.data = 0x12345678; for(int j=0; j<100; j++){ m->poly_pressure.note =0x10+j, m->channel_pressure.data += 0xFFFF; snd_seq_ump_event_output(seq_handle,&event); snd_seq_drain_output(seq_handle); usleep(250000); }
Cubase 14での受診結果は以下の通りです。ポリフォニックキープレッシャと同様、32bitプレッシャ値に対応しています。