You both are talking of different things:
Yes, the AudioProcessor::processBlock() method expects the whole buffer to pe processed, i.e. either copy samples into or clearing it.
When you call Synthesiser:::renderNextBlock(), I would say, calling from 0 to buffer.getNumSamples() should be correct, because, the midi buffer is responsible to determine the offsets.
Where @martinrobinson-2’s note applies is the SynthesiserVoice::renderNextBlock(), where you have to make sure, you only render into the window determined by startSample and numSamples.
I hope that makes sense…
Maybe if you don’t mind sharing your AudioProcessor::processBlock() and your SynthesiserVoiice::renderNextBlock() implementation? (maybe simplified, if you are worried about IP details…)
