Momentary button to send effect with max value
I have a momentary button and I wanna send my send1 to max value (127). I also have a Knob1 that controls the send1. But additionally I want to have a that momentary button. For some reason I can’t manage to send the value of the send1 to max when pressed.
I tried with reaction, but without success (but maybe there is a easier way):
Listener: Button 1o was pressed
Action Block1:
Condition: Button 10 latest velocity value is equal – 127
Action: MIDI Controller – send MIDI velocity value to Controller input Knob1 Value 127
Action Block2:
Condition: Button 10 latest velocity value is not equal – 127
Action: MIDI Controller – send MIDI velocity value to Controller input Knob1 Value 0
Maybe it’s wront to send the velocity value to Knob1, but I couldn’t find an option how to set the send1 directly.
Any ideas on how I can achieve this?
Any help is appreciated
Hey Ruz,
I think I had what you’re going for in an earlier script of mine. Take a look at the stripped down script I attached and see if it helps.
Send 6 is the example, I have the first device control module mapped to the encoder and the second mapped to the button.
I hope this helps you.
Ruz, this is true… in the version I sent you I was using it as a send toggle, not a momentary. In this version I was using it as a channel switch to send to looper. After looking closer, I see the predicament/challenge you are calling out. The only immediate solution that comes to mind is to hard code the button as momentary. John may have some other tricks up his sleeves for you.
I thought I had a version of this that I used as a momentary dub delay send, but now I’m having a hard time finding it. I’ll look around some more and if I find it, I’ll share.
Hi all, I have managed to create momentary buttons that set the send value to max when pressed. Hope this helps (check the screenshots below):
For this I had to create 2 Reactions for every Button
– for when the button is pressed
– for when the button is released
Is there any other way?
Because it is a bit nerve-racking, maybe someone (John?) knows an easier way.. maybe using modifiers?
QUESTION:
On release, I would like the send value to be set to whatever was the previous value. Currently, when I release the button it sets the send value to 0.
For example:
– send value = 20
– button press -> value = 100
– button release -> value = 20 (NOT 0)
Does anyone have any directions on how I can achieve this?
Thanks a lot


