From 5c61298f08f6eed9a1f754bd3bf2f3734e09e828 Mon Sep 17 00:00:00 2001 From: Paul Ferrand Date: Wed, 19 Aug 2020 00:48:20 +0200 Subject: [PATCH] A region is disabled by end=-1 --- src/sfizz/Region.cpp | 6 +++++- src/sfizz/Region.h | 1 + tests/RegionT.cpp | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/sfizz/Region.cpp b/src/sfizz/Region.cpp index 2d96835a..cad035b8 100644 --- a/src/sfizz/Region.cpp +++ b/src/sfizz/Region.cpp @@ -92,7 +92,11 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode) offsetCC[opcode.parameters.back()] = *value; break; case hash("end"): - setValueFromOpcode(opcode, sampleEnd, Default::sampleEndRange); + if (opcode.value == "-1") { + disabled = true; + } else { + setValueFromOpcode(opcode, sampleEnd, Default::sampleEndRange); + } break; case hash("count"): setValueFromOpcode(opcode, sampleCount, Default::sampleCountRange); diff --git a/src/sfizz/Region.h b/src/sfizz/Region.h index 4935a85e..4dc5cdef 100644 --- a/src/sfizz/Region.h +++ b/src/sfizz/Region.h @@ -272,6 +272,7 @@ struct Region { int64_t offsetRandom { Default::offsetRandom }; // offset_random CCMap offsetCC { Default::offset }; uint32_t sampleEnd { Default::sampleEndRange.getEnd() }; // end + bool disabled { false }; // end=-1 and other disabling events absl::optional sampleCount {}; // count absl::optional loopMode {}; // loopmode Range loopRange { Default::loopRange }; //loopstart and loopend diff --git a/tests/RegionT.cpp b/tests/RegionT.cpp index 9ea9b924..d4e68982 100644 --- a/tests/RegionT.cpp +++ b/tests/RegionT.cpp @@ -95,7 +95,7 @@ TEST_CASE("[Region] Parsing opcodes") region.parseOpcode({ "end", "184" }); REQUIRE(region.sampleEnd == 184); region.parseOpcode({ "end", "-1" }); - REQUIRE(region.sampleEnd == 0); + REQUIRE(region.disabled); } SECTION("count")