diff --git a/src/sfizz/Voice.cpp b/src/sfizz/Voice.cpp index 34b98c8d..55bde31c 100644 --- a/src/sfizz/Voice.cpp +++ b/src/sfizz/Voice.cpp @@ -1540,6 +1540,8 @@ void Voice::Impl::updateLoopInformation() noexcept loop_.start = static_cast(region_->loopStart(factor)); loop_.size = loop_.end + 1 - loop_.start; loop_.xfSize = static_cast(lroundPositive(region_->loopCrossfade * rate)); + // Clamp the crossfade to the part available before the loop starts + loop_.xfSize = min(loop_.start, loop_.xfSize); loop_.xfOutStart = loop_.end + 1 - loop_.xfSize; loop_.xfInStart = loop_.start - loop_.xfSize; }