diff --git a/sfizz/Voice.cpp b/sfizz/Voice.cpp index 5aef90ff..9327646d 100644 --- a/sfizz/Voice.cpp +++ b/sfizz/Voice.cpp @@ -365,8 +365,8 @@ void sfz::Voice::fillWithData(AudioSpan buffer) noexcept ::add(sourcePosition, indices); //FIXME : all this casting is driving me crazy - const auto sampleEnd = static_cast(region->trueSampleEnd()) - 1; - if (region->shouldLoop() && static_cast(sampleEnd) <= source.getNumFrames()) { + const auto sampleEnd = min(static_cast(region->trueSampleEnd()), static_cast(source.getNumFrames())) - 1; + if (region->shouldLoop() && region->loopRange.getEnd() <= source.getNumFrames()) { const auto offset = sampleEnd - static_cast(region->loopRange.getStart()); for (auto* index = indices.begin(); index < indices.end(); ++index) { if (*index > sampleEnd) {