Generalized MIDI receiver interface
Captain's Log: Stardate 77697.7
Woohoo... I've entered a cluster headache cycle, which is like a -70% debuff to coding speed, because either I just can't look at a monitor, or I can, but I'm tired and feel stupid. So things have been going slowly the last few days.
But still, I'm getting a bit done. I've gotten some basic work done on the new MIDI note picker. The "sense" function where it waits for you to press a MIDI key and then maps it works. And also I've got it so that you can bring up a visual piano keyboard to pick the note with the mouse. If you have e.g. multiple exciters selected, it will highlight all their notes on the keyboard, and you can either click to remap them all to the same note, or you can drag on the keyboard and transpose them all around (maintaining the same intervals). Actually the new picker is nearly complete -- really it's just a bit of work to make things feel good (some of the mechanics around dragging notes feel awkward at the moment).
The next step in getting to where I can allow MIDI retrigger for LFOs is going to be to refactor the data model so that MIDI notes map to a generic "MIDI receiver" rather than mapping to Exciters in a hard-coded way. There are APIs like RouteNoteToExciter() which need to become RouteNoteToEntity() and so forth. This isn't a big challenge, but there's a fair bit of work to do to change everything over. And a few fiddly bits with the disk serialization format to make sure that old presets that have Exciter IDs for MIDI route targets can be loaded into the new format (generic Entity IDs).
Once that's done, it will just be a few lines of code to enable the MIDI note picker for LFOs, and then a bit of wiring up data to the GPU and simulation code, but that should all be quite easy.