would need a scripting function that copies the full state of one instance of a plugin to another (probably by reloading that plugin with these settings - similar to what happens when GigPerformer loads a rackspace).
I would want to use this to make non-voice per channel compatible plugins conveniently usable with MPE capable controllers.
Workflow: We have e.g. nine copies of a plugin loaded: One is connected to a “sound design” midi out which is intercepted by the script. it drops all non-note events from all channels but the one where the last note was played and maps the sent out note ons and events to channel 1. So you can play that instance with an MPE controller - pitch bend etc. (taken from the last finger put on the instrument) is global though.
This instance would be used for sound design. If the sound is tweaked to satisfaction a toggle in the performance view is pressed. This first disables the “sound design” midi in and enables eight midi ins - each with only one midi channel active (2-9) which is then mapped to channel 1 and connected to a dedicated instance of the plugin. Then the script would have to use the asked for CopyPluginState function to copy the state of the sound design plugin instance to the eight player instances. Now the newly designed sound can be played via a MPE compatible instrument with e.g. up to eight fingers with per voice pitch bends, modulations etc.
When using the toggle again the eight midi ins would be disabled again and the “sound design” midi in reenabled. Repeat.
Perhaps this functionality could even be a candidate for a new native GigPerformer feature?
Could imagine a “enable poly wrapper” button in the window bar of any plugin. When clicking that you get two new entries in the windows bar - a dropdown field where you can select 2-16 voices. And a toggle. When disabled the poly wrapper does the drop-all-events-from-all-channels-but-the-one-with-last-note-on-and-remap-to-channel-1 thing. When enabled it first disables the synth plugin UI (no further changes possible until toggling again) internally copies the state of the plugin instance to N hidden instances, distributes the incoming midi events depending on channel to these instances and mixes the outputs.
That would be awesome!
Ok, for a start that CopyPluginState function would also do