MT & Ableton Live: track arming/disarming with patch cha

Maddcow

2009-01-26 13:52:55

Hi all. I'm new to MT and am using it with Ableton Live 7.0.14 on a Mac. Here's what I'd like to do:

I'm using 5 different softsynths on 5 different tracks and want to arm individual tracks when certain patch changes are received, but then disarm those tracks when patch changes are received that utilize a different synth on another track.

Is it possible to configure MT to arm a certain track/s (via a pre-configured keystroke) when certain patch change numbers are received, but then disarm that track/s when other patch numbers are received that don't use that particular track/s? Also, I sometimes layer the synths by using 2 or more simultaneously and so there are times that I'd need to arm multiple tracks simultaneously too.

I know it's easy enough to arm a track when a certain patch number is received, but I'm not sure how I'd go about configuring MT to disarm the track when other patch numbers are received that don't use that track. I guess I'd need MT to retain variables that record the current state of each track and whether it should be armed/disarmed depending on the patch numbers being received? Live uses toggle state switching for track arming/disarming instead of separate On/Off states, and so I need a solution where I can't accidentally arm/disarm a track because the toggle state somehow gets messed up.

Here's a practical example:
Patch #01, #05, #06, #11 = Track 1 ON, tracks 2-5 OFF
Patch #02 = Tracks 2 & 3 ON, tracks 1,4 & 5 OFF
Patch #03, #19, #07 = Track 2 ON, tracks 1,3,4,5 OFF

So you can see that MT would have to arm/disarm tracks based on patch change recognition.......similar to having a database query, I guess, with On/Off toggle state commands being returned across all 5 tracks based on the patch number being received. BUT, MT would have to remember the state of each track i.e. whether it should currently be armed or disarmed, based on the previous patch change command.

Can anyone help?

florian

2009-01-27 16:29:04

Hi,

this is fairly easy with the Rules. As a scheme, you should first break down which conditions need to be met for each individual action.

E.g.
action "Arm Track 1":
- change to patch 1, 5, 6, or 11
- track 1 is not armed yet

action "Disarm Track 1":
- change to patch different from 1, 5, 6, or 11
- track 1 is armed

and so on for the other tracks.

Now when you know all the conditions, you can write the rules. We use "g0" to track the state of track 1: if it is 0, it is currently unarmed. If it is 1, it is armed.

Code: Select all

Translator 1: "Arm Track 1"
Incoming: MIDI C0 pp
Rules:
 if g0==1 then "exit rules, skip outgoing action"
 if pp==1 then goto "OK"
 if pp==5 then goto "OK"
 if pp==6 then goto "OK"
 if pp==11 then goto "OK"
 exit rules, skip outgoing action
 label "OK"
 g0=1
Outgoing: keystroke <arm track 1>

Translator 2: "Disarm Track 1"
Incoming: MIDI C0 pp
Rules:
 if g0==0 then "exit rules, skip outgoing action"
 if pp==1 then "exit rules, skip outgoing action"
 if pp==5 then "exit rules, skip outgoing action"
 if pp==6 then "exit rules, skip outgoing action"
 if pp==11 then "exit rules, skip outgoing action"
 g0=0
Outgoing: keystroke <disarm track 1>
Now you'll do the same with the other tracks. Use g1 for tracking the ON/OFF state of track 2 and g2 for tracking track 3.

Let me know how it works!
Florian

Maddcow

2009-01-29 00:23:18

Hi Florian,
Thanks heaps for your help! However, it doesn't work at all. And something else I should have made clear is that due to the restrictions of Live and its toggling functionality, the same keystroke arms/disarms a track. I don't know if that will make a difference, though.

Gary

Maddcow

2009-01-29 03:05:22

Don't worry.....I just realised that I had a small mistake in the Disarm rules. Somehow I'd put

Code: Select all

If g0==1 then exit rules, skip outgoing actions
instead of

Code: Select all

If g0==0 then exit rules, skip outgoing actions
I can't believe I missed that!

florian

2009-01-29 10:04:53

so it works then? great!
Florian

Maddcow

2009-01-29 11:15:09

florian wrote:so it works then? great!
Florian
Yep, it works perfectly! Thanks so much Florian. Any ETA on another beta or a final version for Mac? MT is now an integral part of my gig rig and I can't do without it!

bob hunt

2010-02-26 20:24:22

Hi Florian,

Madcow gave me the link to this forum thread via a Windcontroller forum. He also suggested that I buy your MT.
I have it and it works well but with the same problem in Reaper as Gary had in Abelton Live. I am emulating a key function to Arm a Track and solo it with a Ground Control midi footswitch. The problem is that when another switch is selected to activate another track the first track stays activated unless it is clicked off. I have tried to look at the example and follow your rules script and and I can't get anything to work.
I don't have the knowledge or experience to figure this out. Do you have any suggestions how i can learn how to use your software to do what i want.

florian

2010-03-01 22:46:05

Hi Bob,

so you need to track which track is currently solo'd and unsolo it when you switch to a different track? And you do all that by way of the Ground Control? Then the script above is, in principle, the right thing.

I admit that the Rules feature is a fairly advanced use of Midi Translator (MT), but that's where the fun starts!

Learning how to create your own translators and rules in MT is best done with the combination of:
1) the user manual (now available as PDF)
2) looking at presets that ship with Midi Translator, and snippets on the forum here and try them, and try to understand them.

If you tell me your exact setup, I can guide you for how to modify the script above to your setup.

Regards,
Florian

bob hunt

2010-03-01 22:56:47

thanks for replying Florian.
I would really appreciate your help. Using your software has already helped to eliminate one piece of hardware (a USB footswitch).
Getting this setup to work without stepping on the switch twice would be fantastic. I will work on a description of what I am doing and want to do and reply.

bob hunt

2010-03-02 02:47:19

Hi Florian,
Thank you again for your willingness to help.
I am going to write out the scenario for my rig, but first I have a couple of things to ask about.
The assignment variables are pp through ww for local, and I see the g variables are global. I don't understand why you would pick pp instead of ww. I don't see these variables defined anywhere in the manual. My situation is very similar to Madcow's and I tried to duplicate that using your script. I am sure I did not plug in the correct values for the variables. Could you give a small demo of real numbers plugged into the formulas or point me to a thread here that shows the exact values and how they are used. I tried to input my values where pp would be so that's probably a stupid gaff but I don't have a clue.

Here is the description of the functions I would like to do:

I play a windcontroller called a Synthophone and the following is a description of how I use the Bome MT software with the Voodoo Labs Ground Control Pro. At this link http://www.saxmagic.net/gear.html is a drawing that might provide a perspective on the midi flow of things . This is on the gear page of my website . The flow chart is in the lower right of the group of pictures.
I am currently using one Hardware Synth a Yamaha VL70m. Most of my solo work is accomplished from this Synth. I do have a few solo voices that I like to use that come in the form of VST instruments that are hosted in Reaper. And the primary use of the instruments in Reaper is to play a horn section that is very realistic and convincing. For some songs that I play I need to switch from a solo instrument or instruments to this layer of tracks that make up the horn section.

I like to use Reaper as a host because it is a small program, it hosts VST’s well, and it has an Action key section that allows for changing tracks by assigning the actions to keys on a Qwerty keyboard.
When I first started out with a Laptop for performance I changed patches with a Tech 21 Midi Mouse in the VL70m, and changed tracks with the Qwerty Keyboard. I quickly found out it was awkward and slow trying to change tracks by using my hand to make the changes. I invested in a 3 switch USB Foot controller. This works but it is limited to 3 patch changes. So most of the time I used the Midi mouse to change solo voices with the Midi Mouse and set up one of the USB switches to turn on 4 tracks in Reaper.
On these tracks are Tenor, Alto, Baritone saxes, and a Trumpet from Sample Modeling.
Every time a track is turned on or made active each track uses the action section to turn on the Arm for recording, and solo track. The reason Arm for Record and Solo is turned off is that with these functions turned off and the track also muted the CPU usage drops to nothing . Now after purchasing the Bome MT software the only hardware required for switching patches and tracks is the Ground Control. Below is the scheme for what I am trying to accomplish.

Patch #1 = VL70m silent patch, Reaper Tracks 1(MrT),2(MrA),3(MrB) , and 4(Trumpet) on. Function is assigned to F1 on the QWERTY keyboard and the outgoing in the MT. Midi control 1 on the Ground Control.

Patch #2= Mbrecker in the VL70m, Reaper Tracks all off , Arm for recording off, and solo off

