diff --git a/sfizz/Voice.cpp b/sfizz/Voice.cpp index fff07961..cf351ca3 100644 --- a/sfizz/Voice.cpp +++ b/sfizz/Voice.cpp @@ -239,8 +239,6 @@ void sfz::Voice::renderBlock(AudioSpan buffer) noexcept auto delay = min(static_cast(initialDelay), buffer.getNumFrames()); auto delayed_buffer = buffer.subspan(delay); initialDelay -= delay; - if (delayed_buffer.getNumFrames() == 0) - return; if (region->isGenerator()) fillWithGenerator(delayed_buffer); @@ -248,9 +246,9 @@ void sfz::Voice::renderBlock(AudioSpan buffer) noexcept fillWithData(delayed_buffer); if (region->isStereo()) - processStereo(delayed_buffer); + processStereo(buffer); else - processMono(delayed_buffer); + processMono(buffer); if (!egEnvelope.isSmoothing()) reset(); @@ -350,6 +348,9 @@ void sfz::Voice::processStereo(AudioSpan buffer) noexcept void sfz::Voice::fillWithData(AudioSpan buffer) noexcept { + if (buffer.getNumFrames() == 0) + return; + auto source { [&]() { if (region->canUsePreloadedData()) return AudioSpan(*region->preloadedData); @@ -435,6 +436,9 @@ void sfz::Voice::fillWithGenerator(AudioSpan buffer) noexcept if (region->sample != "*sine") return; + if (buffer.getNumFrames() == 0) + return; + float step = baseFrequency * twoPi / sampleRate; phase = linearRamp(tempSpan1, phase, step);