MPE support seemingly complete
Captain's Log: Stardate 77990.4
Okay I got back on track today with the MPE changes, and as far as I can tell I have fully implemented MPE support in Anukari. I don't actually know if it works, because while my ROLI Seaboard arrived, the seller didn't include the right USB cable (you can tell it's old tech because it needs a USB 2.0 Type B connector, like it's a printer or something).
I'm sure I'll have to work out quite a few bugs once I can actually plug in my Seaboard, but I don't expect it to be too bad. The trickiest bits have to do with routing MPE member channels to Anukari voice instances, especially with regards to the fact that control info (CC#74, pitch, pressure) has to be stored between notes and not applied to former notes on the same channel if they've been turned OFF. This means that once a new note is turned ON on that channel, you have to retrieve whatever stored control info you have and send it to that voice when you start it. It makes sense to me why they did it this way, but it is a bit of a hassle.
One thing about MPE that does not make sense to me is this part, "When there are more notes than unoccupied Channels, a new note shall share a MIDI Channel with an existing note. Since Control Change and Pitch Bend are Channel Messages, they then affect all Active Notes on that Channel.
What in God's name do the MPE spec authors think a device should do with two simultaneous notes on the same channel, keeping in mind that e.g. pitch bend is global to the channel? If the first note was bent, what happens with the second note? It's just silly. Anukari won't support this -- if a second note comes in the first one will just be cancelled. I imagine that this is what every other synthesizer does, too.