Start a new topic

Cross-Platform ROLI Connect

Any idea if we’ll ever get Linux or iOS versions of ROLI Connect, with fully crossplatform patches? Will soon try the ROLI Connect beta. https://roli.com/stories/roli-studio-player?utm_source=Master+ROLI+Creators+List&utm_campaign=1e05dfa7d1-EMAIL_CAMPAIGN_2018_09_04_04_07_COPY_01&utm_medium=email&utm_term=0_0b59ea513b-1e05dfa7d1-113249829&mc_cid=1e05dfa7d1&mc_eid=a3e990e49b Sounds fairly interesting as one MPE-savvy alternative to NKS. It also gives me a much better idea of the company’s strategy. Thing is, though, feature requests here reveal other sets of needs, including for cross-platform tools (especially iOS, Linux, and possibly Android). It’s kind of neat to have new ways to organize patches from one vendor’s synths on macOS and Windows. And, who knows, initiatives like Camelot may eventually contribute something to this emerging ecosystem. JUCE could also play a role. It’s just that, we (those you call “creators”) have broader needs.

2 people like this idea

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.

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.

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!

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:

  •  Most desktop system kernels will have these modules already available.  So you should just be able to run the `modprobe snd-usb-audio` command ... et voilà!
  • The synth software has to be connected (via `aconnect`) to the MIDI port (see: `man aconnect`).  If you're using Bitwig or some other DAW, the UI will have an equivalent method.
  • Note that the same rules apply as on Mac or Windows systems:  If the synth doesn't understand or work well with MPE, you will have mixed results.  Pay attention to the number of channels you have configured in Roli Dashboard before you plug your device into a Linux computer, so it's doing what you expect it to do.
  •  I could have still used `modprobe` in my case, but it requires copying all modules to a location that has been mounted read / write.  Since this is an SD card, and space is tight... I avoided that.  However, I could have done this:

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!


1 person likes this
Login to post a comment