Support for all MIDI messages
Captain's Log: Stardate 77754.4
Finally Anukari fully supports all interesting MIDI messages including channel pressure, poly pressure, pitch bend, continuous controller, and of course note on/off. Most of the work here was already covered in previous log entries where I was refactoring things to make the MIDI routing implementation better, and to make it easier to add new entity sub-types. This work all culminated today, and doing the actual work to add the new Modulator sub-types only took a few hours, and that includes fiddling with midicsv to generate golden test files with poly aftertouch, since surprisingly, even DAWs like Ableton are still weird about it. Ableton can edit poly aftertouch, but its MIDI export feature just drops it on the floor.
Now the thing that's on my mind is how to add full support for MPE. It's pretty damn annoying how MPE works -- if MIDI had originally included a channel number for poly aftertouch, this would all be completely trivial. But it didn't have that, and for MIDI to retain some semblance of backwards-compatibility, we ended up with the ugly mess that is MPE.
Right now I'm thinking that MPE is probably a global mode that you enable for a preset, and it will change a few things about how Exciters and Modulators work. The main thing is that the channel number selection will go away, and be replaced by MPE weirdness. The trickiest thing, though, is how to make Modulators work. I think the way it will work is that you will link an Exciter to a Modulator, and then whatever channel was last seen for that Exciter, the Modulator will use signals from that channel.
This, brings to light a shortcoming in the GUI. Links between entities do not have any visual directionality to them, even though some of them do have a direction. For example, when two Modulators are connected, there's a definite direction: one modulates the parameter of the other. This is tracked internally, but the user can't see it yet. That will need to be fixed.
Showing the direction of links in the 3D GUI is simple enough, but a somewhat trickier problem is what to do about links that are directional, but can go both ways (or one, or the other). This is needed for MPE, since an Exciter will have to link to its paired Modulator, but the user may well wish to have that Modulator control an Exciter parameter. I'll have to do some thinking about the best way to do this.