Second read-through of the MPE spec
Captain's Log: Stardate 77985
Today I read the MPE spec once again, and got a lot of boring groundwork done for MPE support. The data model now contains a bunch of fields for MPE configuration, like which MPE zone is in use, how many channels, the pitch bend ranges, etc. All the stuff that needs to be configurable in order to work with all of the MPE controllers. At this point I think the configuration menus are all done, and what remains is the code that routes MPE notes to the right instances, along with the right per-note control data, etc.
As a sort of side-effect of the MPE support, today I added the ability to apply the pitch wheel at the preset-global level to dilate overall time, so in effect it's now possible (and I might make this the default) to have the pitch wheel automatically do exactly what you'd expect: bend the pitch on any preset. Because time dilation was already implemented, this was trivial, and it was needed for MPE anyway, where the global pitch wheel is combined with the per-note pitch values. As it turns out, since pitch is perceived logarithmically, and the time dilation factors are already multiplicative, all I had to do was provide a global dilation factor and multiply it into the per-instance dilation factors.
With this work done, I would guess that tomorrow I can get basic MPE support roughly working. Which is great, because that means that on Wednesday when my ROLI controller gets here, I'll immediately be able to start testing the MPE support (which I'm sure will be broken in various ways, since it's a bit complex). I really would like to test with a few alternative MPE controllers, to make sure they all work, but this I might leave to pre-alpha testers. 😄