[LAU] Live setup question with Carla

David Adler d.adler at posteo.de
Tue Sep 25 15:30:37 CEST 2018


On 25.09.2018 13:32, Jeanette C. wrote:
> Hey hey,
> I am helping a friend to set up a live performance system. The general
> requirements are: one master keyboard connected to a notebook, which
> hosts several plugins (VST through wine and Pianoteq in some form). The
> challenge: switch the sound engine which the master keyboard is
> controlling via MIDI (from the keyboard) or through another cheap
> controller.
> 
> The current state: use Carla to host the instruments and try to map
> certain MIDI controllers to switch the internal routing. To that end I
> found one thread on Linux Musicians, where FalkTX suggested using some
> MIDI filtering plugin (like pizmidi-plugins or x42) or a standalone app
> like mididings. No final solution was posted/described.


Hi Jeanette

I'm using a mididings router for exactly that purpose.

It has 2 inputs and 8 outputs, all either Jack or Alsa,
depending on the backend selected.

One input ('data') receives the MIDI data to be routed
and a second one ('ctl') listens for certain CC numbers
that will switch the routing to one of the outputs.

I don't fully understand every aspect of it (e.g. why the
scene numbers are magically tied to the CC numbers
by a +1 relation), copy-pasted and adapted it years ago.
Since then it serves the purpose.

Run it with
$ mididings -f <filename>

with <filename> containing the following:


from mididings import *

# setup backend, names and ports

config(

   # select alsa backend, alsa or jack
   backend = 'alsa',

   # alsa/jack client name
   client_name = 'adingsroute',

   # two inputs, one to control scenes, one for the
   in_ports = ['data', 'ctl'],

   # 16 output ports
   out_ports = [
     'CH-1',
     'CH-2',
     'CH-3',
     'CH-4',
     'CH-5',
     'CH-6',
     'CH-7',
     'CH-8',
   ],
)


run(
   scenes = {
     32:  Scene('input -> CH-1',
       Port('CH-1')
     ),
     33:  Scene('input -> CH-2',
       Port('CH-2')
     ),
     34:  Scene('input -> CH-3',
       Port('CH-3')
     ),
     35:  Scene('input -> CH-4',
       Port('CH-4')
     ),
     36:  Scene('input -> CH-5',
       Port('CH-5')
     ),
     37:  Scene('input -> CH-6',
       Port('CH-6')
     ),
     38:  Scene('input -> CH-7',
       Port('CH-7')
     ),
     39:  Scene('input -> CH-8',
       Port('CH-8')
     ),
   },
   # ctl data: filter by port and stuff,
   # use number of EVENT_* for scene selection
   control = PortFilter('ctl') >> CtrlFilter(31,32,33,34,35,36,37,38) >> 
CtrlValueFilter(0) >> SceneSwitch(EVENT_CTRL),

   # input data: filter by port
   pre = PortFilter('data'),
)


More information about the Linux-audio-user mailing list