scripted session management for linux audio




__________unique methods

__________channel methods

_______port groups

__________audio port groups

__________midi port groups

_______the table


The default preset is just an example, geared towards producing or playing sequenced music. Even if that's not what you're into, it might be a good starting point. Via the the -a /-m flags, chino slightly simplifies creation of new applications/methods from existing ones: We choose which library to derive the new one from and enter the desired method/application ID, then a library file gets prepared by appropriately renaming functions and variables, where possible.

At its core, the preset consists of a hardware Midi keyboard and a sequencer, driving some synths or samplers who's output is fed into a (virtual) eight channel mixer with two sends per channel. Next to the keyboard, there is a Midi controller connected to the mixer and to a couple of other applications. The number of channels or sends can easily be changed.

The Midi controller is also used to switch scenes of a little mididings router, routing the keyboard messages to one of sixteen outputs. That is done to correspond to the sixteen output ports of seq24 and non-sequencer.

The default preset should work without customisations if the soundcard has two playback ports named system:playback_1 and system:playback_2.

Here's what a basic session looks like, as shown by chino's session graph. Two instances of Yoshimi are assigned to the first two channels, and Jconvolver is assigned to the first effect channel:

ardour & seq24

It happens to be the case that the author himself mainly uses Seq24 and Ardour. Nevertheless, mainly to show off the benefits of having port groups, some other (less well tested) options are included: Non-Sequencer can replace Seq24, and a combination of Non-DAW, Non-Mixer and jm2cv can replace Ardour. In the end it looks like this:

ardour & seq24

Just for the fun of it, here's a small or a large screenshot of the corresponding qjackctl connections window—that's just sixteen channels, running on a netbook.

To give sort of a "specification" of the preset, the remainder of this page contains a short description of the methods, a list of port groups and port variables and a table including all supported applications.



unique methods
for audio and Midi hardware;
the least specialised method, for miscellaneous applications;
metering applications connected to the master out ports of a mixer.

channel methods
for single-voice synthesizers (or samplers etc.) with one mono or stereo audio output, to be connected in between a sequencer and a mixer;
for multi-voice synthesis environments with separate audio outputs for each voice, to be connected in between a sequencer and a mixer;
for DSSI plugins to be connected in between a sequencer and a mixer, the method uses ghostess as a host application;
for metering applications to be connected to a mixer output channel;
for standalone effect applications with mono or stereo inputs and outputs, to be inserted in between the mixer's effect sends and returns.


__________________________port groups

The integer values of N and K are determined by the application(s) providing the MIXER, REC and EFFBUS port group. The default values are N = 8 and K = 2. Application files for the channel methods depending on MIXER are present for up to 16 channels.

audio port groups and port variables

<suffix> is either missing or _L or _R for mono ports, both _L and _R for stereo ports.

mono or stereo soundcard capture ports
mono or stereo soundcard playback ports
N mixer bus inputs
N mixer bus outputs
the mixer's master bus inputs
the mixer's master bus outputs
N recording track inputs
N recording track outputs
master recording track inputs
master recording track outputs
K effect send ports for each of the N mixer channels
effect return ports for K effect channels
the return buses' output ports for K effect channels
outputs for N synth channels (if occupied)
outputs for N senv channels (if occupied)
outputs for N dssi channels (if occupied)
inputs for K effect channels (if occupied)
outputs for K effect channels (if occupied)
mono pink noise output
mono white noise output
outputs for N dssi channels (if occupied)
CV (audio) outputs for volume control of the mixer's N channel buses
CV (audio) output for volume control of the mixer's master bus
CV (audio) outputs for volume control of the effekt-mixer's K sends on N channels
CV (audio) outputs for volume control of the effect-mixer's K return buses


midi port groups and port variables

<suffix> is _A for Alsa-Midi or _J for Jack-Midi

one output from a hardware keyboard
input for the data that will be routed
input to control where the data is routed
M data outputs
M = {1, 2, 3 ... 16}
one output from a hardware controller
one sequencer input
an array of M sequencer outputs
M = {1, 2, 3 ... 16}
inputs for N synth channels (if occupied)
inputs for J running synthesis environments (if any)
one input for ghostess


__________________________the table

meth./appl. name meth./appl. ID program depends provides
audio Midi audio Midi
unique methods
hw uq_hw
stereo uqhw_stereo STEREO
uf6 uqhw_uf6 KBD
nano uqhw_nano CC
msc uq_msc
adingsroute uqms_adingsroute mididings KBD MDR
jdingsroute uqms_jdingsroute mididings KBD MDR
ardour2 uqms_ardour2 Ardour2 STEREO :CC MIXER EFFBUS REC
nonmix uqms_nonmix Non-Mixer STEREO CVM MIXER
jm2cvmix uqms_jm2cvmix jm2cv CC CVM
noneff uqms_noneff Non-Mixer MIXER CVE EFFBUS
jm2cveff uqms_jm2cveff jm2cv CC CVE
nondaw uqms_nondaw Non-DAW MIXER STEREO REC
seq24 uqms_seq24 Seq24 :KBD SEQ
nonseq uqms_nonseq Non-Sequencer :KBD SEQ
laborejo uqms_laborejo Laborejo :KBD SEQ
inconcert uqms_inconcert InConcert
gjackclock uqms_gjackclock GJackClock
gjacktransport uqms_gjacktransport GJackTransport
gjvidtimeline uqms_gjvidtimeline GJVidTimeline
xjadeo uqms_xjadeo Xjadeo
qmidiarp uqms_qmidiarp QMidiArp SEQ :SYNTH :SENV :DSSI
jmeters uqme_jmeters Jmeters MIXER
pdviz uqms_pdviz Pure Data MIXER :CC :SEQ :MDR
vkeybd uqms_vkeybd vkeybd KBD
meter uq_meter MIXER
jkmeter uqme_jkmeter Jkmeter
japa uqme_japa Japa NOISE
jaaa uqme_jaaa Jaaa
yass uqme_yass Yass
jnoisemeter uqme_jnoisemeter Jnoisemeter
channel methods
yoshimi chsy_yoshimi Yoshimi
ams chsy_ams ALSA Modular Synth
amsynth chsy_amsynth amSynth
phasex chsy_phasex Phasex
zynjacku chsy_zynjacku zynjacku
aeolus chsy_aeolus Aeolus
setbfree chsy_setbfree setBfree
azr3 chsy_azr3 AZR-3 [JACK]
drumkv1 chsy_drumkv1 drumkv1
samplv1 chsy_samplv1 samplv1
synthv1 chsy_synthv1 synthv1
mx44 chsy_mx44 Mx44
pd chse_pd Pure Data
tapeutape chse_tapeutape tapeutape
trantape chse_trantape tranches and tapeutape TRTA MIXER :REC TRTA TRTA TRTA
qsampler chse_qsampler QSampler
fluidsynth chds_fluidsynth FluidSynth-DSSI
hexter chds_hexter hexter
karplong chds_karplong karplong
ltsynth chds_ltsynth less_trivial_synth
nekobee chds_nekobee nekobee
sineshaper chds_sineshaper sineshaper
tsampler chds_tsampler trivial_sampler
tsynth chds_tsynth trivial_synth
whysynth chds_whysynth WhySynth
xsynth chds_xsynth xsynth-dssi
meter ch_meter MIXER
jkmeter chme_jkmeter Jkmeter
japa chme_japa Japa
jaaa chme_jaaa Jaaa
yass chme_yass Yass
jnoisemeter chme_jnoisemeter Jnoisemeter
effect ch_effect EFFBUS EFFECT
zitarev1 chef_zitarev1 zita-rev1
jconvolver chef_jconvolver Jconvolver
jackrack chef_jackrack JACK Rack CC
pd chef_pd Pure Data CC
ams chef_ams ALSA Modular Synth CC
lv2rack chef_lv2rack lv2rack
freqtweak chef_freqtweak FreqTweak