Mono MPE? (I know it sounds dumb)

Official support for: u-he.com
User avatar
Urs
u-he
25465 posts since 8 Aug, 2002 from Berlin

Post Wed Mar 31, 2021 11:29 pm

Echoes in the Attic wrote:
Wed Mar 31, 2021 1:29 pm
I'm really not sure if adding anything from channel 1 to all other channels would do the trick...
Thank you for your in-depth reply, but I think I haven't been clear enough.

The one thing we're missing for full MPE support is the concept of MIDI channel 1 as a "master channel" or "global expression channel" as I'd prefer to call it. To get there, we'd add a special module to our framework that simply takes care of distributing modulations from channel 1 to all other channels in the form of offsets to whatever comes in from there. This has nothing to do with Mono MPE, it's just a thing we're gonna do before we slap "MPE compatible" on our product pages.

Back to Mono MPE:

Gathering all information onto one channel sounds like it would work for us without changing our voice management, unless people play two of the same notes on two separate channels. Those would "compete" for the modulations. OTOH I'm not sure if that's an issue since I'd assume a mono patch be played one note at a time anyway, and trills be held a different note to the one playing.

If we don't do it this way, there is no possible option for us to implement a legato between two notes played on different channels - at least not without that major kind of hassle I mentioned.

The channel merge idea has the advantage of simplicity and when the time comes I'd be happy to post a preliminary version of one of our plug-ins for you guys to check out. If it works, good, if it doesn't, we'll probably drop that idea.

I still would need to know if in Mono MPE, the modulations from the global expression channel are expected to be added to the notes played on the other channels regardlessly.

User avatar
Urs
u-he
25465 posts since 8 Aug, 2002 from Berlin

Post Wed Mar 31, 2021 11:32 pm

Regarding Release Velocity:

As I mentioned, we have a concept for that, it'll be tried and I guess we'll eventually come up with it, but no timeframe given atm. It'll operate independently from MPE support.

KVRAF
3538 posts since 17 Dec, 2009

Post Wed Mar 31, 2021 11:42 pm

The problem with collapsing incoming midi stream into one channel is that you don't know which pitch-bend takes precedence if you simply sum it to a single channel, and you can get glitches with two PB streams (or CC whatever) competing over the same note if you hold two notes.
So collapsing only works if you play mono. else weird stuff happens.
I usually switch my seaboard to Single Channel (i.e. - works like a normal kb) when doing mono/legato stuff

KVRAF
8939 posts since 12 May, 2008

Post Wed Mar 31, 2021 11:56 pm

Urs wrote:
Wed Mar 31, 2021 11:29 pm
Echoes in the Attic wrote:
Wed Mar 31, 2021 1:29 pm
I'm really not sure if adding anything from channel 1 to all other channels would do the trick...
Thank you for your in-depth reply, but I think I haven't been clear enough.

The one thing we're missing for full MPE support is the concept of MIDI channel 1 as a "master channel" or "global expression channel" as I'd prefer to call it. To get there, we'd add a special module to our framework that simply takes care of distributing modulations from channel 1 to all other channels in the form of offsets to whatever comes in from there. This has nothing to do with Mono MPE, it's just a thing we're gonna do before we slap "MPE compatible" on our product pages.

Back to Mono MPE:

Gathering all information onto one channel sounds like it would work for us without changing our voice management, unless people play two of the same notes on two separate channels. Those would "compete" for the modulations. OTOH I'm not sure if that's an issue since I'd assume a mono patch be played one note at a time anyway, and trills be held a different note to the one playing.

If we don't do it this way, there is no possible option for us to implement a legato between two notes played on different channels - at least not without that major kind of hassle I mentioned.

The channel merge idea has the advantage of simplicity and when the time comes I'd be happy to post a preliminary version of one of our plug-ins for you guys to check out. If it works, good, if it doesn't, we'll probably drop that idea.

I still would need to know if in Mono MPE, the modulations from the global expression channel are expected to be added to the notes played on the other channels regardlessly.
I think I know what you mean, so for the global modulations you mean like mod wheel right? Yeah as far as I understand that is meant to apply to all voices from Channel 1 so it would be the same in mono as poly. Like Ploki says though, pitch bend would still have to be tracked separately so that overlapping notes don't conflict and only are bent by what that specific note is doing, otherwise there is glitching or bends are applied are applied from a previous note that was cut off to a newer legato note. Same goes for the other per note modulations.

If you guys found a way to have duophonic mpe that would be amazing, which seems very related to the way mono is handled.
System: Windows 10, Dell XPS 2-in-1, Bitwig 3, Steinberg UR44.

User avatar
Urs
u-he
25465 posts since 8 Aug, 2002 from Berlin

