My thought is you make a copy of the synthesiser pass it all the same parameters and draw to a large buffer until end of the amp envelope. Would you use a timer and just render the voice to a paint call? Any way for better optimization for drawing purposes only?
// Use this method as the place to do any pre-playback
// initialisation that you need..
synth.setCurrentPlaybackSampleRate(sampleRate);
renderSynth.setCurrentPlaybackSampleRate(1<<12);
I render the renderSynth like this buffersize of 1<<12 in AudioBuffer on the gui thread works pretty good
