MIDI 2.0 on Linuxのページ を見ながら、MIDI2.0に対応したデバイスをRaspberry Pi Zero 2W(以下Zero2Wと略します)上に構築してみます。 Zero2Wを選択した理由はUbuntuが動作すること、OTGモードでUSB-MIDIのデバイス としてPCから認識できるように設定できることにあります。
OSとしては、Ubuntu Server 24.10 (64bit)をインストールしました。
> uname -a Linux Inspiron 6.8.0-50-generic #51~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Thu Nov 21 12:03:03 UTC 2 x86_64 x86_64 x86_64 GNU/Linux
さらに、「Raspberry Piの初期設定」のページ にも書きましたが、それに加えていくつかのPackageをインスツールしています。別途記載したいと思いますが、ALSAのバージョンを 更新するための準備です。
> sudo apt install net-tools > sudo apt install gcc g++ make cmake > sudo apt install libi2c-dev git-core > sudo apt install libasound2 libasound-dev > sudo apt install alsa-utils pmidi > sudo apt install pkgconf bzip2 automake > sudo apt install libncurses5-dev libncursesw5-dev > sudo apt install ncurses-term libgtk2.0-dev
以下の設定はSuper Userになっていた方が楽なので設定します。
> sudo passwd root [sudo] password for user: xxxxxxxx New password: yyyyyyyy Retype new password: yyyyyyyy > su Password: yyyyyyyy
MIDI2 USB Gadget Function Driver の項目を見ながらMIDI2.0デバイスの設定します。
> modprobe libcomposite
> cd /sys/kernel/config > mkdir usb_gadget/g1 > cd usb_gadget/g1 > mkdir configs/c.1 > mkdir functions/midi2.usb0 > chmod 666 idProduct > chmod 666 idVendor > echo 0x0004 > idProduct > echo 0x17b3 > idVendor > mkdir strings/0x409 > chmod 666 strings/0x409/manufacturer > chmod 666 strings/0x409/product > chmod 666 strings/0x409/serialnumber > echo "ACME Enterprises" > strings/0x409/manufacturer > echo "ACMESynth" > strings/0x409/product > echo "ABCD12345" > strings/0x409/serialnumber > mkdir configs/c.1/strings/0x409 > chmod 666 configs/c.1/strings/0x409/configuration > chmod 666 configs/c.1/MaxPower > echo "Monosynth" > configs/c.1/strings/0x409/configuration > echo 120 > configs/c.1/MaxPower
> chmod 666 functions/midi2.usb0/iface_name > chmod 666 functions/midi2.usb0/ep.0/ep_name > chmod 666 functions/midi2.usb0/ep.0/product_id > echo "ACMESynth" > functions/midi2.usb0/iface_name > echo "ACMESynth" > functions/midi2.usb0/ep.0/ep_name > echo "ABCD12345" > functions/midi2.usb0/ep.0/product_id > chmod 666 functions/midi2.usb0/ep.0/family > chmod 666 functions/midi2.usb0/ep.0/model > chmod 666 functions/midi2.usb0/ep.0/manufacturer > chmod 666 functions/midi2.usb0/ep.0/sw_revision > echo 0x0123 > functions/midi2.usb0/ep.0/familyz > echo 0x4567 > functions/midi2.usb0/ep.0/model > echo 0x123456 > functions/midi2.usb0/ep.0/manufacturer > echo 0x12345678 > functions/midi2.usb0/ep.0/sw_revision
> chmod 666 functions/midi2.usb0/ep.0/protocol > echo 2 > functions/midi2.usb0/ep.0/protocol
> chmod 666 functions/midi2.usb0/ep.0/block.0/name > chmod 666 functions/midi2.usb0/ep.0/block.0/first_group > chmod 666 functions/midi2.usb0/ep.0/block.0/num_groups > echo "Monosynth" > functions/midi2.usb0/ep.0/block.0/name > echo 0 > functions/midi2.usb0/ep.0/block.0/first_group > echo 1 > functions/midi2.usb0/ep.0/block.0/num_groups
> ln -s functions/midi2.usb0 configs/c.1
> ls /sys/class/udc 3f980000.usb
> chmod 666 UDC > echo 3f980000.usb > UDC
> cat /proc/asound/cards .... 1 [Gadget ]: f_midi2 - MIDI 2.0 Gadget MIDI 2.0 Gadget
MACにZero2Wを接続してデバイスがMIDI2.0デバイスとして認識できるかをチェックします、 MACのUSBポートと、Raspberry Pi Zero 2WのUSBポートを接続します。
私の場合、PWR INのUSBケーブルを抜いてUSBポートに接続しました。 そのため、上で設定した構成が消えてしまいましたので、立ち上がった後でもう一度上の構成設定を行います。 シェルスクリプトを書いておくと良いと思います。
Audio MIDI設定を開きます。
「表示」メニューから「MIDIスタジオを表示」を選択します。
下のようなアイコンが見えると思います。上で設定した”ACMESynth"という名前のProductと、 "Monosynth" というポートと並んで、MIDI2.0というポートが設置されていることが確認できます。
MIDI2.0プロトコルを送受信するテストは以降に行いたいと思います。