Polishing up MPE/polyphony support
Captain's Log: Stardate 78006.4
With the basic new web site up and running, today I went back to working on Anukari itself. I'll probably alternate back and forth between the website and the product code, mostly based on what I feel most motivated to work on.
I got MPE support working really well today. Actually, it worked shockingly well to start with, given that I wrote the code without an MPE controller to test against. Once I got the ROLI Seaboard, I only found a couple bugs. The biggest thing was that I was allocating voice instances based on the LRU note irrespective of whether the note was on or off. This led to bad playability when e.g. you hold down a root note and play a melody on top. You really want to steal instances from notes that are OFF before you steal from a note that is ON. Fixing this made things completely playable.
Now I'm going through and polishing odds and ends for both regular instanced polyphony and MPE. Things like making sure the GUI widgets that let you pick notes/channels change their appearance/behavior based on what mode the synthesizer is in, and making sure that the GUI "Reset" button resets all the new state, etc. There are a lot of little details like this that I need to clean up.
One slightly larger thing I need to fix has to do with Exciters that have hard-coded support for MIDI velocity. For example, oscillators are hard-coded to always set their gain based on note ON velocity. This is handy, but it doesn't play well with MPE, where often velocity would be used just to change something about the attack, and then channel pressure would completely control the gain. However, I don't want to throw out the hard-coded velocity stuff entirely, because in singleton mode it is really nice to not have to wire up velocity modulation manually every time. And on it goes... 😄