Creating an octave transpose for midi controller button

I’m trying to achieve binding two buttons on my midi controller (Guitar wing) to transpose an octave up and down.
They should then work so successive presses transpose again (1 press = +12 semitones, 2 presses = +24 semitones) so a relative functionality.
I found the Transpose in the background rack, but that is absolute which also means that if I use those I will need three buttons : one transpose up +12 semitones, one -12 semitones down and one “reset” (0 semitones).
Is my goal achievable?

The way I do it is to create a Transpose Rack, with rack states set to -36, -24, -12, 0, +12, +24, +36, or wider if you need, and put a route inside that handles the different transposes for each state. Set up two bindings in the rack, from your controller buttons for next/previous rack state.

Then all you need to do is in a song that requires this kind of transposing, just route the MIDI through it. Alternatively, you could set up a Guitar Wing rack, that you drop into a song and it acts as a MIDI input from the controller, with the transpose (and any other) functionality built in.



Another great idea Neil!


Hi Carsten,

Yes, this can be done a few ways

  • have one #cc button that cycles through your transpose choices

  • have one #cc button for above normal tuning and one for below normal tuning

These may not be perfectly what you want but as shown the commas allow you to cycle through values on the same switch. Hope you get it going …



What if was to add a binding for Transpose Up Octave/Transpose Down Octave?

1 Like

I think it would be a great addition so yes!



Transpose what up/down an octave though? I would think ideally the target of the binding should be a route, so MIDI passing along that route (only) is transposed.


Made some changes:

  1. New binding targets for Transpose Octave Up and Transpose Octave Down for the Song (ie: global transpose)
  2. New binding targets Tranpose Octave Up/Down (Snapped). Where “snapped” means to go to the nearest whole octave transpose. So transposing up one octave from +0.2 would go to +1.0 instead of 1.2
  3. The same set of transpose binding targets for MIDI routes.
  4. The transpose setting of MIDI routes can now be used as a binding source (in Performer).

This will be included as part of a bigger update I’m hoping to release probably next week.



Wow that is really quick response here - again i’m impressed!
To understand your last post @brad, this will implement the “relative” functionality? So if I apply “Transpose Octave Down” twice I get a -24 transpoe (two octaves)?
Just reread your post: - the “snapped” is maybe the way to go for my “relative” request, while the “unsnapped” is absolute?
So with the snapped it goes from +0.2 to +1.0 and the next activation will bring me to +2.0? (which is the nearest up from +1.0)?

@dave_dore that is a neat trick (I didnt know about the cycling values)
However if I understand correctly - in the first one you will have to cycle all the way to get back to 0 transpose.
And in the second you will get jumps ( if you are at +24 and press btn2 you get to 0.
It might be a lot of button presses
I will have to try these though (Im away from the studio)

@Neil_Durant I will definitely look into making a guitar wing rack - very good suggestion.
If I can get it to behave :slight_smile: currently I have it setup in the background rack - but a device specific rack is great -( if I can drop it in the background rack, so I wont have to change and resave my songs)

Ive tried your suggestions here - problem is when the transpose takes effect it also transposes the midi button clicks which are sent as note triggers from the guitar wing…so at the first transpose i’ve ruined the mappings from the controller :slight_smile: hmmmm. now i will have to get in to some advanced routing wont I? Different midi channels, or something else…?

Different MIDI channels for real notes and trigger notes would be the simplest solution.

If for some reason you need to use the same channel, the note trigger bindings need to come before the transpose. Or alternatively apply a filter on the route that’s transposing, so only the non-trigger notes are transposed.


1 Like

Both snapped and unsnapped are relative and will accumulate - so two presses will take you two octaves. The difference is what happens when you’re not on an octave boundary to start with:

+0.2 → transpose up (snapped) → +1.0 → transpose up (snapped) → +2.0
+0.2 → transpose up (unsnapped) → +1.2 → transpose up (unsnapped) → +2.2

Make sense?

1 Like