Patch #3= Flute in the VL70m, Reaper Tracks all off , Arm for recording off, and solo off

Patch #4= Soprano in the VL70m, Reaper Tracks all off , Arm for recording off, and solo off

Patch #5= Bone in the VL70m, Reaper Tracks all off , Arm for recording off, and solo off

Patch #6= VL70m silent patch, Reaper Track 1 is on , Arm for recording off, and solo off

Patch #7= VL70m silent patch, Reaper Track 2 is on , Arm for recording off, and solo off

Patch #8= VL70m silent patch, Reaper Track 3 is on , Arm for recording off, and solo off

Patch #9= VL70m silent patch, Reaper Track 4 is on , Arm for recording off, and solo off

Patch #10 = VL70m silent patch, Reaper Tracks 1(MrT),2(MrA),3(MrB) , and 4(Trumpet) on.

Patch #11= EWI in the VL70m, Reaper Tracks all off , Arm for recording off, and solo off

Patch #12= Sanborn in the VL70m, Reaper Tracks all off , Arm for recording off, and solo off

Patch #13= Mangione in the VL70m, Reaper Tracks all off , Arm for recording off, and solo off

Patch #14= Blues Harp in the VL70m, Reaper Tracks all off , Arm for recording off, and solo off

Patch #15= VL70m silent patch, Reaper Track 5 is on , Arm for recording off, and solo off

Patch #16= VL70m silent patch, Reaper Track 6 is on , Arm for recording off, and solo off

Patch #17= VL70m silent patch, Reaper Track 7 is on , Arm for recording off, and solo off

Patch #18= VL70m silent patch, Reaper Track 8 is on , Arm for recording off, and solo off

Etc…

florian

2010-03-02 11:50:22

Hi Bob,
bob hunt wrote:The assignment variables are pp through ww for local, and I see the g variables are global. I don't understand why you would pick pp instead of ww.
Choice of variables is arbitrary. "oo" to "zz" are local variables. I usually start with pp, because "oo" can be read accidentally as "00". Once you assign pp a value, then you'll be able to work with pp. You can take my script above and replace all occurrences of pp with qq or ww or zz and it'll work just the same. The general rule of thumb is to use local variables ONLY inside one rule set.

A variable is used by Midi Translator. You need to copy/paste the Rules script as-is into the rules editor (or, on Mac, re-create the script). Just run Midi Translator and invoke the rules section in "Edit Translator" You'll see what I mean.

After creating the translator and rule, Midi Translator will analyze incoming MIDI messages. In the script above, it will not do anything unless it sees MIDI message that start with "C0" (a program change message). Program Change messages have 2 numbers, the first is "C0" (hexadecimal), the second is the program number to change to (from 0 to 127 decimal). Now since in the "Incoming" section of the translator, I set the second number to a variable, for each incoming program change message, Midi Translator will assign pp the value of the program number and execute the rest of the translator with it. It will first execute the rules line by line. For example, the second line tests pp for the value 1. So if you send a program change to program 1, pp would have value 1 and the second rules line will result in "goto OK", because pp is indeed 1.
bob hunt wrote:Patch #1 = VL70m silent patch, Reaper Tracks 1(MrT),2(MrA),3(MrB) , and 4(Trumpet) on. Function is assigned to F1 on the QWERTY keyboard and the outgoing in the MT. Midi control 1 on the Ground Control.
Reading this, I assume that you want this:
when you press this button on the ground control, it sends Program Change #1 to the computer. On the computer you want it to press F1.
I don't quite understand the part about "outgoing in the MT...".

For a static MIDI-to-keystroke mapping, you don't even need rules:

Incoming: MIDI C0 01
Outgoing: Keystroke "F1"

Now when you switch to patch #1, Midi Translator will emulate pressing F1 on the qwerty keyboard.

Let me know if you get this far... (and, actually, this is one of the tutorials in the user manual!). I you want to be able to create your own advanced mappings, it's probably useful to start step-by-step with the user manual.
If you tell me exactly which keystrokes and MIDI messages should be sent and received and under which condition, I can further guide you to "your" preset, of course.

Thanks,
Florian

bob hunt

2010-03-02 19:56:47