Post Thu Apr 01, 2021 12:04 am

Yeah, understood... hmmm... it won't be easy then to allow for legato between two notes on two different channels.

We could of course test if setting voices to 1 at least gets you somewhere close (still no cross-channel legato...). I think the reason we had 2 as minimum wasn't a technical one, it was about preempting any sense of redundancy with the "mono" mode (which behaves differently from poly after all, retriggering a held note after lifting the heard one).

User avatar
KVRAF
18467 posts since 3 Feb, 2005 from in the wilds

Post Thu Apr 01, 2021 6:50 am

killmaster wrote:
Wed Mar 31, 2021 2:55 pm
pdxindy wrote:
Wed Mar 31, 2021 1:09 pm

What parameters do you modulate with it?
lately I've been modulating Ring (ring modulation) in Warlock and it produces useful percussive feeling to the notes! I know it's not an MPE synth, but it has allowed me to understand how it could be usefully expressive. I'm mapping release velocity using the Expression modulator in Bitwig. I want to use it more now that I've had a taste of what it can do.
Using the Instrument Selector, with multiple instances of Warlock, you can make it MPE and then the Release Velocity modulator would work per voice!

I mostly use Release Velocity to control the strength of the AHD on Release modulator which then modulates other stuff. The AHD on Release envelope gives more control of what happens on note off. Works great for Bitwig instruments per voice.

Speaking of a release envelope, it would be a welcome feature for the future if Hive envelopes had a new trigger option, Gate Off. Useful in itself and would make Release Velocity more flexible whenever it is added

KVRAF
1594 posts since 5 Oct, 2003

Post Thu Apr 01, 2021 7:02 am

pdxindy wrote:
Thu Apr 01, 2021 6:50 am
killmaster wrote:
Wed Mar 31, 2021 2:55 pm
pdxindy wrote:
Wed Mar 31, 2021 1:09 pm

What parameters do you modulate with it?
lately I've been modulating Ring (ring modulation) in Warlock and it produces useful percussive feeling to the notes! I know it's not an MPE synth, but it has allowed me to understand how it could be usefully expressive. I'm mapping release velocity using the Expression modulator in Bitwig. I want to use it more now that I've had a taste of what it can do.
Using the Instrument Selector, with multiple instances of Warlock, you can make it MPE and then the Release Velocity modulator would work per voice!

I mostly use Release Velocity to control the strength of the AHD on Release modulator which then modulates other stuff. The AHD on Release envelope gives more control of what happens on note off. Works great for Bitwig instruments per voice.

Speaking of a release envelope, it would be a welcome feature for the future if Hive envelopes had a new trigger option, Gate Off. Useful in itself and would make Release Velocity more flexible whenever it is added
! forgot about the instrument selector. Lof of setup but I might give it a try! Great ideas thanks... Love the idea of a release envelop too. Not shutting off and triggering events is very intriguing.

KVRAF
8939 posts since 12 May, 2008

Post Thu Apr 01, 2021 7:18 am

Urs wrote:
Thu Apr 01, 2021 12:04 am
Yeah, understood... hmmm... it won't be easy then to allow for legato between two notes on two different channels.

We could of course test if setting voices to 1 at least gets you somewhere close (still no cross-channel legato...). I think the reason we had 2 as minimum wasn't a technical one, it was about preempting any sense of redundancy with the "mono" mode (which behaves differently from poly after all, retriggering a held note after lifting the heard one).
I don't know if you devs ever talk to each other about this stuff, but maybe worth reaching out to fxpansion/roli about how they handle their voices with mono while MPE is enabled? They have it all worked out and I guess there is advantage there with them also making mpe hardware. Those synths basically work as you'd expect in mono while mpe is enabled so you can do legato and everything while also pitching per note. So for example you could pitch bend a note up a few notes, then cut it off legato style with another note and also have the legato slide settings work correctly from the point the previous note was bent to to the new note (not pitch bent). Additionally, if you held the previous note and continued to slide the pitch, you could let go of the newer note and that pitch bend of the old note is still preserved and played correctly. So the effect is that it just works intuitively.

Anyways yeah it would be great if you guys had a similar behavior and it would be cool if fxpansion/roli would give you some tips on how they handled that.
System: Windows 10, Dell XPS 2-in-1, Bitwig 3, Steinberg UR44.

User avatar
KVRAF
18467 posts since 3 Feb, 2005 from in the wilds

Post Thu Apr 01, 2021 7:20 am

killmaster wrote:
Thu Apr 01, 2021 7:02 am

