I recently programmed my midifighter Twister to integrate it in my setup. I ordered and got it a while ago, but weren’t able to take the time to set it up. I also take this opportunity to get this blog really running. My whole setup is very complex and has so many things to write about regarding thoughts and ClyphX Pro. But I have to start somewhere and I will cover as much as I can over the time. That being said let’s get to it.

I wanted my live-looping-setup as accessible and low-threshold as possible. Some sort of rotary control knobs is essential. I had a Behringer X-Touch mini before, but it had just 8 knobs and I did not like the feel of them. After some research I found the midifighter twister. (https://store.djtechtools.com/products/midi-fighter-twister)
It is a 16 knob controller with lots of features, has a great build quality, feel and coloured lights for each knob.

I wanted to use it for these purposes:

1) Control the sends of the recorded loops in ableton
2) control of the stereo placement of each loop tracks (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 in to 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 you: Think of ClyphX Pro as hardware controller as a Push or a launchpad, but as a software version and more than a 100% customisable. You can connect, assign and program literally EVERYTHING. Therefor it is of course capable for really complex customization.

This is how I did configured the controller:
Each knob of the MF-T(midifighter 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)

the Knobs on
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 they are set mostly 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.

1) 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 Midifighter
B1 for Bank 1
R1 for Rotary Encoder Data Knob 1
The syntax for assignment is:
NAME = CHANNEL, CC, MAPPING_MODE, NEEDS_TAKEOVER, BINDING

So in the file “Encoder Bindings.txt” in the XT-A scripts folder I wrote:
MF-B1-R1 = 1, 0, ABSOLUTE, TRUE, NONE
MF-B1-R2 = 1, 1, ABSOLUTE, TRUE, NONE
MF-B1-R3 = 1, 2, ABSOLUTE, TRUE, NONE
and so on for all 16 knobs on banks 1-3…..

I typed in NONE for each binding because they are binded flexible. This step is need just to define in CXP what MIDI data is corresponding to a knob. Or in other words telling 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 used the layout I have for my mixing matrix on the launchpad mini to copy the same layout to the MF-T. I am sure at some point I do not have to think about which knob I have to turn. I hope for some muscle memory to establish. To point it 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:

Launchpad Mini MK3 Mixer matrix
The layout on the MF-T is then 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 1 macro for any track instead of having to program 1 macro for each individual track.

The macro looks like this:
$BIND-MF-B1-VAR-SENDS$ =
BIND MF-B1-R1 %BIND-TR% / SEND C;
BIND MF-B1-R2 %BIND-TR% / SEND J;
BIND MF-B1-R3 %BIND-TR% / SEND A;
BIND MF-B1-R4 %BIND-TR% / SEND B;
BIND MF-B1-R5 NONE; (I have no send yet for this slot)
BIND MF-B1-R6 %BIND-TR% / SEND E;
BIND MF-B1-R7 %BIND-TR% / SEND K;
BIND MF-B1-R8 %BIND-TR% / SEND D;
BIND MF-B1-R9 %BIND-TR% / SEND H;
BIND MF-B1-R10 %BIND-TR% / SEND G;
BIND MF-B1-R11 %BIND-TR% / SEND F;
BIND MF-B1-R12 %BIND-TR% / SEND I;

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:
%looptr1%=”1″
This allows me to change the name of a looptrack in future projects or assign any other track during a set.
I took knobs 1-8 and I want to take 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 do take which action when. This is where it got a little bit delicate, my first attempt worked more or less but not reliably and consistently. After 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%;
MF-B1-B1 RELEASED = $BIND-MF-B1-VAR-SENDS$;

First, I assign the push of the Controller ID MF-B1-B1. (this is the first knob in the upper left corner)
Secondly 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 on the releasing event I 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…. very simple and 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

quite simple, I defined the knobs to MF-B2-R1 up to….-R16:
MF-B2-R1 = 1, 16, ABSOLUTE, TRUE, NONE
MF-B2-R2 = 1, 17, ABSOLUTE, TRUE, NONE
MF-B2-R3 =
…….
…….
…….
MF-B2-R16 = 1, 31, ABSOLUTE, TRUE, NONE

and then wrote and triggered a macro to assign these bindings:
$BIND-MF-B2-LOOPPAN$ =
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.

3) 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
MF-B1-B16 PRESSED = “CLICK”/MUTE ON;
MF-B1-B16 RELEASED = “CLICK”/MUTE OFF;

4) bindings for the H9 on Bank 3

I have a midi track setup in ableton, with the output routed to my H9. I use simple M4L device to send out MIDI CC (CC Control from Robert Henke https://www.roberthenke.com/technology/m4l.html)

For the bindings I use the track and device names to make it bullet-proof. it is case-sensitive, so I really have to be precise.

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
etc.
p3 b1 stands for third parameter on bank 1(the M4L device)

5) some 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 like this, there are buttons on the side dedicated to this. But there are not as easy to reach with a double bass in one hand and a bow in the other. 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 there are not all 127 CCs implemented so I could not use the clip envelopes. The CC Control M4L device also starts with MIDI CC 1. 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 trigger them with the push of Knobs 13-15.
in G-Controls.txt:
MF-B1-B13 = NOTE, 2, 12, 0, 127, FALSE
MF-B1-B13 RELEASED = “MIDIFIGHTER” / PLAY “BANK 1”

MF-B1-B14 = NOTE, 2, 13, 0, 127, FLASE
MF-B1-B14 RELEASED = “MIDIFIGHTER” / PLAY “BANK 2”

MF-B1-B15 = NOTE, 2, 14, 0, 127, FALSE
MF-B1-B15 RELEASED = “MIDIFIGHTER” / PLAY “BANK 3”

The only downside is that if I press one of them down, ableton will start to play. Because I will use it mainly when ableton is running anyway, that is no real deal for me.

Another special knob is Knob 12 on Bank 1, which clears all send on the channel selected (%BIND-TR%)
MF-B1-B12 PRESSED = $CLEAR-MF-B1-VAR-SENDS$;
and in macro.txt a macro which sets all send of the track %BIND-TR% to -inf:
$CLEAR-MF-B1-VAR-SENDS$ =
%BIND-TR% / SEND A 0;
%BIND-TR% / SEND B 0;
%BIND-TR% / SEND C 0;
%BIND-TR% / SEND D 0;
%BIND-TR% / SEND E 0;
%BIND-TR% / SEND F 0;
%BIND-TR% / SEND G 0;
%BIND-TR% / SEND H 0;
%BIND-TR% / SEND I 0;
%BIND-TR% / SEND J 0;
%BIND-TR% / SEND K 0;
%BIND-TR% / SEND L 0;

6) future plans / future-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 needs more time.
I also want to do more assignments/mappings for the H9 or something on my pedalboard which is harder to reach.
I will take it from here and make some music with it and after a while I get new ideas or find drawbacks. I’ll gather them and then refine and reprogram my setup. I do this now since December 2020 and I am at Version 5.9. This is although a number which is absolutely not meaningful, because I do not have a proper version history. But I could probably switch to “alpha”?