Firmware v2.2.0 (Polyphony!)

I’m pleased to say this totally fixed it and seems to be working perfectly!

I haven’t actually tried any polyphonic stuff yet so that will be next to experiment with.

Thanks for such a quick response.

Im not quite sure of the context of this.
but, this makes me wonder.. have you done any testing of (midi) MPE in this area?

MPE allows the for the same note to be played on different channel), and they should be consider independent. ie. the midi channel is the ‘identifier’ for the voice not the note number.
this is a mistake many daws/plugins have made (with mpe) , its usually historic assumption that a note can only be played once (e.g. you can only press c3 once on a keyboard), but its not true on isomorphic layouts.

not sure how this relates… but its likely/possible why MIDI > CV in vcv has an mpe mode.
(Ive not test MPE in vcv recently, as last time I tried it was a bit buggy)


implementation note:
above I mentioned, midi channel is voice identifier… this is a bit of a simplification, and only works if you have max voice = max channels.
MPE does allow for re-use of channels, then it acts a bit of hybrid.
i.e. say you have 4 MPE channels, and the user plays 5 notes, one channel will now have 2 notes on it.

In practice, this is NOT that useful, and often not implemented. ( * )
since your expression is shared on that channel, so the whole expressive play really breaks down..
so what I tend to do instead is fix max voice = max channel and then steal voices (optionally)


( * ) I think the MPE spec did this, largely to try to view MPE in similar terms to traditional midi, so that MPE channels act very similar to the older single channel. but as above, not really that useful in practice.

Basically, yes the bug I just fixed would have blocked MPE from working.

Thinking this through, how do you enforce Max Voices = Max Channel? That is to say, if a user sets the max poly to 4 for this patch, and holds down four notes on MIDI channels 1-4, and then pressed a 5th note on MIDI channel 5, do we just ignore that note (e.g. act like MPE with poly=4 means filter out note events on MIDI channels 5-16)? Or steal it from channel 1, so the 5th note becomes voice 1. But then we have a situation where channel# != voice#, wouldn’t that be a problem if we get expressive control like CC’s on MIDI channel 1, the receiver of that CC would apply the CC value to voice 1 but the notes on MIDI channel 1 might assigned to some other voice.

I guess that’s why you say voice stealing should be optional, because turning it off simplifies things?

1 Like

yeah, so one thing to bare in mind is that MPE controllers (usually) allow you to specify the number of voices, so in practice you usually align them (controller to synth)
so for the MM, Id set my MPE control to use a max of 4 voices

(also im simplifying MPE a little here, for a more practical implementation when using limited channels - and also ignoring things like MPE split which no one uses - lol)

so, indeed, if you set it to allow for more than the synth,
then either its going to ‘steal a voice’ , or ignore the new touch.

(mpe spec allows instead for re-using a channel, but as above, Ive never found that particularly useful)

what I tend to implement is, a voice allocation system that essentially uses channel as a ‘touch id’, then implement voice stealing… for voice allocation I also use an LRU stategy to decide which (unallocated) voice to use next (or to steal)

so yeah, when I said “midi channel is voice identifier”, I didnt mean its midi channel 3 so use poly voice 2 .. what I meant is channel 3 is a different touch from channel 2 and 6.
if you think about LRU, that means you could end up with something likeL

poly channel / midi channel
1/4
2/1
3/3
4/2

whereas in single channel midi you’d often be tagging voices with note.
poly channel / note
1/C3
2/E4
3/G5
4/C2

OK I see. So the MPE controller settings should match the MM’s MPE settings, that makes sense. Then tie the voice# with the midi channel# much like non-MPE ties the note value to the voice#. Yeah that can work (at least in my head it’ll be easy!)

2 Likes

exactly, at least this is how its done in practice.

mpe spec has other use-cases, but it kind of ignores that the ‘whole point’ of MPE/expressive controllers is per note expression - so ‘sharing’ channels is not useful practically.
like alot of midi (incl 2.0) this harks back to the association with keys, and their limitations being embedded in the spec.

1 Like