I would like to have a Preset+ and a Preset- Button on one of my Hardware Controllers.
I have for example the XSonic Airstep. On the Airstep I have five Buttons who send MIDI Notes like C3, E3 etc.
How can I transform with the MIDI Hub Software C3 into a Preset+ and E3 into a Preset- Function?
With the Preset+ and Preset- Buttons I would like to step through the presets of external MIDI Devices like for example my Boss GT-1000 effect unit or my Clavia Nord Stage Keyboard.

If those buttons respond to midi, all you need to do is use a transform pipe, transforming whatever control you want to use into whatever midi message the preset+ responds to and send it back to your device.

I wasn’t sure–without going in search of manuals–whether the devices would be expecting a ± event, or an absolute Program Change (or whatever) number. That approach would fit with allowing sequencer to send a message prior to the next phase of a performance.

If it is the latter, it’s a bit more complex (and needs similar strategies to PC to CC question)
Do-able though.

@Funkeys, what are the two devices receiving to change “preset”?

This is what you’ll need to find out. I don’t have the devices so I can’t quite help you there. You’ll need to hit the manual and check its midi implementation chart if it has one, or you’ll need to ask around in the forums for these devices if any. Most likely, if it is possible to map these externally, the manual should specify what messages it needs. Another option is to contact the support channels of the device manufacturer and have them confirm they respond to midi and what messages.

1 Like

The devices are Boss GT-1000 and Clavia Nord Stage.
In the MIDI Implementation of those devices there is nothing to find about Preset+/Preset-
I am using also the Software Gig Performer. In Gig Performer you can use a kind of universal scriptlet wich gives you the functionality of Preset+/Preset- and it is working fine among other devices with the GT-1000 and the Nord Stage.

I was just wondering if it would be possible to achieve the same with the MIDI Hub Software and how.

Ok, it looks like this scriplet is sending out CC/PCs. So if you’re sending out either of these messages to the GT or NS successfully, then can you see what it is that’s being sent?
One way would be by routing the messages through a DAWs MIDI monitor, I guess. Another might be to send the scriptlet’s output to Midhub via USB and then on to GT or NS so you can see what is being sent to make the Preset changes.

Almost certainly Yes, but explaining How depends on the info above!

Unfortunately in the MIDI Monitor you see only that a Program Change is being send, so there is something under the hood going on.
(As a new member I can not post the screenshot), but the MIDI Monitor only shows
Program Change 1, Channel 1
then if you press the + button it shows
Program Change 2, Channel 1

This is the authors info on the scriptlet:

This scriptlet provides a simple way to increment or decrement either Control Change (CC) message values or Program Change (PC) messages.


It is commonly used to move up/down through plugin internal presets, or those on external controllers/hardware.

Map the ‘Previous’ and ‘Next’ parameters in the scriptlet to two pad or button widgets (set as ‘Momentary Touch’ in the widget settings). The scriptlet’s MIDI out port should then be connected to your plugin’s MIDI input (if controlling a plugin) or a MIDI output port (if controlling external hardware).


  • Previous/Next: will move up/down the CC value or PC number. Note that these are designed to be mapped to a widget, If you try and change them in the scriptlet window, you will notice the slider snaps back to the ‘Off’ position - this is by design.
  • Current Value: Displays the currently active CC value or PC number. This can also be mapped to a widget to show you which is the current value. Note that you cannot use this parameter to change/send messages - it is only used for display.
  • Minimum/Maximum Value: You can limit the range of message values that you send. For example, once you reach the maximum value, pressing Next button will do nothing (exception is if you have looping activated).
  • Message Type: Choose between sending Control Change (CC) messages/values or Program Change (PC) messages.
  • CC Number: Choose the CC number to send (only applicable if the Message Type is set to CC).
  • Loop: When pressing Next and you reach the maximum value, you can choose to loop back around to the start (minimum value) or start decrementing the message value (if Loop Direction is set to ‘Ping Pong’). Note that this feature was designed only for when you are just using the Next button.
  • Loop Direction: If Loop mode is activated, ‘Forward’ will loop back to the start (minimum value) once you reach the last/maximum value; ‘Ping Pong’ will start moving backwards (decrement) once you reach the last/maximum value. Note that this feature was designed only for when you are just using the Next button.

Possibly you just need to transform your control into the right Program Change message. It’s just as simple as transforming your desired control into the correct message in midihub then sending it back out. The fact that it needs a scriplet though sounds like there may be some system exclusive messages being sent, so that could be a show stopper.

What I suggest to discover what can be mapped and getting familiar with the transform pipe, is a pipeline starting with an lfo. Make the depth high so you’ll
see easily device parameters being manipulated when successful. Then a transform pipe thats transforms the LFo’d CCs into (x) message, followed by an output pipe to your device. Now you can change output parameters in the transform pipe and you can quickly scroll through the messages and see how your device responds. To make it easier i would map some midi knobs(from a different device) to the transform parameters so you don’t have to use the mouse and can keep the output pipe’s monitor in focus.

This is the get in there and get your knuckles dirty method, and will give you a more intimate and complete understanding of mapping and controlling your devices. Knowledge that will be needed when you come up with a future cool idea or pressing need for Midihub and want to flesh it out quickly.

Well, if that’s working that should be enough to go on! [1]

@Funkeys are you fairly new to your Midihub or do you have some experiencee of the various pipelines and what they do? (Just so I know how much detail to go into!)