Reading this, I assume that you want this:
when you press this button on the ground control, it sends Program Change #1 to the computer. On the computer you want it to press F1.
I don't quite understand the part about "outgoing in the MT...".
Yes On the computer F1 is the key emulation I want
For a static MIDI-to-keystroke mapping, you don't even need rules:

Incoming: MIDI C0 01
Outgoing: Keystroke "F1"

Now when you switch to patch #1, Midi Translator will emulate pressing F1 on the qwerty keyboard.
I am already doing this operation successfully but I don't want to press the button again to disable the track before selecting a new one.
If you tell me exactly which keystrokes and MIDI messages should be sent and received and under which condition, I can further guide you to "your" preset, of course.
I will try this again.

Press button 1 on the ground control C0 00 = arm track 1, arm track 2, arm track 3, arm track 4= F1 on the keyboard VL70m patch1
Press button 2 on the ground control C0 01 = all tracks off no key emulation VL70m patch2
Press button 3 C0 02 = all tracks off no key emulation VL70m patch3
Press button 4 C0 03 = all tracks off no key emulation VL70m patch4
Press button 5 C0 04 = all tracks off no key emulation VL70m patch5
Press button 6 C0 05 = all tracks off no key emulation VL70m patch6
Press button 7 C0 06 = all tracks off no key emulation VL70m patch7
Press button 8 C0 07 = all tracks off no key emulation VL70m patch8
Press button 9 C0 08 = all tracks off no key emulation VL70m patch9
Press button 10 C0 09 = all tracks off no key emulation VL70m patch10
Press button 11 C0 10 = track 1 on, all other tracks off VL70m patch1
Press button 12 C0 11 = track 2 on, all other tracks off VL70m patch1
Press button 13 C0 12 = track 3 on, all other tracks off VL70m patch1
Press button 14 C0 13 = track 4 on, all other tracks off VL70m patch1

florian

2010-03-03 21:14:22

I'm still not really sure what the problem is, sorry for my ignorance!

Let's assume that you define
F1: arm track 1
F2: arm track 2
F3: arm track 3
F4: arm track 4

F5: disarm track 1
F6: disarm track 2
F7: disarm track 3
F8: disarm track 4

Then the first translator would be
Incoming: C0 00
Outgoing: Keystroke "F1 F2 F3 F4"

The last translator will be
Incoming: C0 13
Outgoing: Keystroke "F5 F6 F7 F4"

Does that make sense?

I don't know what you mwan with "no key emulation" or with "VL70m patch X".
Florian

bob hunt

2010-03-03 22:17:08

I don't have a problem with you not understanding me, I just hope I am not driving you crazy. I would like to get this thing to work the way I want but it is not the end of the world. I did make an improvement to my rig by at least adding one good function and eliminating a piece of hardware (the USB foot switch) If you want to give up I understand. I am an old non technical man that has just enough brains to be dangerous.
I'm still not really sure what the problem is
Here is an example of the problem:
I have setup the very first switch on the Ground Control to do 2 things at once.
1/ Select a patch in the VL70m that is Silent (makes no sound) or essentially is blank
2/ Select 4 Tracks at once in Reaper 1-4 that create a layer

The problem is that within Reaper The action keys respond so that with one button press the tracks are activated by the key emulations. Unless this button is pressed a second time to disable it, when another switch is pressed the 4 tracks will still sound with the new track.

I don't know what you mwan with "no key emulation" or with "VL70m patch X".
No key emulation = nothing , no tracks selected in Reaper. the only function the Ground Control midi switch is doing at this point is selecting a patch in the Yamaha VL70m hardware synth.
I was trying to point out

florian

2010-03-04 00:02:32

so in Reaper you cannot assign a separate key press for "disarm"? It's always a toggle: pressing it once will arm it, pressing it another time will disarm it?
F

bob hunt

2010-03-04 00:35:24

so in Reaper you cannot assign a separate key press for "disarm"? It's always a toggle: pressing it once will arm it, pressing it another time will disarm it?
Yes!!! That's it

bob hunt

2010-03-04 01:12:07

Florian,
You gave me an idea.
I looked again at Reaper. There are actions: unsolo all tracks, and unarm all tracks. I put these actions on the first two lines and and on the next two lines these actions: Toggle solo, and toggle Record Arm. The action commands in Reaper are implemented from the first line on just like in MT.
This should easily work in MT. I'm going to try it now.