I wouldn’t mind giving this a look in the next couple of days. I’ve got a few ideas on how to approach this one. For now, I’ll share some of my thoughts:
Using Modifiers
If you rather wouldn’t have any custom code used, then your idea of using a modifier should do the trick (at least for singular Reactions).
In the first Action Block, that only fires when the button is pressed down, you should then add an Action that saves the current value of the send to a modifier. Make sure this Action is placed before the one that sets the value to 1.
In the second Action Block, you can then use the modifier as your value.
Through this method, you would need a separate modifier for each Reaction.
Using a List
If you don’t want all your Modifiers used up by all these Reactions, then a List would be more useful. I haven’t used Lists a lot myself, I’d be of more help if I’ve taken the time to look into them, but here’s a way on how it might work out.
Create a Reaction that Listens to script initialization (in other words, when the script is established inside Ableton). The add Actions that fill up the positions of a List with values of 0 (the amount of positions depends on how many sends you want to control this way). This 0 value is the current default value but will be overwritten through the other Reactions. This filling out of the positions is just to make sure that you can refer to any position and you wouldn’t get an error or something. For example, if the list were still empty, but your button press wants to change the value of the third position in that List, then you would have a problem. This Reaction solves this.
Then you could make Reactions just like you would do using the Modifier method, but instead of saving a value to a Modifier, you save it to a position in the List. Then you can also recall the value saved at that position.
You’ll only need one List dedicated to storing Send values.
Using one Reaction to control all Buttons
There is a way to reduce the amount of mappings that control the button presses to just one Reaction; this method uses the Listener Number. Basically, you add all the buttons as a Listener to one Reaction in a fixed ordering. Each Listener gets a Number assigned to it automatically, this is called the Listener Number. The top-most Listener gets number 1, the one below that 2, and so on…
Let’s say the first Listener controls the first send. Using the Path Menu of the Action that changes the Send value, you can insert the Listener Number for the Send you want to target. In this case, because Listener Number is 1 and you want to target Send 1, it translates directly. To avoid any complications, it would be best if your Listener Number is directly tied to the number of the Send (1 to 1, 2 to 2, 3 to 3, …).
Okay, we now have an idea how to target a Send using the Listener Number, but how will we be able to tell an Action Block if a button was pressed or not? The Reaction can receive input from multiple buttons, so we need to set up the Condition section of each Action Block so that it checks ALL of those button values.
Let’s take the first Action Block as an example, we want it to check if the pressed button’s value is 127. Here’s how you could set it up:
- Add a Condition that checks if the Listener Number is Equal To 1
- Then press the green AND button to add a condition that checks if the current value of the same button as Listener 1 has a value of 127
- The press the blue OR button to add a Condition that checks if the Listener Number is Equal To 1
- Then press the green AND button to add a condition that checks if the current value of the same button as Listener 2 has a value of 127
- and so on…
As you can see, we’ll need a pair of conditions for each Listener: one that checks the Listener Number, and one that checks the current value of that Listener. The reason for this pair is that there could be situations in which you’ve pressed 2 or more of these buttons; if your Condition would only check for which Listener Number was pressed, then we wouldn’t know if the value of that Listener was high or low; if the Condition would only check for a value of 127 on any of the Listeners, the this Action Block could also fire when one button is held down while another is released, the released button would have triggered the Reaction, but the held button would trigger Action Block 1 (I hope you can imagine this)
Setting up these Conditions for Action Block 1 might take some work. For Action Block 2 make the need for any Conditions obsolete by adding one more Action to the end of Action Block 1 which is called “exit reaction“. This Action does as its name suggests, it stops any further Actions from being done. So how does this Action help us out. Here’s a breakdown of how it would work out:
- You press a button
- Action Block 1 checks if the Listener Number is tied to the button you’ve pressed down. It sees a value of 127 for that button and procceeds to the Actions.
- First the current Send value is saved (to a List’s position equal to the Listener Number)
- Then the Send value is set to 1
- Last, the Reaction is exited (meaning Action Block 2 won’t play out)
- You release the held button
- The Reaction first goes through all the Conditions of Action Block 1 but can’t find one where a button, tied to the current Listener Number, has a current value of 127. So it proceeds to Action Block 2.
- Action Block 2 doesn’t need any Condition because we can be certain that the button, linked to the current Listener Number, has a value of 0.
- Action Block 2 will send the value stored in the List’s position, that’s equal to the Listener Number, to the Send tied to that Listener Number.
These were some of the modifications I could think off that don’t use Custom Code. All was written of the top of my head, so there could be mistakes in there, or I might have overcomplicated things. I’m certain the third chapter could be made simpler with Custom Code.
There’s also a whole other approach possible with Custom Code where you keep a Reaction in Ableton’s loop until you release the button; this way you wouldn’t need to store the Send Value, because the Reaction will have remembered it until the release of the button.
Cheers Glenn, thank you so much for taking your time to respond. I mean really! And super detailed… appreciate it bro.
Regarding Using Modifiers, I finally understood how to use them, thanks. Won’t go with that option, because I don’t wanna waste all modifiers and doesn’t sound like the smartest solution.
Regarding Using a List, to initialize the list with 0 makes sense to me. Did I get it right: one list represents one channel, and the list items represent each send value? Meaning I would create one list per channel? But I would still need 2 Reactions (pressed/released) for every Button, as I have above, correct?
Using one Reaction to control all Buttons
Now this is where it gets interesting. When you say Custom Code, you mean adding python code directly into CSS or via user.py file? I have coding background myself, so that would be a nice challenge for me.
However, I havn’t found any documentation that could help me here. Do you know if there’s any around besides the one youtube video?
There’s also a whole other approach possible with Custom Code where you keep a Reaction in Ableton’s loop until you release the button; this way you wouldn’t need to store the Send Value, because the Reaction will have remembered it until the release of the button
> This would be so dope. Would love to try, but not sure where to start
Anyways you helped a lot, thanks again!
Sign up
User registration is currently not allowed.