Names and Positions - Ep. 04 of my Tutorial Series

How to apply ClyphX Pro actions to a specific object in Ableton? In this video I am going to show you everything I know about how to properly put the finger on the right button you would like to be pressed.

In this video I used an ableton set you can download here:


Different to the video I did hide the tracks with the X-Clips in groups so you can easily focus on one part of the tutorial.

x-control tutorial turning a x-touch mini into a customised controller

This is my longest tutorial video so far. (Nr. 03b)
I went through the whole process to plan, program and test the customisation of a x-touch mini from Behringer with the help of ClyphX.

Here is the video:

here are some extra files:

X-Control - xtouchmini configuration
x-touch-mini-assignments as shown in the tutorial

my patreon :
discord server :
buy me a coffee:

morningjam - land far man

Robert Landfermann is a master of free improvisation and an explorer of extended playing techniques on the double bass. I had a lesson with him and learned some techniques. How they do sound with effects? Well, this is the matter of this morning jam. And, yes, it is supposed to sound like noise. Not that it is my new favourite sound, but like ginger, it can be an essential spice.

here is a link to my questions and findings of the session I had with him

Overview of my used hardware

Overview of used hardware

I will do a brief description of the hardware I used and which functions I programmed.

Launchpad X

Launchpad X

This is the center piece of my tableboard.
I described the use of buttons 1-8, SLOTS and Bars in the ClyphX Pro post under X-Modes.
In the middle row on the left are 11 buttons representing my effect pedals. I can send audio of focused or selected tracks in ABLETON LIVE. I have the same functionality implemented on my Midi Fighter Twister. On the launchpad mini I also have the same buttons. These 11 buttons will be re-mapped and dedicated to something else. This is also on my FUTURE PLANS list.

