Control non-mixer with a midi controller

The non-suite uses OSC for its controls.

OSC is way more accurate and flexible than MIDI (which is limited to a 128 step resolution) and you should use it as much as you can. However, despite its age, MIDI is still the only protocol used by most controllers. Therefore, you're going to need a small software that'll translate MIDI to OSC


Mididings is the swiss army knife of MIDI... It uses python script to convert whatever you like into whatever you like. If you want an insight at the infinite possibilities, just go to the official website

Installing mididings

There's great chances that mididings is available in your package manager. If not, follow the instruction you'll find in mididings' website (link above)

The script

# Get the mididings and OSC stuffs
from mididings import *
from mididings.extra.osc import SendOSC

# Set up the OSC port 
#(you define it in non-mixer thanks to  "--osc-port=7587" option - no quotes)
port = 7587
#The actual conversion stuff
   Filter(CTRL) >> CtrlSplit({
       # Non-mixer maping
       #It's always : /strip/[strip_name]/[effect_name]/[control_name]
       #Non-mixer uses values from 0.0 to 1.0. Therfore you have to divide by 127
       # Caution : 127.0 ( .0 !!). Check 'python's promotion' if you want to know why.

       #Sending MIDI CC #16 to the pan pot of the "mix1" strip
       16: SendOSC(port, '/strip/mix1/Mono%20Pan/Pan', lambda ev: ev.value / 127.0),
       17: SendOSC(port, '/strip/mix2/Mono%20Pan/Pan', lambda ev: ev.value / 127.0),

       # CC0 is sent to the gain of the "mix1" strip
       0: SendOSC(port, '/strip/mix1/Gain/Gain%20(dB)', lambda ev: ev.value / 127.0),
       1: SendOSC(port, '/strip/mix2/Gain/Gain%20(dB)', lambda ev: ev.value / 127.0),

Launch the script

Save the custom version of your script into a *.py file (let's say Then go to a terminal and run:

$ mididings -f /path/to/your/file/

You will see a new mididings MIDI I/O in your jack graph (gladish, qjackctl...). Connect your controller to mididings input and it's done !

Extra tips

Don't miss the documentation on OSC uses !

OSC uses URL. You can't have whitespace in an URL! Therefore "My Strip" will become "My%20Strip". "%20" is the whitespace code.

You can get the path of a OSC control in non-mixer by keeping your mouse over it.


This work is licensed under a Creative Commons License