Properly clear buffers

This commit is contained in:
Paul Fd 2020-04-01 09:28:17 +02:00
parent 2f2de8c677
commit bf7d90f3d4

View file

@ -539,14 +539,22 @@ void sfz::Synth::setSampleRate(float sampleRate) noexcept
void sfz::Synth::renderBlock(AudioSpan<float> buffer) noexcept
{
ScopedFTZ ftz;
CallbackBreakdown callbackBreakdown;
{ // Silence buffer
ScopedTiming logger { callbackBreakdown.renderMethod };
buffer.fill(0.0f);
}
if (freeWheeling)
resources.filePool.waitForBackgroundLoading();
AtomicGuard callbackGuard { inCallback };
if (!canEnterCallback)
return;
size_t numFrames = buffer.getNumFrames();
auto tempSpan = resources.bufferPool.getStereoBuffer(numFrames);
auto tempMixSpan = resources.bufferPool.getStereoBuffer(numFrames);
@ -554,7 +562,6 @@ void sfz::Synth::renderBlock(AudioSpan<float> buffer) noexcept
DBG("[sfizz] Could not get a temporary buffer; exiting callback... ");
return;
}
CallbackBreakdown callbackBreakdown;
{ // Prepare the effect inputs. They are mixes of per-region outputs.
ScopedTiming logger { callbackBreakdown.effects };
@ -566,9 +573,9 @@ void sfz::Synth::renderBlock(AudioSpan<float> buffer) noexcept
int numActiveVoices { 0 };
{ // Main render block
ScopedTiming logger { callbackBreakdown.renderMethod };
buffer.fill(0.0f);
ScopedTiming logger { callbackBreakdown.renderMethod, ScopedTiming::Operation::addToDuration };
tempSpan->fill(0.0f);
tempMixSpan->fill(0.0f);
resources.filePool.cleanupPromises();
for (auto& voice : voices) {