Foundational work for MPE support
Captain's Log: Stardate 77757.7
Today I added support for setting either/or the MIDI channel and the MIDI note to wildcard "any" values. For the channel, this is actually a much more usable default, since in most cases people aren't doing complex multi-channel stuff and really just don't care. So this will make weird controllers that send MIDI on channel 2 or whatever work without any fuss. Of course it's still possible to narrow things down to a specific channel if needed.
For note, the "any" wildcard is useful for things like envelope triggers that affect the instrument as a whole, rather than just a given note. But also it's useful for oscillators, which when set to "any" will be basic monophonic oscillators with the pitch of whatever notes are pressed, instead of being restricted to just a single note each. (They will not be polyphonic.)
But those are both sort of nice side-effects, whereas the real reason I am adding the "any" values is for eventual MPE support. The any target is needed to allow MIDI routing lookups that are independent of the MIDI channel, which is a requirement for MPE. When the instrument is configured in MPE mode, all the routes will be changed to the "any" channel. Then whatever channel inputs arrive on will be recorded, and used to match future events to notes.
That said, I still need to read the MPE spec in more detail before I implement support for it. From my cursory reading, it's a little weirder than I initially expected, with the two possible MPE zones. Maybe there's other weird stuff I missed, too.