Trigger a midi effect (pitch/expression envelope) with the press of a button on an external controller

This was the question I posted in Ableton user forum:

How do you assign and trigger a midi effect on a button. For example, I’m playing a melody on the Push in note mode, but, at the last note, I’d like to pitch down and increase expression simultaneously (predefined envelope shape) with the press of a button. This button is on an external midi controller like DJtech tools midi fighter 3d. Note, I don’t want to use the touch strip because of specific envelope modulation shapes I’d like to use.

This was the answer they provided:

No you can’t combine e the standard Modes (Session, Note) with controlling other elements of Live.

I’m wondering if there’s a way to program this in Bome. I have a Push 2 for the melody, and a DJTechTools Midi Fighter for my Midi effect ‘trigger-er’

Well we can send the trigger but it is up to the Push in whether it can do anything with it. We probably would not be able to duplicate the envelope you want, but we could do a ramp type series of MIDI CC’s or pitch bend using a timer.

Steve Caldwell
Bome Customer Care

Also available for paid consulting services:

A ramp down would be good. We could try 0.5, 1, 1.5, and 2 seconds. The Push would be controlling a VST in ableton. I wonder if by ‘sending’ the trigger to Ableton, we can map it to that parameter

Hi @Oliver.Oliverio

Please find the attached example. Translator 0.0 is triggered by note-on any value and starts a timer.

The first rule is used to determine how long you want the timer to run (in milliseconds). I set it to 500 (1/2 second) here.

// enter the number of milleseconds you want to use here

The second rule sets the ramp down staring point. Since we are sending a CC message you don’t want to put more than 127 here.

// enter the starting point here. Do not put value
// greater than 127

Then we calculate how many milliseconds the timer must trigger for each output value

// given value of 0-rr how many times must
// we output the a value to achive the
// time frame. We need to output a new value
// every ss msec
// Starting point

Then we trigger the timer with a repeat count of 128 (max) and an interval of ss milliseconds.


Translator 0.1 is the timer. It starts with the value of ga (starting point) and decrements each iteration. After reaching 0, we stop outputting messages.

Here are the rules:

// Don't send anything more than 127
if pp>127 then Log "Log %pp%>127 - Setting to 127"
if ga>127 then ga=127
if ga>=0 then skip next 2 rules
exit rules, skip Outgoing Action
Log "Log Ramp value is %ga%"

In this case I’m sending CC4.


Here is the project file.

cc-ramp.bmtp (1.7 KB)

Steve Caldwell
Bome Customer Care

Also available for paid consulting services: