So as we all know (or many of us do), VST3 converts midi CC, PitchBend, Aftertouch and Program Change (kinda) into Parameter changes, and then converts those midi events to sample accurate parameter changes. We all also know that JUCE doesn’t have sample accurate parameters, but it does have sample accurate midi.
BUT the juce code to unpack the VST3 param queue in 6.1.6 just makes the choice to use last value in the block. For a param, where you don’t have sample accurate automation in JUCE, this makes sense, but there’s no reason to do it for midi where the midiBuffer does have sample offset.
This causes a problem when you have renderers which choose a very very long block size for offline rendering. MultitrackStudio, for instance, will do a render with 4096 samples, which is enough to hard zipper a pitch bend.
Anyway turns out this is an easy thing to fix in JUCE. Here’s the patch I just applied to the JUCE fork we use in Surge and now MultitrackStudio renders the same way independently of block size. I thought I would share this in case the juce team would like to do something similar for 7.0.x?
We released surge 1.1.1 with this change; but I note that unmodified JUCE 7.0.2 still will just use the last sample for pitch and cc midi events in the vst3. So just giving this a quick bump again?