While the Roli Dashboard application would be great on Linux, it does seem possible to at least get the device working as a generic MIDI over USB input. The question is: What kernel modules are needed?
Roli docs state that the Roli Seaboard (and block) are supported as a standard USB Class Compliant MIDI devices. I decided to try testing out the Roli Seaboard block as a MIDI controller for an embedded system Synth I'm building. The OS for this system is pretty minimal, so it's expected that it won't work out of the box without installing the right kernel modules.
So far, on this system I have installed kernel modules for a legacy audio device (Traktor Audio 2 version 1 Native Instruments does not support this anymore on macOS), and tested out the sound card with a software synth to play MIDI from a file. This part works... now I just need to hook up a MIDI controller.
So, when I plug it into this Intel x86 embedded platform's USB host port and here's what I see:
# uname -a Linux 96e4dfb 4.16.0-edison-standard #1 SMP Tue Mar 26 12:11:34 UTC 2019 i686 i686 i686 GNU/Linux # udevadm monitor monitor will print the received events for: UDEV - the event which udev sends out after rule processing KERNEL - the kernel uevent KERNEL[481.844756] remove /devices/pci0000:00/0000:00:11.0/dwc3.1.auto/xhci-hcd.2.auto/usb1/1-1/1-1.1/1-1.1.3/1-1.1.3:1.0 (usb) KERNEL[481.847248] remove /devices/pci0000:00/0000:00:11.0/dwc3.1.auto/xhci-hcd.2.auto/usb1/1-1/1-1.1/1-1.1.3/1-1.1.3:1.1 (usb) KERNEL[481.855561] remove /devices/pci0000:00/0000:00:11.0/dwc3.1.auto/xhci-hcd.2.auto/usb1/1-1/1-1.1/1-1.1.3 (usb) UDEV [481.868618] remove /devices/pci0000:00/0000:00:11.0/dwc3.1.auto/xhci-hcd.2.auto/usb1/1-1/1-1.1/1-1.1.3/1-1.1.3:1.0 (usb) UDEV [481.872360] remove /devices/pci0000:00/0000:00:11.0/dwc3.1.auto/xhci-hcd.2.auto/usb1/1-1/1-1.1/1-1.1.3/1-1.1.3:1.1 (usb) UDEV [481.888295] remove /devices/pci0000:00/0000:00:11.0/dwc3.1.auto/xhci-hcd.2.auto/usb1/1-1/1-1.1/1-1.1.3 (usb) KERNEL[485.955485] add /devices/pci0000:00/0000:00:11.0/dwc3.1.auto/xhci-hcd.2.auto/usb1/1-1/1-1.1/1-1.1.3 (usb) KERNEL[485.956831] add /devices/pci0000:00/0000:00:11.0/dwc3.1.auto/xhci-hcd.2.auto/usb1/1-1/1-1.1/1-1.1.3/1-1.1.3:1.0 (usb) KERNEL[485.958499] add /devices/pci0000:00/0000:00:11.0/dwc3.1.auto/xhci-hcd.2.auto/usb1/1-1/1-1.1/1-1.1.3/1-1.1.3:1.1 (usb) UDEV [485.977776] add /devices/pci0000:00/0000:00:11.0/dwc3.1.auto/xhci-hcd.2.auto/usb1/1-1/1-1.1/1-1.1.3 (usb) UDEV [486.001505] add /devices/pci0000:00/0000:00:11.0/dwc3.1.auto/xhci-hcd.2.auto/usb1/1-1/1-1.1/1-1.1.3/1-1.1.3:1.0 (usb) UDEV [486.010689] add /devices/pci0000:00/0000:00:11.0/dwc3.1.auto/xhci-hcd.2.auto/usb1/1-1/1-1.1/1-1.1.3/1-1.1.3:1.1 (usb)
So, USB device add and remove events working through UDEV... and the kernel knows about the device.
The `lsusb` command lists the device as:
Bus 001 Device 011: ID 2af4:0700
So far, I have just loaded these modules for the Native Instruments sound card:
# lsmod Module Size Used by snd_usb_caiaq 40960 0 snd_seq_midi 16384 0 snd_seq_midi_event 16384 1 snd_seq_midi snd_hwdep 16384 0 snd_pcm 73728 1 snd_usb_caiaq snd_rawmidi 24576 2 snd_seq_midi,snd_usb_caiaq
Kernel source directory for these compiled modules has these config options set, just for enabling this "snd-usb-caiaq" module for the Traktor Audio 2 (and other Native Instruments devices):
/usr/src/kernel-source-4.16.0-edison-standard# grep -i midi .config CONFIG_SND_RAWMIDI=m CONFIG_SND_SEQ_MIDI_EVENT=m CONFIG_SND_SEQ_MIDI=m # CONFIG_SND_VIRMIDI is not set
The device is not yet working, and ALSA does not detect any MIDI devices:
# amidi -l Dir Device Name
So, it looks like we need to compile the kernel module for "snd-usb-audio", which is supposed to support MIDI too. Here we go...
cd /usr/src/kernel-source-4.16.0-edison-standard/ make menuconfig # Go through the menu, I selected: # "Device drivers" -> "Sound card support" -> "Advanced Linux Sound Architecture" -> "USB Sound devices" -> "USB Audio/MIDI Driver" # I set USB Audio/MIDI driver = <M> (module) # Or... you can just go edit `.config` and add line (but make sure also CONFIG_SND_USB=y OR m): CONFIG_SND_USB_AUDIO=m # Now run modules_prepare (if you haven't already) make modules_prepare # To compile just the one we want, and install it to a separate path (root FS is mounted ReadOnly on many embedded systems) make INSTALL_MOD_PATH=/data/modules M=sound/ modules ## And here we go... CC [M] sound//usb/card.o CC [M] sound//usb/clock.o CC [M] sound//usb/endpoint.o CC [M] sound//usb/format.o CC [M] sound//usb/helper.o CC [M] sound//usb/mixer.o CC [M] sound//usb/mixer_quirks.o CC [M] sound//usb/mixer_scarlett.o CC [M] sound//usb/mixer_us16x08.o CC [M] sound//usb/pcm.o CC [M] sound//usb/proc.o CC [M] sound//usb/quirks.o CC [M] sound//usb/stream.o LD [M] sound//usb/snd-usb-audio.o CC [M] sound//usb/midi.o LD [M] sound//usb/snd-usbmidi-lib.o CC [M] sound//usb/caiaq/device.o CC [M] sound//usb/caiaq/audio.o CC [M] sound//usb/caiaq/midi.o CC [M] sound//usb/caiaq/control.o CC [M] sound//usb/caiaq/input.o LD [M] sound//usb/caiaq/snd-usb-caiaq.o Building modules, stage 2. MODPOST 8 modules CC sound//usb/caiaq/snd-usb-caiaq.mod.o LD [M] sound//usb/caiaq/snd-usb-caiaq.ko CC sound//usb/snd-usb-audio.mod.o LD [M] sound//usb/snd-usb-audio.ko CC sound//usb/snd-usbmidi-lib.mod.o LD [M] sound//usb/snd-usbmidi-lib.ko
Then, install modules to our custom path (remember root FS is ReadOnly for me. On normal systems you will not need `INSTALL_MOD_PATH`) :
make INSTALL_MOD_PATH=/data/modules M=sound/ modules_install INSTALL sound//core/seq/snd-seq-midi-event.ko INSTALL sound//core/seq/snd-seq-midi.ko INSTALL sound//core/snd-hwdep.ko INSTALL sound//core/snd-pcm.ko INSTALL sound//core/snd-rawmidi.ko INSTALL sound//usb/caiaq/snd-usb-caiaq.ko INSTALL sound//usb/snd-usb-audio.ko INSTALL sound//usb/snd-usbmidi-lib.ko DEPMOD 4.16.0-edison-standard
Ok, now we have some `.ko` kernel module files!
tree /data/modules/ /data/modules/ ├── balena-intel-edison-2.31.5+rev1-v9.11.3-kernel-modules.tar.gz └── lib └── modules └── 4.16.0-edison-standard └── extra ├── caiaq │ └── snd-usb-caiaq.ko ├── core │ ├── seq │ │ ├── snd-seq-midi-event.ko │ │ └── snd-seq-midi.ko │ ├── snd-hwdep.ko │ ├── snd-pcm.ko │ └── snd-rawmidi.ko ├── seq │ ├── snd-seq-midi-event.ko │ └── snd-seq-midi.ko ├── snd-hwdep.ko ├── snd-pcm.ko ├── snd-rawmidi.ko └── usb ├── caiaq │ └── snd-usb-caiaq.ko ├── snd-usb-audio.ko └── snd-usbmidi-lib.ko 10 directories, 15 files
Let's load them up. The easiest way is to use `modprobe`, which handles loading kernel module dependencies in the proper order. However, since I can't write to `/lib/` on this system.. we have to do it the slightly harder way with `insmod`:
insmod /data/modules/lib/modules/4.16.0-edison-standard/extra/snd-rawmidi.ko insmod /data/modules/lib/modules/4.16.0-edison-standard/extra/snd-pcm.ko insmod /data/modules/lib/modules/4.16.0-edison-standard/extra/snd-hwdep.ko insmod /data/modules/lib/modules/4.16.0-edison-standard/extra/seq/snd-seq-midi-event.ko insmod /data/modules/lib/modules/4.16.0-edison-standard/extra/seq/snd-seq-midi.ko insmod /data/modules/lib/modules/4.16.0-edison-standard/extra/caiaq/snd-usb-caiaq.ko insmod /data/modules/lib/modules/4.16.0-edison-standard/extra/usb/snd-usbmidi-lib.ko insmod /data/modules/lib/modules/4.16.0-edison-standard/extra/usb/snd-usb-audio.ko lsmod | grep snd_ snd_usb_audio 131072 0 snd_usbmidi_lib 24576 1 snd_usb_audio snd_usb_caiaq 40960 0 snd_seq_midi 16384 0 snd_seq_midi_event 16384 1 snd_seq_midi snd_hwdep 16384 1 snd_usb_audio snd_pcm 73728 2 snd_usb_audio,snd_usb_caiaq snd_rawmidi 24576 3 snd_seq_midi,snd_usbmidi_lib,snd_usb_caiaq
Finally, we can see these modules are loaded and ALSA sees the MIDI device:
amidi -l Dir Device Name IO hw:1,0,0 Seaboard BLOCK MIDI 1 cat /proc/asound/cards 0 [TraktorAudio2 ]: snd-usb-caiaq - Traktor Audio 2 Native Instruments Traktor Audio 2 (usb-xhci-hcd.2.auto-1.2) 1 [BLOCK ]: USB-Audio - Seaboard BLOCK ROLI Ltd. Seaboard BLOCK at usb-xhci-hcd.2.auto-1.1.3, full speed aconnect -o client 14: 'Midi Through' [type=kernel] 0 'Midi Through Port-0'
Notes:
rsync -av /lib/modules/ /data/lib/modules/ rsync -av /data/modules/lib/modules/ /data/lib/modules/ depmod -b /data/ modprobe -d /data/ snd-usb-audio modprobe -d /data/ snd-usb-caiaq
Hope this gets those who were having problems initially get unstuck & start playing around with Roli blocks on LInux!
Good evening Sean and other fellow Linux users, I also am mostly a GNU/Linux user and I can't wait for the moment I'll be able to ditch Windows to use my Seaboard.
A few months ago I've been working on a project using Google Chrome's MIDI APIs which is compatible with the Roli Seaboard block and might be compatible with other Seaboards (I just own the block at the moment) which works on Android, GNU/Linux and more or less any kind of environment running Chrome.
It's clearly just a proof of concept I use to play along when I listen to music, but If you want to try it it's right there: https://lp1dev.github.io/Surfboard/ and if an engineer, designer or developer or anyone that might be able to add something to the project, it's Free Software (MIT) and everyone is welcome to contribute (https://github.com/lp1dev/Surfboard)!
Have a nice day!
Cheers-= Maybe you should say its Mac only on the web site, I spent ages looking for the windows version! :-(
Thanks Sean, we're looking at updating information as soon as possible.
Hi Alex, we'll be supporting ROLI Connect on Mac and Windows for the initial release, but we appreciate your feedback and will consider further platform support in the future.
Where is the windows version?
Hi Sean, the Windows version of ROLI Connect is still in development, but we're aiming to release this soon in a future update, alongside support for ROLI Studio Player on Windows.
Alex Enkerli
4 people like this idea