Channel remap with MPE controller

I don’t know if it has been asked before, but I’ve searched the forum and didn’t find this specific question.
I am trying to remap a MPE controller, which only transmits over the full 16 channels and route that to a synth that only can receive on channel 2 to 7 (6 voice polyphony).
But when I use the remap pipe and set in low to 1, in high to 16, out low to 2 and out high to 7, ch 2 and 3 gets routed to ch 2 and ch 4 and 5 to ch 3. Which means, with MPE, voice stealing.
Is there a way to rotate through the out channels, so that every time a note is pressed, a unique channel is chosen?


" voice stealing" means we talking notes here?

I’m not totally clear what “unique channel” means (“different from previous” or “constant assignment for each note”?)

Depending on which you’d be looking at Dispatcher (“different from previous”) or
or Transform (“constant assignment for each note”)

my hazy awareness of MPE makes wonder whether you’re also thinking of the pressure/touch stuff as well?

Hi @resonotter, yes, voice stealing means that one sound gets shut off, when the other starts to play.
MPE distributes every single note on a single channel. That way you can give every note a different amount of aftertouch, for example. (This can also be accomplished with a keyboard that is capable of PolyAT, but only a few can do that.)
With a unique channel I mean different from previous. Could you explain how I could use despatcher for that, or tell me where I can find more information about that, applicable to my specific use case?
Thanks in advance and thanks for taking the time to respond to my post.

So Dispatcher working on Ch2-7 would send the first note received to ch2,
the 2nd to ch3 and so on.
It then handles the note_off messages sensibly.

Note, however, that this applies only to the notes. I can’t see off hand how one would keep the aftertouch “attached” to a particular note as it were…
(indeed, see this from the designer)


never gone looking for documentation on Dispatcher; it was a pipe where I could see how it worked, but only much later saw the point of using it!

1 Like

I’m intrigued about what the data flows look like coming from MPE into Midihub
Perhaps you could upload a MIDI Monitor “Save as CSV” file (save it as .txt so it becomes uploadable)

(for example, is it like C3 comes in ch1 with all its attendant PB, AT etc
then D6 comes in ch6 ditto ditto?)
Being able to know precisely the re-channeling requirements might make a non-standard solution more apparent.

The MPE plays notes similar to like a Dispatcher does, except if it runs out of channels, it must reuse one of them, that also means the performance parameter changes will affect all notes on that channel. (Check section 2.2 of the MPE spec)

To make use of all of the MPE possibilities, you should look into whether you can limit the channels your MPE controller uses to produce notes. If you don’t require all of the performance capabilities, but just want to play notes, you can place a Dispatcher pipe which is set to produces notes to channels 2 - 7.

The Dispatcher pipe apart from the note itself only sends the incoming Poly Aftertouch messages to the assigned channel for that note. I think we could improve support for MPE use cases to also remap the CCs of the original channel.


Thanks for the ref, Giedrius

this bit…

2.2.1 3
When there are more Notes than unoccupied Channels, a new note must share a MIDI Channel with an existing note. Since Control Change and Pitch Bend are Channel Messages, they then affect both notes on that Channel

… is maybe the sticking point .

Strikes me that a lot depends on the playing style that you want to use:
Ch Remap [1;16] → [2;7] will lead to note-stealing but, depending on comparative length of notes, a bank of Remaps could be an improvement
(cf gert_MPE_rechannel.mhp
this breaks down when note 7 plays whilst note 1 is still on…)
†edited version

1 Like

@resonotter The provide patch does not work. I see messages appear of sending notes to channel 8 and up.
What seem to work, in my short testing time, is this patch: MPE remap.mhp

Of course I would like to supply a csv export. But what would you like: an unfiltered version straight from the synth?

Edit: Oops, it looks like I made a small mistake and filtered the channel aftertouch out.

It looks like the CH remap pipe can be left out, and only the dispatcher with channels 2-7 active, is enough.

Thanks for pointing me in the direction and explaining the functionality of the dispatcher pipe!

I’m not surprised, I deleted the ChRemap from the 3rd virtual line!

If your Dispatcher is working for you, then it suggests you’re not concerned about the non-note messages, CH Remap is not necessary (as your last reply confirms)

PS the csv was only useful to see the non-note messages and the order they came in…

1 Like

Oh, now I’m confused! What exactly do you want rechanneled?

btw previous was an attempt to pass the aftertouch as well
but it will only work based on assumptions outline in the Description

I want to rechannel all midi messages for a specific key-press. To a total of 6 key-presses with their individual aftertouch per key. For example, to open the filter more for one of the played notes, while the others stay on (or around) the same value. If I release a key, the channel must become available again for another key-press, while other keys remain their sound. If I press more than 6 keys at the same time, then voice-stealing is normal, as the synth can only play up to 6 voices.

Filtering the aftertouch out was an error on my side. :blush:

Yes I understood that.
My point is that if you want aftertouch, Dispatcher will not be enough