Also useful for me to know would be:

  • What channels are unused? (for example, I often keep Ch16 free so that I can use it to send events around Midihub without them affecting anything else)
  • Have you got a MIDI in & out free on your Midihub?(I assume you’re wanting a computer-less setup here)
  • Do you have a programmable controller with knobs/sliders that you can temporarily plug into Midihub? A Keystep is ideal. I guess, failing all else, your Nord might send out CCs from its many knobs (try it & tell us!)

[1] test with this Funkeys_Transpose_PC.mhp :
connecting Airstep>Midihub>Device should make C3 switch to Program 60, and E3 to 64 for example.
If that’s beyond the range of the device’s presets, use the Transpose Pipe to bring the numbers down to something that can work.
If getting the button to set a fixed preset does do what it should, then we’re ready to tackle the (trickier) job of getting the Midihub to increment/decrement when you hit the button

Thank you very much for all the helpful advice. Yesterday I have ordered my MIDI Hub. As soon I as I get it, I will give you feedback about my results.


Aha! Not much point in sending you patches yet then!

While you’re waiting for it to arrive it’s definitely worth adapting @JoeyButters advice and maybe using your DAW to see what changes what on your two devices. Then you’ll be ready to get up and running as soon as it hits your doorstep.
Prepare to be bowled over!

1 Like

Just in case, I’ve increased your trust level on the forum, file uploads should work now.


Thank you for the Transpose-mhp-File. OK, we both know that this is pretty basic. I just wonder if there might be an mhp-File floating around which really has an incremental functionality which could be adapted…

Unused Channels? I guess I could use Ch 16.
Free MIDI IN OUT on MIDI Hub? Yes, but I don’t need a computer-less setup.
Controller? Yes, as I said, I have for example the XSonic Airstep and an iRig Blueboard.

It will involve getting Midihub to hold the state of where you last were. I have posted solutions to similar problems recently [1] and can help you set one up when I know what your configuration is

Yes, indeed. The point of it was provide information, in order to help build a solution.

This solution (AFAI can see) will require a physical loopback. To set that up will need a device temporarily patched to your loopback-in.

(if you are using a computer and you have patching capability –eg MIDI Patchbay on a Mac– you might be able to send the mapping-set-up notes/cc’s from a DAW. Otherwise you’re looking at editing a foot ctller to do that before you return it to it’s usual set-up)

If this sounds like a pain, it is! But it’s a one-off pain & from there on Midihub will just quietly do it’s stuff…


  1. Have you got your hub yet? If you’re interested in getting your head around ‘solutions to similar problems’ I’ll point one/two out to you.
  2. Have you confirmed precisely what your two devices are receiving to do Preset±?
  1. My Hub is on its way. Anyway I would like to have a look into similar solutions - just with the editor.
  2. As far as I know the MIDI Implentation List of my devices does not contain an explicit Preset+/Preset-. I think we have to differentiate between two cases/devides.
  3. Devices where you can explicitly freely choose a CC which exactly will trigger a Preset+ or Preset- functionality. I think the Fractal Axe FX3 gives you this possibility. I had this device, but not anymore.
  4. Devices which expect/understand just a Program Change Message (like my Nord Stage or my Boss GT-1000) and so you have to find outside of those devices a solution to get the incremental functionality. For example via a Scriptlet in the case of Gig Performer.
    Anyway thank you for your feedback. It is a nice feeling to get such a lot of feedback, even if I haven’t received my MIDI Hub yet ;-), but as I said today I got a message from UPS that it is on its way. So I guess I will have two wait two or three weeks untill it arrives here in Germany.

SO you know it’s just PCs on both? Good.

Next thing is to decide what unused range of CCs you can send into what port (USB or MIDI) form whatever device you have at hand.
Confusing I know, but this is just to tell Midihub “map ch16 cc76 from this input to this button” just so we can later fool it with a message that we’ve created in Midihub itself.
There was a good video on YouTube about this but I’m damned if I can find it now! Maybe someone here can point you to it.

found!(-simplest loopback) SynthDad:MIDI loopback trick

OK. In the middle of something now. Will have a scan in a couple of hours.

Hate UPS almost as much as Hermes. My heart lifts when a seller uses DPD.

Yep, UPS is a pain in the ass :wink:

Had a scan and a good example is in the thread I mentioned right at the top.
Specifically, this bit

It’s very similar to your situation, in that, in Pipeline

  1. does something according to a mapped state
  2. sends the response out to the device
  3. also sends it to a physical loopback D->D
  4. in the loopback only one CC is let thro’ and that is mapped to a new one. This stops any further looping. Importantly, the new CC re-enters D is picked up by the mappings in pipeline 1, and Hey Presto! the mapped Transform fields are set ready for the next change.

(btw, the reasons for choice of CCs can be gleaned by the OP’s specs.)

Well done for wanting to suss patches out with Editor alone, btw.

Your patch has the nice little twist of needing a ±1. Nice…!

1 Like

If I may chime in here, if Gig Performer is just sending program change messages to achieve preset+ or preset-, Gig Performer must be keeping track internally of what preset is currently selected.

This is tricky to do in midihub because you would need to store the value of the current preset somewhere. AFAIK Midihub does not offer variables.Plus, you would also need a way of initializing the value, getting the value of the first preset into Midihub somehow.

I think if your devices do not offer a Midi CC switch for these functions, you should probably give up on this.