scripted session management for linux audio

__________________________TOC

_______introduction

_______methods

__________unique methods

__________channel methods

_______port groups

__________audio port groups

__________midi port groups

_______the table



__________________________introduction

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.


^
TOC |

__________________________methods


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

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

^
TOC |

__________________________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.

STEREO
${STEREO_AIN<suffix>}
mono or stereo soundcard capture ports
${STEREO_AOUT<suffix>}
mono or stereo soundcard playback ports
MIXER
${MIXER_CH_AIN<suffix>[<N>]}
N mixer bus inputs
${MIXER_CH_AOUT<suffix>[<N>]}
N mixer bus outputs
${MIXER_MASTER_AIN<suffix>}
the mixer's master bus inputs
${MIXER_MASTER_AOUT<suffix>}
the mixer's master bus outputs
REC
${REC_CH_AIN<suffix>[<N>]}
N recording track inputs
${REC_CH_AOUT<suffix>[<N>]}
N recording track outputs
${REC_MASTER_AIN<suffix>}
master recording track inputs
${REC_MASTER_AOUT<suffix>}
master recording track outputs
EFFBUS
${EFFBUS_SEND<suffix>[<K>,<N>]}
K effect send ports for each of the N mixer channels
${EFFBUS_RETURN<suffix>[<K>]}
effect return ports for K effect channels
${EFFBUS_RETURN_AOUT<suffix>[<K>]}
the return buses' output ports for K effect channels
SYNTH
${SYNTH_AOUT<suffix>[<N>]}
outputs for N synth channels (if occupied)
SENV
${SENV_AOUT<suffix>[<N>]}
outputs for N senv channels (if occupied)
DSSI
${DSSI_AOUT<suffix>[<N>]}
outputs for N dssi channels (if occupied)
EFFECT
${EFFECT_AIN<suffix>[<K>]}
inputs for K effect channels (if occupied)
${EFFECT_AOUT<suffix>[<K>]}
outputs for K effect channels (if occupied)
NOISE
${NOISE_PINK}
mono pink noise output
${NOISE_WHITE}
mono white noise output
DSSI
${DSSI_AOUT<suffix>[<N>]}
outputs for N dssi channels (if occupied)
CVMIX
${CVMX_CH_CVOUT[<N>]}
CV (audio) outputs for volume control of the mixer's N channel buses
${CVMX_MASTER_CVOUT}
CV (audio) output for volume control of the mixer's master bus
CVEFF
${CVEFF_SEND_CVOUT[<K>,<N>]}
CV (audio) outputs for volume control of the effekt-mixer's K sends on N channels
${CVMX_MASTER_CVOUT[<K>]}
CV (audio) outputs for volume control of the effect-mixer's K return buses

^
TOC |

midi port groups and port variables

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

KBD
${KBD_MOUT<suffix>}
one output from a hardware keyboard
MDR
${MDR_DATA_MIN<suffix>}
input for the data that will be routed
${KBD_CTL_MIN<suffix>}
input to control where the data is routed
${KBD_MOUT<suffix>[<M>]}
M data outputs
M = {1, 2, 3 ... 16}
CC
${CC_MOUT<suffix>}
one output from a hardware controller
SEQ
${SEQ_MIN<suffix>}
one sequencer input
${SEQ_MOUT<suffix>[<M>]}
an array of M sequencer outputs
M = {1, 2, 3 ... 16}
SYNTH
${SYNTH_MIN<suffix>[<N>]}
inputs for N synth channels (if occupied)
SENV
${SENV_MIN<suffix>[<J>]}
inputs for J running synthesis environments (if any)
DSSI
${DSSI_MIN<suffix>}
one input for ghostess

^
TOC |

__________________________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
synth ch_synth MIXER :REC :SEQ :MDR SYNTH SYNTH
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
senv ch_senv MIXER :REC :SEQ :MDR SENV SENV
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
dssi ch_dssi MIXER :REC :SEQ :MDR DSSI DSSI
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

^
TOC |