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