I am not sure how RAMsave really works, but I think the VSTi implementation itself should be modified so that the following is possible:
Upon opening an SX project (or Logic, etc), all VSTi\'s search the MIDI tracks that are attached to them to determine which samples to load. If you plan on playing live through a MIDI keyboard or something, then you would turn off that option in the VSTi. So instead of this being a proprietary HALion thing, it becomes part of the VSTi API. I imagine the VSTi API would need to be changed so that the VSTi\'s can query the MIDI tracks.
It doesn\'t seem logical to let the VSTi\'s search through the midi-tracks, since a VSTi shouldn\'t have anything to do with where the midi messages sent to it came from. Instead, the host should analyse the midi-tracks if it uses it (a VST host doen\'t need to have anything to do with midi-tracks). It could then send a message to the VSTi\'s describing the expected program changes.
The basic idea you propose isn\'t bad though: the more a VSTi (or any machine for that matter) knows what to expect, the more efficient it can do its job.
Let\'s do a first API addition attempt: (this is going to be technical)
<font class=\"small\">Code:</font><hr /><pre> void expect(VstEvents* events, long beginTime, long endTime)
* Signals the VST to expect the given VstEvents to be send
* between beginTime and endTime.
* [in] events : the events to be expected
* [in] beginTime : the events are expected to occur after this time.
* [in] endTime : the events are expected to occur before this time.
* If 0, this indicates the endTime is indefinitely
The host now has the abbility to signal the VSTi\'s that certain events (like program changes) are likely to occur between a given time. A VSTi can use this to start loading a sample, or to unload a sample, if a certain program isn\'t expected for a long time.