"COPY MON to SENDS" will copy the routing of what I actually hear on the selected recording track. I use this for dry recording. (described in more detail in my [THE MATRIX][matrixmixer] post.

"MUTE / PLAY / STOP NQ / STOP Q" - controls loop tracks 1-8 as well as the beat group or individual beat tracks like KICK or SNARE.

The 3 buttons in row 3 from the top on the left side set the quantisation applied after recording. At the moment, this applies only to played beats.

In the same row, the remaining 5 buttons represent my groups inside ableton.

"LOOPER REC" is for recording audio from ableton into one of my looper pedals on my tableboard.

"MATRIX SAVE / RECALL" is used together with buttons 1-8 to save my Matrix. This is not yet working to my satisfaction.

"clear sends" clears the sends inside ABLETON on the focused/selected track.

"close / open Fold" collapses or opens the view of a group (5 buttons below) to get a quick overview.

"BIND SEL / FOCUSED" locks the Midi Fighter Twister and many other controls to either the SELECTED track or to a locked(focused) track. e.g. I can change the focused track to loop track 2 by pressing holding button 2 for a longer period.

Upper Row:
"Tap TEMPO / - / +" sets the global tempo for live. When jamming this is a feature I use every time.

"Session record" records the session inside ABLETON
"Session play" - starts and stops ABLETON

"CLICK" turns on/off the click
"UNDO / REDO" - you guessed it: UNDO(short press) / REDO(long press)
"DEL" - deletes clips on tracks 1-8 (by pressing all each of them)

Launchpad mini mk3

Launchpad mini mk3

On the left, next to the Launchpad X is a smaller one.
This is used almost exclusively to control my matrix. The labels are worn at the moment and not finished yet.

I explained the use of the lower 3 rows extensively and in detail in my [THE MATRIX][matrixmixer] post.

There are some more buttons I will quickly describe:

"DON'T PANIC" - this button actually does nothing, but it gives me a safer feeling that it is there.

"copy phone to rec" - used for wet recording. copies what I hear to the recording bus.

"clear submix, VOL off, -3, 0, +3 db" are presets to set the volume of pressed source buttons

"MIC 1-4, MAIN MIX, ATEM etc" - represent more inputs (sources) and submixes. It is not stored properly in my matrix yet. I write about this in the [THE MATRIX][matrixmixer] post and it is on my FUTURE PLANS list to program properly. It works for now and I have to focus on the musical part of my master research. It has to wait for now.

Expression pedal matrix

"CMX exp, volante exp, EXP 1, etc." these buttons represent 2 things:

  • expression inputs of some of my pedals.
  • expression pedals on the floor (4 of them inside the FCB1010)
    I applied the same concept of [THE MATRIX][matrixmixer] to expression pedal assignments. As well as some predefined mappings available as presets.

Here are some labels I prepared and most of these functions are already programmed:
launchpad mini labels

Midifighter Twister

Midifighter Twister

This unit has 4 programmable banks and RGB-coloured indicators. I use it mainly for:

  • controlling sends (to effect pedals) of tracks in ABLETON
  • controlling PAN of tracks
  • controlling parameters in the eventide H9
  • controlling parameters in devices/effects inside ABLETON like the TURNADO from SugarBytes.

I wrote a detailed post about the process of programming the Midi Fighter Twister.

Behringer BF2000 - motorised Fader Controller

Behringer BCF-2000 Fader Bank

I had one of these lying around somewhere and integrated this at the very beginning when I started to build by setup.

The faders can be linked to the looptracks 1-8 (and 9-16) as well as the beat tracks (KICK, SNARE etc.). I like to use it because it is a intuitive representation of what is going on. and great for doing fade ins, fade outs, and doing more than one volume adjustment simultaneously.

Behringer FCB1010 Footcontroller

Behringer FCB1010

When I play the bass, both of my hands are busy. Because I need to give commands or trigger something at the same time, I have my feet left to operate things. I use an old foot controller from Behringer. This is a popular piece of gear, because it is sturdy, reliable and cheap.
Typical for Behringer the operation is not straight forward and possibilities are limited. Luckily, there are some nerds out there, which develop custom firmware chips to overcome these limitations.

I found a guy in Belgium who sells a chip with which I was able to configure my FCB1010 to my needs:

UNO Firmware chip

With this firmware I am able to use the buttons similar to a keyboard with a NOTE ON and NOTE OFF event. This enables me to program functions for short press, long press etc. ClyphX Pro G-Controls

I use it for:

  • recording / stopping LOOP1-4
  • ARMING / UNARMING drum sound triggers
  • scrolling up & down through scenes
  • trigger next scene
  • recording a loop sequence

on other Banks I implemented functions for my pedals on the tableboard. As they are guitar pedals, they are designed to work as floor units. With MIDI I am able to access most of these functions remotely with my feet.
The other two smaller foot switches are connected to two pedals directly (TENSOR and blooper)

Already mentioned above, the FCB1010 has two expression pedals which are very useful to control parameters gradually while playing to enhance the expression.
Typical use case is the amount of reverb or the length of a delay line.

What is better than one foot controller? two foot controllers! To keep it simple, both are mapped exactly the same (except the expression pedals) so I can access two banks at the same time.

2 Behringer FCB1010 - stereo

other hardware used:

without further detailed explanation

  • RME Fireface 802 - Audio interface
  • 2x Behringer AD8000 - Audio converter (analog/digital)
  • Samson S-Patch
  • UAD 2-610 Preamp
  • acer display
  • ddrum trigger converter (audio trigger to MIDI)


Pedalboard for the doublebass pickup:

  • Boss OC-2
  • Audio Sprockets Tone Dexter
  • Digitech Bass Whammy
  • Stone Deaf - Fig Dumb


  • ottobit jr. - MERIS (bitcrusher and sequencer)
  • Tensor - Red Panda Labs (looper/sample manipulation)
  • count to five - montreal assembly (looper/sample manipulation)
  • 856zellersasn - montreal assembly (looper/sample manipulation)
  • MOOD - chase bliss audio (micro looper)
  • BLOOPER - chase bliss audio (bottomless looper)
  • microcosm - HOLOGRAM ELECTRICS (looper/sample manipulation)
  • CMX 1978 - chase bliss audio (reverb)
  • Volante - strymon (delay emulation)
  • H9 - eventide (multieffect, mainly used for pitch shift effects)
  • DualDagger - Shakmat (custom modular rack)
  • 3 USB hubs
  • Power supply units
  • MIDI Interface
  • MIDI utility converters
  • MANY, MANY patchcables.


This collection of hardware evolved over time. With ClyphX Pro it is possible to link all of the controllers and lift borders in between them. It feels to me that I have only just begun using a part of the potential. The more time I spend with the setup, the more familiar I get with it.

go to the Master Research Overview


What is the Matrix?

first steps and thoughts

I am playing and experimenting with guitar pedals since I started to play the bass. When I started this research, which I called "double bass and effects" at first, I used my (existing) pedalboard and extended it with a two looper style pedals. (TC electronic DITTO and Red Panda Labs - TENSOR). I split the signal before the pedals because I wanted to have independent layers.

first signalflow
first signalflow

This is the very fist morning jam I did with this setup:

I continued to play around with this kind of setup. There are more morning jams with this setup:

2nd morning jam - atmospheric layers

This morning jam was right before I started to experiment with ableton:
4th morning jam - more atmo

"a journey to"

With this setup I recorded a track with the "Arthur Possing Quartett" at the world famous Real World Studios in England:

Signal flow:

signal diagram of "a journey to"
signal diagram of "a journey to"

Although this signal chain might look complex, it is pretty simple though. After the delay (Strymon) I split the signal once. This is the "always on" signal. (Also called dry signal) The TENSOR had a "kill dry" active, that means, only recorded audio (by this looper pedal) is audible. When it is not engaged, no signal comes through. With this setup I could build three independent layers:

  1. Atmospheric layer with the tensor,
  2. Switch to path (B) and add another texture layer with the "supa puss" and 856.
  3. Switch back to (A). The tensor and 856 continued to play, but no signal from my playing was coming through those two paths. Instead only the dry signal with fuzz, overdrive and delay was audible.

After this memorable recording session experience, I intensified my experiments with ABLETON LIVE and looping techniques and my research question became more and more clear. I wanted to explore not only the possibilities to use ABLETON LIVE as a perfect looping machine, I also wanted to explore the possibilities of sound manipulation with pedals.

My resources in regards to signal routing were quite limited, my audio interface at that time had four inputs and four outputs. Basically I could put all pedals in a serial chain. But, if I wanted to change the order of effects or add another pedal into the chain, I had to unplug and reconnect them, which takes time. That is perfectly fine in a studio recording context, where you have the opportunity and time. But this is not adequate for a live performance, when you would like to use more than only one setting.

more pedals

It is indeed a kind of philosophy how many pedals to use and which order to put them. In the beginning of 2021, I purchased a bunch of new pedals, all of which I wanted to integrate in my setup. 11 in total. I was longing for a setup where I could effortlessly and quickly change both: Order and parallel processing. even feedback loops.

To be perfect, it would be possible to control the signal flow digitally or via MIDI.

I knew that there were no solutions for such a task existent. At least, at that time.

existent hardware solutions


A pedal company from Norway, PLADASK ELEKTRISK had a very interesting device. A 4x4 analog matrix mixer. It is called "MATRISE" and looks like this:


With this unit you could connect 3 pedals and send anything anywhere and you have the option to flip the phase.

  • pure analog signal flow (means no latency because of AD conversion)
  • tactile → the magic of twisting knobs


  • it is a "only" 4x4 matrix. 1x1 is needed for in and out. 3 pedals only. MONO, of course. (I have 6 stereo pedals….)
  • Most of the time it is not available. It is a small company with limited resources.
  • no possibility of control via MIDI or any other computer signal.

Patchulator by bored brain

Another piece of gear I found was the Patchulator by bored brain, a 8x8 patch matrix:


It's not really a matrix mixer, more a reorder tool. You can send one output only to one other input. Perfect for quickly re-ordering pedals.


  • relatively cheap (129$)
  • 8 ins and outs
  • Small and passive operation


  • no remote switch possibility
  • no control over volume being sent

Matrix Mixer by erica synths

This unit just came out recently(summer 2021), when I had my custom solution already finished. It a 16x16 matrix mixer, main inputs and outputs are separate and is midi controllable. It comes from the eurorack world (modular synthesisers)

matrix mixer by erica synths


  • 16x16! (as most of my pedals are stereo that would be not enough….)
  • midi controllable


  • all connectors are mini-jack, that would mean the need of 32 adapter cables….
  • No stereo pairing
  • it was too late anyway……

Although this piece of gear would fit most of my needs, I am glad I found another solution…..

using ableton as a mixer matrix

After it became clear to me, that there is no easy hardware solution I though about possible software based solutions. There is ABLETON LIVE and I already used it for my scripted looping.

I purchased a used audio interface (Saffire Pro 40) and a 8-channel DAAD converter, so I had 16 inputs and output in total. I connected all of my pedals in a separate inputs and outputs. Inside of ableton I had an individual audio track(input) and a send track(output) for each pedal.
With the software monitoring activated I was could now send any signal to any pedal.

I used a Behringer BCF 2000 to control the volumes, but it was confusing, hard to control and stay on top of things. And then there were other problems too:

latency and CPU overload

This solution over ABLETON LIVE had one major problem. If I go through the audio engine of ABLETON, there will be noticeable latency. About 14ms minimum. This adds up each time I go from one pedal to the other. e.g. Going only through two pedals adds up to 84ms.

latency diagram
latency diagram

Latencies greater than 15ms are noticeable for listeners (link), especially when you are the player (and listener). Some colleagues of mine are sensitive to latency greater then 6ms.

(A short article about audio latency on wikipedia is here

But the latency was not even the real problem. With each audio input monitoring activated it put a serious amount of work to the CPU, which resulted in permanent CPU overloads and audio dropouts.

Direct Monitoring and a possible path to a solution

Of course, the problem of latency is not new to the world of audio recording and processing. There is a technology called "Direct Monitoring", which is a shortcut on the signal path before any DAW processing in the computer directly inside the interface. On some audio interfaces it is done by an analog signal path fed directly back to the monitor / phones output. No latency, no CPU strain.

I finally a closer look at RME interfaces, which have a stellar reputation in regards to reliability and quality. It comes with a mixer software, called TotalMIX, which is packed with features. It claimed that it could be controlled remotely via MIDI.

I was intrigued and after some more research I bought a RME Fireface 802 and another DAAD converter additional to the one I had.

I had now 30 analog inputs and outputs, plus a "zero latency"(*)1 mixing software, fully controllable via MIDI.

Programming of the matrix

Two questions arose:

  1. How do I implement the operation on a piece of hardware?
  2. How do I manage and implement the control on the backend?

1. Hardware controller for the matrix

I had a Novation Launchpad mini mk1 available. It is a hardware controller with a 8x8 pad surface. My first version was straight forward, each row represents an output (or a destination) and each column represents an input (source).

first version of a mixer matrix controlled by a launchpad

E.g. To send input 4(856zellersasn) to destination 6(Hologram), I would press button 20. The LED of the button would light up and to clear this route, I would simply press it again. (This is also called "toggle" behaviour of a button). The upside of this solution was that I have a direct visualisation of what is going where.
But it turned out to be much more complicated to realise. With a 8x8 matrix I am limited to 7 effect chains, 1 is for a representation as an input. But I was planning with 11 effect chains. The output would have been elegantly represented by the middle buttons where source and destination meet.
It was also not possible to get the launchpad(mk1) in a simple note-toggle-behaviour. Nor could I get the visual feedback to work. I got a mk3 later where it was not problem, but at that time I already advanced to another concept.


For a 12x12 matrix I would need another hardware controller. With at least 12x12 buttons. (That is obvious, no?) I did research and found possible controller, although they were boutique or custom made. Therefor very expensive and unsure on the software functionality.

(Example: pic, price etc)

After some re-thinking I came up with a possible solution. I use 1 button for each source and one 1 button representing each possible destination. For 11 effects(in & outs) and 1 input and 1 output this would be 24 buttons total. This fits into three rows on a launchpad:

mixer matrix mk2

To assign a route, I press and hold down the desired destination and press a source to turn on the connection. Although I have future plans to add features, this concept turned out to be very effective, intuitive and relatively easy to implement, thanks to the architecture of RME Totalmix.

2. Implementation of the backend, RME Totalmix

[RME Total MIX][totalmix] is controllable via MIDI they said. But there was a learning curve to understand how to do this. There was a dedicated "MATRIX VIEW" inside the software:

matrix view RME Totalmix Software

I first thought there is a dedicated midi command for each cell, but after some trial and error, I found out that it worked differently. I finally read the manual, but the description was rather thrifty:

Furthermore all faders of all three rows can be controlled via simple Control Change commands. The format for the Control Change commands is:
Bx yy zz
x = MIDI channel
yy = control number zz = value
The first row in TotalMix is addressed by MIDI channels 1 up to 4, the middle row by channels 5 up to 8 and the bottom row by channels 9 up to 12.
16 Controller numbers are used: 102 up to 117 (= hex 66 to 75). With these 16 Controllers (= faders) and 4 MIDI channels each per row, up to 64 faders can be controlled per row (as required by the HDSPe MADI).

It took many hours of research to find out and understand how [RME Total MIX][totalmix] is designed. It is designed to work with all the audio interfaces of the RME product line. Each of them has a different number of inputs and outputs. Because of that, the MIDI implementation is always RELATIVE to the interface used.

The basic functionality of [RME Total MIX][totalmix]

I think it would be helpful to explain the basic concept of Totalmix first, although I won't go into details too deep. In the mixer view there are three rows representing:

  1. Hardware inputs
  2. Software outputs
  3. Hardware outputs
totalmix mixer view

You select an output in the bottom row (hardware outputs), and row 1&2 will change corresponding to the mix settings for the selected output. To change the mix for another output, you have to select the output on the bottom row. This selection is also called submix. On the right there are dedicated submixes for Phones 1,2 and a master.

There are 2 types of MIDI commands for controlling the faders:

  1. A dedicated MIDI CC message to control the volume of each fader in the first row:

Back to the manual:

The first row is addressed by MIDI channels 1 up to 4, Controller numbers used: 102 up to 117

To control the first fader on the upper left I send a MIDI CC Nr 102 command
on channel 1, the second fader is Channel 1, CC 103, etc….

  1. A CC MIDI message to select a submix.
    Back to the manual:

    Select submix (fader) in third row: - channel 1/2: BC 68/69 xx
    channel 3/4: BC 6A/6B xx

It took another while to find out, how I could use this information. These values are in HEX(numbering on the base of 16). This is often preferred by programmers. Unfortunately, this manual was written by programmers and is therefore not easy to understand for an average musician. I have a history and interest in programming, but even for me, this was not obvious.

BC is 13 in the decimal system. And 68(HEX) is 104. To select Submix 1 (first channel in the third row) I send a MIDI CC nr. 104 on channel 13. For submix 2, MIDI CC nr. 105 on channel 13. And so on.

I then made an overview with all my used inputs and outputs and the relevant midi commands:

table of midi commands and audio routing of my setup "on my own"

How do I get the information of pressing a launchpad pad converted into midi and being sent to [RME Total MIX][totalmix]? How can I get a visual feedback? How can I store and recall settings?

How to store a matrix? (Python Lists)

I had to handle the information of which connections I make or which connections are active. I had to use the programming language Python to write custom functions inside ClyphX Pro. These are called user_actions.
There are many concepts to handle and store parameters in Python. A simple one is a list, where parameters are written one after each other, like this:
list=[value1, value2, value3, etc…]

To access position 3 you use
In programming position 1 is referred as 0, also called the programmers 1.

To store the values of a 12x12 matrix, I needed 12*12 positions, 144 in total.
Back to my original concept I stored the data corresponding to this table:

table for matrix cells

To give you an example: To access the value for the route:
source blooper → destination 856 it's cell Nr. 65, the programming code would be: list[64]

I used 4 more outputs and wanted to store those values as well. Now it is a 16x12 matrix.


This is a simple solution and it works, but it has limitations, which are bothering me:

fixed size

It is not expandable. When I would add another input it would be a 16x13 matrix and all cells would be renumbered. I would have to re-write all of my programming code.


When using this list, it is not obvious what number 152 stands for. There are solutions in Python which would look like this:


Here it is readable which cell 152 stands for.

Or if I use a two dimensional array(you can think of it as a table with rows and columns) it wold look like this:


7 is the column 8 of the sources (tensor) and 12 is row 13 of the submixes (phones1) when you look at the table above. 152 = 8 + (12*12). 12 multiplied for each row.

Future plans

The re-programming of my matrix structure is right on the top of the list of my Future Plans. But it also means I have to reprogram most of my functions, which I don't have the time now.

connecting the dots

I now know what MIDI commands I have to use, how to store parameters and what hardware controller I want to use. Time to bring all pieces together.

ClyphX Pro, matrix launchpad and MIDI

I used ClyphX Pro to configure my launchpad mini mk3 to send the right midi data. In ClyphX Pro there is a simple action to generate MIDI data.


For each submix I defined a MACRO:

$SUBMIX-TENSOR$ = MIDI CC 13 107 127;

To program the button for selecting the submix for the tensor I define a G-CONTROL on my launchpad with an event for pressing and releasing the pad:

B_2_23 = NOTE, 4, 22, 0, 127, FALSE

I did a similar thing for the source buttons. When I release the destination button it snaps back to the phones mix. Doing it like this I am forced to actively choose which destination and would not make any connection to a previous selected submix by accident.

The MIDI data is sent to the MIDI output defined for ClyphX Pro in ABLETON LIVE MIDI PREFERENCES. I use a virtual MIDI device. This is a built-in feature of MAC OSX. In this way I can redirect a MIDI signal from one application to another internally:

ableton midi preferences
totalmix midi preferences

I had to overcome various difficulties during the programming. It is not possible to set a variable from inside a macro in ClyphX Pro. But this was essential to make my concept work. To store the volume value into my list, I had to set a variable to tell ClyphX Pro which submix(row) I pressed in the first place. Only like this I could address the right position in my list.
I ended up writing my first useraction setvar to override the limitation from within macros. I published the action on the forum and it is used by many from the community now.

Visual feedback

For an intuitive operation I needed visual representation of what is going on inside the matrix. I came up with this solution:
When selecting a submix, the active sources(pads) started to blink on the left side on my launchpad source section. I did this with a user action matrixstate.

Inside ABLETON LIVE I have a MIDI track assigned to the LAUNCHPAD with a MIDI CLIP running in a loop. If you send a MIDI note the corresponding pad will light up. The useraction reads out the submix row of my matrix and turns on or off the right MIDI notes. When releasing the submix button, all MIDI notes from the Phones submix get activated again.

This useraction does give date for OSC output as well. On my iPad I have a dedicated page where I can see all active routes at a glance.

screenshot OSC routes page

I found this view not that very helpful as it is too cluttered for my taste. I have ideas how to do this properly in my FUTURE PLANS


When jamming I missed the possibility to store the state of my matrix to be able to recall it later. I was able to write a store and recall user action, although it does not work perfectly yet. I store the matrix-list in a dedicated clip name. Weirdly enough clip names in ABLETON LIVE are a great container for information as they seem not limited to a small length.
Meanwhile, I do use more than 12 sources, (MIC1, MIC2, MIC3 etc…). This is perfectly fine when it comes to control Totalmix, but the stored list inside my setup can't hold all of the data, as I mentioned earlier when I wrote about limitations.

As time is running out at the moment, this is also on my list of FUTURE PLANS

Further aspects of audio signal routing

While developing early versions of the matrix, I wrote down my concepts of possible and relevant signal routings. After using my setup it for a while it became clear I want to have a flexible monitoring/recording routing:

sketch chart of signal flow scenarios

This is a rough schematic of the most needed signal routings:

routing most possibilities
routing most possibilities

I break them down to two types of recording and playback. Wet and dry. Wet/dry is not a standardised term, but it means dry→ without effects, wet→ with effects.



For a dry recording scenario I would like to hear my signal with effects, but record the dry signal. With this procedure I am able to tweak effects after recording. This is useful with effects like e.g. delay or reverb. With a short loop the effect is "longer" than the loop itself.

dry recording scenario
dry recording scenario


In a wet recording scenario I want to record the signal with the effects "burnt in". This could be helpful when the effects like stutter, distortion or modulation. When recorded like this the effects would be "free" for other uses after recording:

wet recording scenario
wet recording scenario


When audio is played back, it is routed directly to the output, without any effects added to it. This is normally used when it was recorded wet.

dry playback scenario
dry playback scenario


This is normally used when a loop was recorded dry. The audio goes into my mixer matrix gets treated with effects and is finally routed to the output.

wet playback scenario
wet playback scenario


Now, it can be a mixture of both. e.g. the bass is recorded with a pitch shift and distortion, but goes into a delay afterwards which is not recorded and can be manipulated later during playback. Everything is possible and easy to dial in. But it is dangerous territory, it easily gets complex and hard to control. On the other hand it is a land full of lucky accidents and surprises. A creative wonderland to get lost. But also a possible waste of time and swamps of unpleasant noise. But this is in the nature of taking creative risks, I guess.

seamless from dry recording to wet playback

A challenge I encountered while realising this setup was having a seamless transition between recording dry(while playing bass with effects) and playing back through the wet signal chain.

All the schematics above are a simplified version. I use a submix of [RME Total MIX][totalmix] as a recording bus for ABLETON. I use the loopback feature which sends the audio from an output back to the software input. This is useful if you want to record a submix. In my case I have the same hardware input inside ABLETON LIVE and therefor minimal CPU strain. Plus, I am flexible to route any combination of hardware input to the recording bus inside [RME Total MIX][totalmix].

Inside ABLETON LIVE I have for each effect an independent send. I had to "clone" the routing of [RME Total MIX][totalmix] and apply it to the sends of the loop audio track inside ABLETON.
I realised this with a user action montosends which means "copy monitor to sends". This reads the recording bus row of my matrix and pastes the corresponding values onto the desired loop track sends in ABLETON.

I also wrote a user action to apply the wet recording scenario. The user action is called montorec and stands for "monitor to recording bus". It clones the phones submix to the recording bus.
There is a built-in function in [RME Total MIX][totalmix] which does exactly that. But unfortunately it is only accessible through a context menu when right clicking the mouse on a submix. I wrote to RME many times to make this functionality available via MIDI, but I'm afraid I am the only person who is interested in that.


The realisation of my idea of a flexible mixer matrix was very intense, but I am confident that it works rock solid and can be developed further. The possibilities
to combine external effects and control the signal flow from ABLETON pre-scripted are endless. Thanks to the stability of [RME Total MIX][totalmix] my setup is reliable and responsive. It feels like an instrument. Everytime I start making music with it I feel satisfied, because it is just a millisecond from that moment of "How would it sound if I send this there and then back to this pedal" to its realisation.
It was worth all the effort and I do not regret having chosen the red pill.

See you on the other side…..

  1. EXCERPT of the manual of the Fireface 802 in regards to Zero Latency Monitoring(page 101):

    37.2 Latency and Monitoring

    The term Zero Latency Monitoring has been introduced by RME in 1998 for the DIGI96 series of audio cards. It stands for the ability to pass-through the computer's input signal at the inter- face directly to the output. Since then, the idea behind has become one of the most important features of modern hard disk recording. In the year 2000, RME published two ground-breaking Tech Infos on the topics Low Latency Background, which are still up-to-date: Monitoring, ZLM and ASIO, and Buffer and Latency Jitter, both found on the RME website.

    How much Zero is Zero?

    From a technical view there is no zero. Even the analog pass-through is subject to phase er- rors, equalling a delay between input and output. However, delays below certain values can subjectively be claimed to be a zero-latency. This applies to analog routing and mixing, and in our opinion also to RME's Zero Latency Monitoring. The term describes the digital path of the audio data from the input of the interface to its output. The digital receiver of the Fireface 802 can't operate un-buffered, and together with TotalMix and the output via the transmitter, it causes a typical delay of 3 samples. At 44.1 kHz this equals about 68 μs (0.000068 s), at 192 kHz only 15 μs. The delay is valid for ADAT and SPDIF in the same way.


    While the delays of digital interfaces can be disregarded altogether, the analog inputs and out- puts do cause a significant delay. Modern converter chips operate with 64 or 128 times over- sampling plus digital filtering, in order to move the error-prone analog filters away from the au- dible frequency range as far as possible. This typically generates a delay of one millisecond. A playback and re-record of the same signal via DA and AD (loopback) then causes an offset of the newly recorded track of about 2 ms.
    Low Latency!
    The Fireface 802 uses AD and DA converters with an innovative digital filter, causing a delay of only a few samples. With 12 samples AD and 7 samples DA the delay caused by the conver- sion is only about a quarter of previous generations. The exact delays of the Fireface 802 are:

go to the Master Research Overview

Clyphx Pro

ClyphX Pro

First, a quick history of control surface scripts:

One of the innovations ABLETON LIVE brought into the world of DAWs, was its capability to be connected to all sorts of hardware controllers. There are many different controllers on the market, dedicated to the software. Probably the most successful unit ever sold is the Launchpad, which was released in 2009 by Novation. It has a 8x8 grid illuminated button matrix and reflects visually what is happening in the software.
The communication between hardware and software is handled by a control surface script, written in the programming language Python.

When you bought a hardware controller, in most cases the manufacturer had written a script for ABLETON LIVE which was delivered with the software. You simply had to tell the software which controller it was and it was integrated seamlessly.

It is the ease of use, which made this concept so popular.

What is ClyphX Pro?

Developed by Sam ‘Stray’ Hurley, ClyphX is a control surface script. It is not bound to one specific piece of hardware. It can be controlled from different sources with little commands such as, for instance, "METRO" (for turning on/off the internal metronome) or "bpm 115" (to set the tempo of the project) which you simply write in a clip's name.
You can control and access everything which is controllable via the ABLETON LIVE API or LOM (live object model) without diving into python programming:


It is possible to program any midi controller to do almost every command / action. Some of this is possible with the built-in mapping function of ABLETON LIVE, but you would have to re-map everything every time you start a new project.
Furthermore, with ClyphX Pro you can combine different pieces of hardware to interact. Best of all, you can add a custom python code to extend your needs of control.

For this reflection report I want to give you some examples of how I used specific ClyphX Pro functions to customise my setup and made it as accessible as possible, and tamed the complexity that comes with it.

short examples


Binding is a part of ClyphX Pro to bind a controller to a specific parameter in ABLETON LIVE. e.g. I connected the sends of my 8 loop tracks to my Midi Fighter Twister in such a way that I have full visual reflection of what loop in Ableton goes to which external guitar pedal. These bindings are dynamically reassigned by pressing knob 1-8 for loop track 1-8.

I wrote an article about how I proceeded here.


X-Modes enables different commands for the same button. Like a (multi-)shift button.
In my setup I use this, for example to use buttons 1-8 on my Launchpad X for different purposes:
When I hold down the MUTE button, LOOP TRACK 1-8 can be muted or unmuted.
When I hold down STOP, any clip playing in LOOP TRACK 1-8 stops playing.
When I hold down PLAY, the clip (in the selected slot) will start playing in LOOP TRACK 1-8
When I hold down MATRIX SAVE, a snapshot of my matrix gets saved in preset 1-8
When I hold down MATRIX RECALL, the snapshot 1-8 gets restored.

There are so many more examples when I use this, there would be too many for this report. A chapter in my tutorials will be linked here: X-MODES


With ClyphX Pro you can define different functions depending on how long you hold down and when you release a button. This is a real game changer for my foot controller Behringer FCB1010.
For example, when I press button 1 and let it go, I will immediately record "LOOP 1". When I press the same button and hold it down for a while, it will abort the recording or stop the loop from playing when already recorded.

This is done by measuring the duration between a NOTE ON and NOTE OFF midi event of a controller. You can use different actions for

  • PRESSED (every time the button is pressed)
  • RELEASED (every time the button is released)
  • PRESSED DELAYED (only when held down for a while)
  • RELEASED DELAYED (only when released after a longer press)
  • RELEASED IMMEDIATELY (only when released shortly after pressing down)


Macros are widely used in other applications. In ClyphX Pro you can combine a list of commands which are often used. They are defined and called with a dollar sign before and after the macro name. ($macro$)

I use them intensively in conjunction with Variables. Then they become very powerful.


In ClyphX Pro you can use variables. e.g. in my setup I use a variable for how many bars I want to record in a loop. (%recbars%)
I can set the length with buttons on my Launchpad X.
In a macro for recording: \$record-loop\$ every parameter regarding the length for the recording is used with the variable. Same goes for the track and scene(slot) in which the loop will be recorded.

One macro for all1.

Without variables and macros I would have to write a list of actions for every possible combination of bar length, slot and track.

OSC Output

OSC stands for Open Sound Control and is a protocol developed in the 1990'ies for a lightweight exchanges for musical data over a network. Different to MIDI, it can handle strings (text messages).
ClyphX Pro can send out BINDING data or strings over OSC. I use this in my setup to send data to an iPad to have a detailed overview of what is going on in my live set. E.g. Which scene is actually playing and which will be next. I can also add instruction notes like "bowed upper melody starting on E".

Note Trigger Handler

A note trigger handler is a M4L device which works together with a drum rack. With each pad in the drum rack you can trigger an ClyphX Pro action. You use a midi clip in which every midi note triggers your desired action.

note trigger handler
Example of a midi clip

This is very helpful when time critical tasks should be triggered after a fixed time length following a scene that has been triggered.
BINKLOOPER works in a similar way, although it is very limited in functionality and very cumbersome to edit.

In my current setup I use 5 different Note Trigger Handler.

Track & clip names

In ClyphX Pro you can reference a track or clip to its name. E.g. I have linked the volume and mute function of a track called "CLICK" to a rotary knob on my Midi Fighter Twister.

That means that, in any live set I work, if I create a track and rename it to "CLICK", I have volume and mute control linked exclusively to this knob on my Midi Fighter Twister without any mapping.
Another great aspect is that, by referring to distinct track names, it is fail-safe to the position of a track in a live set.

side notes

This software has a vivid and active user community. There is an active forum and a Facebook user group. After I discovered and started using this software, the creator Stray disappeared. He was most responsive and helpful on the forum. But without any announcement, he just vanished.
There were wild rumours and desperate guesses about his whereabouts. It turned out he was hired by ABLETON LIVE and probably he had to sign a strict NDA.
With the update of ABLETON LIVE to Version 11, ClyphX Pro stopped working. My whole master research project was heavily relying on ClyphX Pro. I was in shock.

Long story short:
Stray updated ClyphX Pro and it is currently tested in a closed alpha group, of which I am a proud member. Good news: everything works. Well, everything besides OSC Output. Yet.

My hopes are that ClyphX Pro will be integrated into ABLETON LIVE like Max 4 Live was.


In my opinion, ClyphX Pro is an incredible powerful tool to bend the control over ABLETON LIVE to your needs. Sure, it has a steep learning curve and for sure, learning to code in Python is not everybody's cup of tea.

To read more about what I did and how you could use this software (there is a free version) check out my tutorials and examples.

But everything seems possible to do. I did spend a big amount of time to get into ClyphX Pro and to the point where I am now, but every time I make music with my setup and everything works, it unleashes a great energy and flow of making music without caring about the question "How can I make this or that work?". I simply press the button for this function.

back to master thesis overview

  1. "It is more complex in my setup though, because I use note trigger handler to record loops, but it is a very good example of how variables and macros can simplify task dramatically." ↩︎

go to the Master Research Overview

The upside of (almost) loosing a cubase dongle

Last week, I had one of these shocking moments. We had come back from a family/student combined trip to Maastricht. Unpacking everything and oh no, I couldn't find my ilok and eLicenseron which I store all the licenses to my softwares such as ProTools, Cubase, Wavelab, Waves, etc, etc. I looked EVERYWHERE! Desperately! Panicky! To quote the greatest story in the whole universe: DON'T PANIC! And, as in the story, with regards to the fact that there is already too much suspense in the average life, I'll tell you that in fact, I got my dongles back and I didn't have to buy them all again for a ridiculous amount of money! This though, is just a little side story or funny introduction.

Thanks to those circumstances, I had to reconfigure my workflow for good. When I was recording my morningjams, I had ableton in the foreground running for ClyphX Pro, looping and controlling the whole mothership shabam. In the background, there was Cubase recording relevant audio inputs for two reasons. First, it was the only solution I had found to do this. When I tried to record it in ableton itself, the cpuload just exploded, the whole setup collapsed and was unworkable. Secondly, to mix those jams afterward in the right fashion, Cubase is just great software to do so.

The situqtion was now; that I had no access to cubase, I had some time on my hand and I wanted to record and write stuff for my master project. I recently had seen a great episode of one of my regular followed youtube channels (Ricky Tinez) where he talks about MIDI latency and how software monitoring plays a role in it ( He stated that, if the monitoring option in ABLETON LIVE is set to off, there is less midi latency. It makes total sense, of course.

latency in ableton - video by Ricky Tinez

So I reworked my layout project and made an audio track for each external pedal, found out which input was where and so on. (That, unfortunately, took so much longer than initiallyplanned.) I set all inputs on "monitoring OFF", hit record, and: voilà! It worked flawlessly!

recording my external effects

I also worked out a method to make sure that everything is recording and inputs are on record on. I defined a CXP* variable:

%extFXrec% = "R-mood","R-blooper","R-volante","R-h9","R-856","R-ottobit","R-microcosm","R-cmx","R-tensor";

I then simply have a X-Clip in my start scene, triggering this action:

%extFXrec% / ARM ON

as well as the command REC ON which is like pushing the arrangement record button on the upper transport field.

the CXP commands to arm everything

This is an example of how an unfortunate circumstance can lead up to an improvement, or in other words: detours increase knowledge of our environment.


Morning Jam #7: Exploring the Hologram Microcosm

During this morningjam, I explored the microcosm again. I use harmonics, and the microcosm made a rhythmical arpeggiated pattern over which I played some scales.

Pedalboard sunday #3 - DIY building a box

Pedalboard Sunday #3

Next Sunday, next step! We actually started building the final board. With all measurements ready at ahnd, it was an easy task: Building a box. Or let’s say, a frame. Four sides glued together with a dovetail joint.

First, Stephe cut the sides:

Then, it was time to cut out the tails and joints of the dovetail. Stephen used a gauge to do that:

That done, some glue, some hammering, done.
Now we have to wait till the glue has dried.

et voilà:

this is the basic box after the first session

Next session, we will do the bottom plate and cut off the lid from the bottom part.
I am already quite behind my earlier goal to write every week. But that is due to the fact that we were supposed to meet every Sunday to build and that the last two Sundays Stephen had to cancel our sessions because he was too busy with other stuff he had going on. Anyway, it looks good for this Sunday! I just hope we will finish before Christmas, haha.

Midifighter Twister & ClyphX Pro


I recently programmed my Midi Fighter Twister to integrate it into my setup. I’d ordered it and got it a while ago but wasn’t able to make time to set it up. I also take this opportunity to really get this blog running: My whole setup is very complex and I have so many things to write about, regarding various concepts, their realisation and adaptations. But I have to start somewhere and I’m sure I will cover as much as I can over time. That being said, let’s get a move on!


I want my live-looping-setup to be as accessible and as low-threshold as possible. Some sort of rotary control knobs are essential. I had a Behringer X-Touch mini before, but it only had 8 knobs and I did not like the feel of them. After some research, I found the Midi Fighter Twister ( It is a 16 knob controller with lots of features and it has got a great build quality, feel and coloured lights for each knob.




  1. Control the sends of the recorded loops in ableton
  2. Control of the stereo placement of each loop track (PAN)
  3. An always assigned volume control for the click track
  4. A touchable control for my eventide H9
  5. Some "special usage" knobs
  6. Be flexible and future-proof for further assignments and purposes

I will get into the general structure and programming of ClyphX Pro in a future post. If you are new to ClyphX Pro, here is the shortest explanation I can give: Think of ClyphX Pro as a hardware controller such as Ableton Push or a launchpad, but as a software version and more than a 100% customisable. You can literally connect, assign and program EVERYTHING. Therefore it is of course capable of really complex customisation.

Configuration of the Controller

Each knob of the MF-T(Midi Fighter Twister) has various layers of control:

1 - MIDI CC out for turning
2 - MIDI NOTE or MIDI CC for pushing
3 - more than one MIDI sent for different regions. This is called Super Knob and you can think of it as a Key Split point on a MIDI keyboard. I don't use this functionality (yet)
Bank 1 are assigned to Midi Channel 1, CC 0-15,
Bank 2 Channel 1, CC 16-31
Bank 3 Channel 1, CC 32-47

For pushing down a knob the outgoing MIDI messages are mostly set as momentary MIDI Notes (called NOTE Hold in the MF-T configuration software).

Bank 1, Knob 1 is Chanel 2 Note 0 (C-2)
Bank 1, Knob 2 is Chanel 2 Note 1 (C#-2)
and so on.

Controlling sends of the looptracks

In CXP (ClyphX Pro) I assigned the knobs as X-Controls for Encoder Bindings. I used this scheme for naming the assignments: MF stands for Midi Fighter, B1 for Bank 1, R1 for Rotary Encoder Data Knob 1.

The syntax for the assignment is:


So in the file "Encoder Bindings.txt" in the XT-A scripts folder I wrote:


and so on for all 16 knobs on banks 1–3.

I typed in NONE for each binding because they are bound flexibly. You can re-bind the X-Control to any parameter at any moment. This step is only needed to define what MIDI data is corresponding to a knob in CXP. In other words, it tells the software:
If you receive MIDI in the input for CXP XT-A (that is defined in remote surface Preferences) on Channel 1, CC Number 0, that is Knob 1 on Bank 1 on the MF-T.

I copied the layout I use for my mixing matrix on the launchpad mini onto the MF-T. I am sure at some point I will not have to think about which knob to turn. I hope for some muscle memory to establish. To point out once again: I am confident that when it comes to making music it is key to not have to think about technical things at all.

The "Destination" section layout of the launchpad looks like this:




The layout on the MF-T is then like this:

I tried to replicate the same order on the MF-T. unfortunately, I do not have the same colour palette on the MF-T as on the launchpad mini.
The sends in Ableton Live are routed like this:

SEND A: Red Panda Lab Tensor
SEND B: montreal assembly ZELLERSASN 856
SEND C: chase bliss blooper
SEND D: MERIS ottobit jr.
SEND E: hologram microcosm
SEND F: chase bliss CMX 1978
SEND G: eventide H9
SEND H: strymon Volante
SEND I: Distiortion & Filter
SEND J: chase bliss MOOD
SEND K: Pedalboard

To map those knobs to the sends, which is called BINDING in CXP, I use a macro and a variable to have one macro for any track instead of having to program one macro for each individual track.

The macro looks like this:

BIND MF-B1-R5 NONE; (I have no send yet for this slot)

I have 8 looptracks and they are assigned via a variable and their track names. so looptrack 1 is named "1" and therefore the variable assigned to that track:


This allows me to change the name of a looptrack in future projects or to assign it to any other track during a set.
For knobs 1-8 I want to use the push down of knob 1 to bind the send levels of looptrack 1 to knob 1-12.
Now I just have to bring everything together and tell CXP when to take which action. This is where it got a little bit delicate. My first attempt worked more or less but was not reliable and inconsistent. After some trying and testing I came up with a solution. I used the G-Control in CXP to realise my assignment.

in G-Controls.txt:

MF-B1-B1 = NOTE, 2, 0, 0, 127, FALSE
MF-B1-B1 PRESSED = %BIND-TR%=%looptr1%;msg %BIND-TR%;

First, I assign the push of the Controller ID: MF-B1-B1. (this is the first knob in the upper left corner)
Second is the action on the press DOWN where I set the variable %BIND-TR% to the corresponding looptrack(1) and display the message on the status bar of ableton to have a visual feedback.
Last but not least, I use the release event of the button to trigger the macro to do the actual binding.

To program all other 7 knobs I simply had to duplicate those lines and change the Controller ID name, the note number and the %var% to %looptr2% etc.... actually very simple and the great thing is, that if it works for one track it will work for ANY other track, that is the beauty of CXP or programming in general.

2) mapping/bind knobs of Bank 2 to the PAN

This was rather easy to program, I defined the knobs to MF-B2-R1 up to....-R16:

MF-B2-R3 =

and then wrote a macro to assign these bindings:

BIND MF-B2-R1 %looptr1% / PAN;
BIND MF-B2-R2 %looptr2% / PAN;
BIND MF-B2-R3 %looptr3% / PAN;
BIND MF-B2-R4 %looptr4% / PAN;
BIND MF-B2-R5 %looptr5% / PAN;
BIND MF-B2-R6 %looptr6% / PAN;
BIND MF-B2-R7 %looptr7% / PAN;
BIND MF-B2-R8 %looptr8% / PAN;

aaaaaand done.

Click Track Volume Control (Knob 16)

for the volume it is this line in Encoder Bindings.txt:

MF-B1-R16 = 1, 15, ABSOLUTE, TRUE, "CLICK" / VOL

and the push function is on Note Toggle in this case.
so in G-Controls.txt it's

MF-B1-B16 = NOTE, 2, 15, 0, 127, FALSE

Bindings for H9 on Bank 3

I have a midi track setup in Ableton, with the output routed to my H9. I use the simple M4L device to send out MIDI CC (CC Control from Robert Henke

For the bindings, I use the track and device names. To make it bullet-proof, I really had to be precise, because it is case-sensitive.
I wrote in Encoder Bindings.txt:

MF-B3-R2 = 1, 33, ABSOLUTE, TRUE, "M-H9" / DEV("CC-H9-p1") p3 b1
MF-B3-R1 = 1, 32, ABSOLUTE, TRUE, "M-H9" / DEV("CC-H9-p1") p2 b1
MF-B3-R3 = 1, 34, ABSOLUTE, TRUE, "M-H9" / DEV("CC-H9-p1") p4 b1

p3 b1 stands for the third parameter on bank 1(the M4L device)

Special Functions

To switch between the banks on the MFT I wanted to use the push first three knobs of the lowest row. (Knobs 13-15).
There is no built-in function for this, but there are buttons on the side dedicated to this. However, with a double bass in one hand and a bow in the other, there are not as easy to reach as one might need in the heat of a show. Luckily, I found a solution or a workaround let’s say: When you send a MIDI CC on CH 4 (MFT system channel) you can switch the banks remotely.

CC 0 with a value of 127 is Bank 1
CC 1 with a value of 127 is Bank 2
CC 2 with a value of 127 is Bank 3
CC 3 with a value of 127 is Bank 4

Unfortunately, it is not so easy to send a CC 0 message. In Ableton, not all 127 CCs are implemented so I could not use clip envelopes. The CC Control M4L device also starts with MIDI CC 1. After some digging, I found another M4L MIDI CC device, called CC Mapper. This one goes down to MIDI CC 0.
I created four midi clips with automation envelopes for each Bank and can now trigger them with the push of Knobs 13,14 and 15.
in G-Controls.txt:

MF-B1-B13 = NOTE, 2, 12, 0, 127, FALSE

MF-B1-B14 = NOTE, 2, 13, 0, 127, FLASE

MF-B1-B15 = NOTE, 2, 14, 0, 127, FALSE

The only downside is, that if I press one of them down, Ableton will start to play. As I will mainly use it when Ableton is running anyway, it is no big deal to me.

Another special knob is Knob 12 on Bank 1, which clears all sends on the bound channel (%BIND-TR%)


and wrote a macro which sets all sends of the track %BIND-TR% to -inf (off)


Future Plans / Proof

I want to program a copy/paste for the sends of the looptracks, but this is something in the user_action territory and that’s for another time. I also want to do more assignments/mappings to control the H9 or something on my pedalboard which is harder to reach.
I will take it from here and make some music with it. I going to get new ideas and probably find some drawbacks as well. I’m going to gather them and then refine and reprogram my setup. I’ve been doing this now since December 2020 and I am at Version 5.9. This is a number that is absolutely not meaningful because I do not have a proper version history recording: I could probably switch to “Version alpha”?

go to the Master Research Overview