bob hunt

2010-03-04 02:31:15

Yeaaaah Wa Hoo!
I put these actions on the first two lines and and on the next two lines these actions: Toggle solo, and toggle Record Arm. The action commands in Reaper are implemented from the first line on just like in MT.
This worked except I had to add in Reaper the lines Unsolo all tracks, and Unarm all tracks to any other tracks I will use .

Project: Reaper 3-3-10
_____________________________________________________________
Preset 0: SM Horns

Translator 0.0: Horn Section
Options: stop=false
Incoming: MIDI C0 00
Outgoing: Keystroke: F5

Translator 0.1: Mr T
Options: stop=false
Incoming: MIDI C0 05
Outgoing: Keystroke: F1

Translator 0.2: Mr A
Options: stop=false
Incoming: MIDI C0 07
Outgoing: Keystroke: F2

Translator 0.3: Mr B
Options: stop=false
Incoming: MIDI C0 08
Outgoing: Keystroke: F3

Translator 0.4: The Trumpet
Options: stop=false
Incoming: MIDI C0 09
Outgoing: Keystroke: F4

Translator 0.5: all Reaper tracks off
Options: stop=false
Incoming: MIDI C0 01
Outgoing: Keystroke: F6

Translator 0.6: all Reaper tracks off
Options: stop=false
Incoming: MIDI C0 02
Outgoing: Keystroke: F6

Translator 0.7: all Reaper tracks off
Options: stop=false
Incoming: MIDI C0 03
Outgoing: Keystroke: F6

Translator 0.8: all Reaper tracks off
Options: stop=false
Incoming: MIDI C0 04
Outgoing: Keystroke: F6

Translator 0.9: all Reaper tracks off
Options: stop=false
Incoming: MIDI C0 06
Outgoing: Keystroke: F6

Translator 0.10: all Reaper tracks off
Options: stop=false
Incoming: MIDI C0 0A
Outgoing: Keystroke: F6

Translator 0.11: all Reaper tracks off
Options: stop=false
Incoming: MIDI C0 0C
Outgoing: Keystroke: F6

Translator 0.12: all Reaper tracks off
Options: stop=false
Incoming: MIDI C0 0D
Outgoing: Keystroke: F6

Translator 0.13: all Reaper tracks off
Options: stop=false
Incoming: MIDI C0 0E
Outgoing: Keystroke: F6

Translator 0.14: all Reaper tracks off
Options: stop=false
Incoming: MIDI C0 0F
Outgoing: Keystroke: F6

Translator 0.15: all Reaper tracks off
Options: stop=false
Incoming: MIDI C0 12
Outgoing: Keystroke: F6

Translator 0.16: all Reaper tracks off
Options: stop=false
Incoming: MIDI C0 13
Outgoing: Keystroke: F6

Translator 0.17: all Reaper tracks off
Options: stop=false
Incoming: MIDI C0 15
Outgoing: Keystroke: F6

Translator 0.18: all Reaper tracks off
Options: stop=false
Incoming: MIDI C0 16
Outgoing: Keystroke: F6

Translator 0.19: all Reaper tracks off
Options: stop=false
Incoming: MIDI C0 17
Outgoing: Keystroke: F6

Translator 0.20: all Reaper tracks off
Options: stop=false
Incoming: MIDI C0 18
Outgoing: Keystroke: F6

Translator 0.21: all Reaper tracks off
Options: stop=false
Incoming: MIDI C0 19
Outgoing: Keystroke: F6

Translator 0.22: all Reaper tracks off
Options: stop=false
Incoming: MIDI C0 1A
Outgoing: Keystroke: F6

Translator 0.23: all Reaper tracks off
Options: stop=false
Incoming: MIDI C0 1B
Outgoing: Keystroke: F6

Translator 0.24: all Reaper tracks off
Options: stop=false
Incoming: MIDI C0 1C
Outgoing: Keystroke: F6

Translator 0.25: all Reaper tracks off
Options: stop=false
Incoming: MIDI C0 1D
Outgoing: Keystroke: F6

Translator 0.26: all Reaper tracks off
Options: stop=false
Incoming: MIDI
Outgoing: Keystroke: F6

florian

2010-03-04 16:21:30

great to hear! enjoy :)
Florian