cev.sdf.org

About & contact, blog, blog archive, mastodon, now, or e-mail me: cev@sdf.org.


Renoise on FreeBSD

Posted 2017-02-11. Permalink. Tagged freebsd, linux, music, renoise.

Renoise 3.1 (Linux x86 Build) running on FreeBSD 11:

Renoise 3.1 running on FreeBSD

It's been known for some time that Renoise runs under the FreeBSD Linux compatibility layer. However, no-one (to my knowledge) had gotten audio to work. With the release of FreeBSD 11 and its Linux compat changes, I decided to give it a shot, and got it to work - with JACK audio.

In short:

  • Install linux-c7 metaport.
  • Procure a JACK server built for linux-c7 (find a binary or build it yourself in a VM).
  • Install the Linux JACK server in /compat/linux .
  • Edit $HOME/.jackdrc so it includes the full path of the Linux JACK server.
  • Run Renoise.

Explanation:

I used the linux-c7 meta-port to install CentOS 7.2.1511 compatibility. At this point Renoise Linux x86 runs, but without audio. Renoise Linux x64 didn't work, but I don't remember for what reason.

I tried to get ALSA sound working and simply could not. Then I tried getting Renoise (Linux) to connect to a FreeBSD native JACK server, and that didn't work either. It turns out that JACK clients won't connect to a JACK server built on a different operating system. So you have to run a JACK server compiled for Linux.

I built a 32bit CentOS VM, installed the necessary development tools, compiled the JACK server, packaged it and deployed it into my FreeBSD system's /compat/linux directory.

There are a few things to be aware of when building this Linux JACK server. First, make sure you enable the OSS driver (so it can talk to FreeBSD's OSS devices). Second, JACK requires a memory filesystem (tmpfs(5)) mounted at /dev/shm, or at another location configured at compile-time. Make sure to set that up. Finally be sure to compile JACK 1 and not 2; I used version 0.124.1.

Now JACK, and by extension Renoise, has to be made aware of the location of this alternate server. The standard method for this is $HOME/.jackdrc; see jackdrc(5). In my case, I added the line:

/compat/linux/usr/bin/jackd -r -d oss -C /dev/dsp2 -P /dev/dsp6

and that worked. dsp2 for capture, dsp6 for playback.

Unfortunately there is no MIDI support with this setup. I tried jack_umidi, but of course that program wouldn't talk to the JACK server compiled for Linux. Unless I can hack a version of jack_umidi that compiles in CentOS 7, or some kind of jack_umidi-like program that simulates an alsa midi device, then I think MIDI is simply off the table.

I think that's everything. It's been several months since I did this, so I may have forgotten a step. Hopefully this helps someone.