REAPER 5.33 includes this new feature:
+ MIDI: support translating special MIDI messages to VST3 expression or named keyswitches
There's no direct access yet to VST3-specific messages in REAPER, but this is some groundwork that we thought we would add to the general release to enable VST3 messaging via script, extension, or manually created MIDI messages.
Specifically, REAPER will convert certain sysex messages to VST3 messages as follows:
F0 72 65 61 65 78 70 72 00 XX YY VH VL [ PP PP PP ... ] F7
r e a e x p r
Will be converted to a VST3 expression message that will be attached to a note that occurs at the exact same MIDI tick position (order of messages doesn't matter), with channel XX and pitch YY. The [ PP PP PP ... ] part of the message represents the VST3 expression name in ascii, and VH VL represents the value as a 14-bit integer, where VH is the high 7 bits and VL is the low 7 bits.
F0 72 65 61 6B 79 73 77 00 XX YY VH VL [ PP PP PP ... ] F7
r e a k y s w
Will be converted to a VST3 named keyswitch message on channel XX. The [ PP PP PP ... ] part of the message represents the keyswitch name in ascii. YY and VH are ignored, and VL is the keyswitch velocity.
In both messages the 00 is a message version number. If we extend or change this format in the future, we will change the version number, while continuing to support the old version.
Here is a specific example of sending an expression message. If a VST3 plugin in the signal chain publishes an expression called "legato", the following sysex message will be translated to legato expression with value 0.5 (40<<7=8192, 8192/16384=0.5) for a note on channel 0 with pitch 60 (60=0xC3) occurring at the same MIDI tick position as the sysex message. Note that the expression name is not null-terminated.
F0 72 65 61 65 78 70 72 00 C3 40 00 6C 65 67 61 74 6F F7
r e a e x p r l e g a t o