From d649cec10b635613480274476e2dc4b32aca20ee Mon Sep 17 00:00:00 2001 From: Paul Ferrand Date: Fri, 21 Aug 2020 00:24:22 +0200 Subject: [PATCH] offset_cc were not taken into account --- src/sfizz/Region.cpp | 2 +- tests/RegionT.cpp | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/sfizz/Region.cpp b/src/sfizz/Region.cpp index 2d96835a..082c2374 100644 --- a/src/sfizz/Region.cpp +++ b/src/sfizz/Region.cpp @@ -1447,7 +1447,7 @@ uint64_t sfz::Region::getOffset(Oversampling factor) const noexcept uint64_t finalOffset = offset + offsetDistribution(Random::randomGenerator); for (const auto& mod: offsetCC) finalOffset += static_cast(mod.data * midiState.getCCValue(mod.cc)); - return Default::offsetCCRange.clamp(offset + offsetDistribution(Random::randomGenerator)) * static_cast(factor); + return Default::offsetRange.clamp(finalOffset) * static_cast(factor); } float sfz::Region::getDelay() const noexcept diff --git a/tests/RegionT.cpp b/tests/RegionT.cpp index 9e90b7db..2f430ccd 100644 --- a/tests/RegionT.cpp +++ b/tests/RegionT.cpp @@ -1900,3 +1900,21 @@ TEST_CASE("[Region] Release and release key") REQUIRE( region.delayedReleases == expected ); } } + +TEST_CASE("[Region] Offsets with CCs") +{ + MidiState midiState; + Region region { 0, midiState }; + + region.parseOpcode({ "offset_cc4", "255" }); + region.parseOpcode({ "offset", "10" }); + REQUIRE( region.getOffset() == 10 ); + midiState.ccEvent(0, 4, 127_norm); + REQUIRE( region.getOffset() == 265 ); + midiState.ccEvent(0, 4, 100_norm); + REQUIRE( region.getOffset() == 210 ); + midiState.ccEvent(0, 4, 10_norm); + REQUIRE( region.getOffset() == 30 ); + midiState.ccEvent(0, 4, 0); + REQUIRE( region.getOffset() == 10 ); +}