! forgot about the instrument selector. Lof of setup but I might give it a try! Great ideas thanks... Love the idea of a release envelop too. Not shutting off and triggering events is very intriguing.
Using the Instrument Selector and multiple instances is not too clumsy. Doesn't take long. Also, if you start with one instance, and set up the Bitwig Macros (Remote Pages) to control some common parameters in Warlock, and then duplicate Warlock a few times, the macros will then control all instances together. That way you can do some basic edits without having to delete and re-duplicate instances.

The Instrument Selector also doesn't use CPU for non playing voices. So it is not a CPU problem to do. I've got a number of MPE presets with Zebra this way. The Instrument Selector and Macros make this a relatively fluid process. And of course doing this makes the included FX per voice if you want, though sometimes I turn off FX in the instances and use FX after the Instrument Selector too.

User avatar
KVRAF
21405 posts since 7 Jan, 2009 from Croatia

Post Thu Apr 01, 2021 10:07 am

Ploki wrote:
Wed Mar 31, 2021 11:20 pm
isn't release velocity pretty standard on most modern midi controllers (but largely ignored by synths and DAWs)
It's not a given.

KVRAF

Topic Starter

2733 posts since 3 Mar, 2006

Post Thu Apr 01, 2021 6:06 pm

if it makes you feel any better I also sent in a FR to bitwig to give me more options for the built in MPE keyboard.

KVRAF

Topic Starter

2733 posts since 3 Mar, 2006

Post Thu Apr 01, 2021 6:26 pm

also I just fired up repro-5 which does let me go down to 1 voice and while it can glitch out a bit on trills it seems to behave mostly good enough if I play cleanly so being able to set voices to 1 in the other u-he synths would get me 90% of the way there.

edit: so the core problem with playing repro-1 via MPE (I assume this would be the same in any u-he synth with only 1 voice) is that if I play a note, slide that note, then play another note legato while the first note is still held down it'll glitch the hell out if I move my first finger at all by jumping immediately to some insanely large (relative to the second note) pitch bend.

KVRAF
8939 posts since 12 May, 2008

Post Sat Apr 10, 2021 3:58 pm

FYI, just wanted to add that Surge works perfectly in this regard, and it's open source. Maybe something to check out?
System: Windows 10, Dell XPS 2-in-1, Bitwig 3, Steinberg UR44.

KVRist
379 posts since 25 Dec, 2018

Post Sat Apr 10, 2021 5:55 pm

Heya! Thanks yeah surge does do this voice management and honestly - exactly as Urs implied it might be - it was a massive pain in the neck to get it right. There's no magic.

Surge conflates mono with envelope retrigger in a rather odd way, but basically: If we are in mono mode and not retriggering then the latest note takes ownership of the voice including changing the active channel of the active voice, and if you are in a retrigger mode it kills the old voice and starts a new one and has logic on release to restore the prior one so you can do un-retriggered trills and stuff. When you add the sustain pedal in it gets really (really) hairy. I had to make a little spreadsheet of all the states since we have the tensor of pedal, mpe or not, priority mode (lowest, latest, highest), and mono mode + retrigger combination and have to deal with transitions in all of those states. It helped that mono mode in Surge before MPE was done already re-used voices in some modes so some of that logic was in place.

The voice management code all starts here: https://github.com/surge-synthesizer/su ... r.cpp#L614 if that helps with the logic we chose. And https://github.com/surge-synthesizer/su ... I.cpp#L146 are some of the tests we wrote to get everything stable.

From reading the thread let me also really express a bucket of dev empathy for Urs when he said how painful this is to test. I got most of the MPE voice management right except sustain pedal in the 6 months between 1.6.0 beta 5 and 1.6.3 or so but for a while my experience was sit-down, play my roli or linnstrument with surge, and 5 minutes into making music, go back into dev mode and open an issue. And we've made changes in almost every release since.

As a musician, not a dev, though, once we got it right it was super duper useful. Mono leads on a linnstrument are really fun.

I can't imagine the code of what we did would be that useful for any other synth - voice management is kinda the heart of the code - but if it I would be willing to share any and all of what we did or how we made the choices we had if useful.

User avatar
Urs
u-he
25465 posts since 8 Aug, 2002 from Berlin

Post Sun Apr 11, 2021 1:21 am

Voice management is the biggest PITA in synth development. Which is why we currently have 4 (!) competing implementations. Two of those are "almost MPE". The two most elderly (Zebra2, FilterscapeVA, all freeware/magware synths) won't ever possibly be upgraded to anything near MPE support.

Again, we are exceptionally close to full MPE support less this mono thing. I'm happy to look into it some time later this year, but I can't make this block our development for several months.

Also, did anyone answer my question about the global expression channel in this regard? - Hehehe, it's great that there's source code out there, but I really would like to avoid studying yet another implementation :clown:

Return to “u-he”