JackAudio Setup for NI3 Dance
All free and open-source software, MIDI and Audio routed with Jack.
I presented Vecosek and Vimebac a couple of years ago at OCaml-2018 and FARM-2018. Afterwards, I swore to some people I'd describe a bit more my particular usage within NI3 Dance; so here it is.
I've never managed to make “native” session management work for me reliably. I need my setup to be resilient to to missing items or some changes in configuration (e.g. presence or not of MIDI/Audio extra hardware, like my “Looptimus”).
⇒ My session management is GNU-Screen 👴
A script just starts the various applications like this:
screen -S ni3_session -X screen -t Sampson ./start_sampson
It seems archaic but it provides easy logging and easier killing.
I start everything 4 phases called manually (they are just different key combinations using Comk ☺).
The first only starts
QJackCtl
(rncbc/qjackctl
); it
can be useful to change the configuration before starting the
rest.
Starting jackd
can sometimes just fail, it's nice to have a simple setup to
debug.
The second start all the small applications that can live happily by themselves:
- Drumkv1 “is an old-school all-digital drum-kit sampler synthesizer with stereo fx.”
- ZynAddSubFx is a famous synth in the Music-on-Linux community.
- Sampson is a very simple command-line sampler, it is obscure and may be abandoned.
- a2jmidid is a bridge between ASLA-MIDI interfaces and Jack, it is useful to connect to MIDI hardware.
- Vimebac is the visual feedback, band conductor, and MIDI controller (written by me in OCaml).
The third stage only starts Ardour with a custom session. Ardour knows about its Jack-connections, so it's better if all other software is started by the time it initializes. It used here as a mixer and effects host, I use simple things from calf-studio-gear.
The last stage is often restarted and tweaked: it runs
Vecosek with a freshly generated
“scene” and then runs an OCaml script to connect the various
jack-endpoints (with the --start-hook
option).
I only ever use patchage to make nice screenshots:
We see a2jmidid
and Vimebac being control inputs for vecosek, itself connected
to MIDI-instruments as well as back to Vimebac for visual feedback. Then the
flow leaves the MIDI-world (in red) onto the
Audio world (green) for mixing, effects, and
output (“system playback”).
At some point, instead of Ardour, it used to be Non Mixer together with the Calf plugins in standalone mode. But Ardour, while heavy and capricious, simplifies a lot, and provides quick “record snapshot” functionality to get a jam on tape.
There are still a couple of pain points:
- The whole thing is still a bit annoying to kill, Ardour seems to really
dislike being quit improperly, and
jackd
needs to be shutdown explicitly. - The configuration of
jackd
is is hard to control, and even harder to automate and make portable. Next thing to do would be to figure out how to configure it manually (incl. to automate the sound-card choice) and manage the jack-server process separately instead of letting QJackCtl start/stop it.
After 8 years of blograstination, this is post #3 of my attempt at not getting too fast lagging behind on the #100DaysToOffload
“challenge” … Let's see where this goes.