diff --git a/src/sfizz/Region.cpp b/src/sfizz/Region.cpp index 7d69d202..1b9b0fa7 100644 --- a/src/sfizz/Region.cpp +++ b/src/sfizz/Region.cpp @@ -363,7 +363,7 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode) break; case hash("seq_position"): setValueFromOpcode(opcode, sequencePosition, Default::sequenceRange); - sequenceSwitched = (opcode.value == "1"); + sequenceSwitched = false; break; // Region logic: triggers case hash("trigger"): @@ -1571,12 +1571,8 @@ bool sfz::Region::registerNoteOn(int noteNumber, float velocity, float randValue ASSERT(velocity >= 0.0f && velocity <= 1.0f); if (keyswitchRange.containsWithEnd(noteNumber)) { - if (keyswitch) { - if (*keyswitch == noteNumber) - keySwitched = true; - else - keySwitched = false; - } + if (keyswitch) + keySwitched = (*keyswitch == noteNumber); if (keyswitchDown && *keyswitchDown == noteNumber) keySwitched = true; @@ -1588,18 +1584,11 @@ bool sfz::Region::registerNoteOn(int noteNumber, float velocity, float randValue const bool keyOk = keyRange.containsWithEnd(noteNumber); if (keyOk) { // Sequence activation - sequenceCounter += 1; - if ((sequenceCounter % sequenceLength) == sequencePosition - 1) - sequenceSwitched = true; - else - sequenceSwitched = false; + sequenceSwitched = + ((sequenceCounter++ % sequenceLength) == sequencePosition - 1); - if (previousNote) { - if (*previousNote == noteNumber) - previousKeySwitched = true; - else - previousKeySwitched = false; - } + if (previousNote) + previousKeySwitched = (*previousNote == noteNumber); } if (!isSwitchedOn()) diff --git a/tests/RegionActivationT.cpp b/tests/RegionActivationT.cpp index 41990934..e7957ffb 100644 --- a/tests/RegionActivationT.cpp +++ b/tests/RegionActivationT.cpp @@ -216,10 +216,6 @@ TEST_CASE("Region activation", "Region tests") region.parseOpcode({ "seq_length", "2" }); region.parseOpcode({ "seq_position", "1" }); region.parseOpcode({ "key", "40" }); - REQUIRE(region.isSwitchedOn()); - region.registerNoteOn(40, 64_norm, 0.5f); - REQUIRE(!region.isSwitchedOn()); - region.registerNoteOff(40, 0_norm, 0.5f); REQUIRE(!region.isSwitchedOn()); region.registerNoteOn(40, 64_norm, 0.5f); REQUIRE(region.isSwitchedOn()); @@ -229,6 +225,10 @@ TEST_CASE("Region activation", "Region tests") REQUIRE(!region.isSwitchedOn()); region.registerNoteOff(40, 0_norm, 0.5f); REQUIRE(!region.isSwitchedOn()); + region.registerNoteOn(40, 64_norm, 0.5f); + REQUIRE(region.isSwitchedOn()); + region.registerNoteOff(40, 0_norm, 0.5f); + REQUIRE(region.isSwitchedOn()); } SECTION("Sequences: length 2, position 2") { @@ -237,10 +237,6 @@ TEST_CASE("Region activation", "Region tests") region.parseOpcode({ "key", "40" }); REQUIRE(!region.isSwitchedOn()); region.registerNoteOn(40, 64_norm, 0.5f); - REQUIRE(region.isSwitchedOn()); - region.registerNoteOff(40, 0_norm, 0.5f); - REQUIRE(region.isSwitchedOn()); - region.registerNoteOn(40, 64_norm, 0.5f); REQUIRE(!region.isSwitchedOn()); region.registerNoteOff(40, 0_norm, 0.5f); REQUIRE(!region.isSwitchedOn()); @@ -248,6 +244,10 @@ TEST_CASE("Region activation", "Region tests") REQUIRE(region.isSwitchedOn()); region.registerNoteOff(40, 0_norm, 0.5f); REQUIRE(region.isSwitchedOn()); + region.registerNoteOn(40, 64_norm, 0.5f); + REQUIRE(!region.isSwitchedOn()); + region.registerNoteOff(40, 0_norm, 0.5f); + REQUIRE(!region.isSwitchedOn()); } SECTION("Sequences: length 3, position 2") { @@ -256,6 +256,10 @@ TEST_CASE("Region activation", "Region tests") region.parseOpcode({ "key", "40" }); REQUIRE(!region.isSwitchedOn()); region.registerNoteOn(40, 64_norm, 0.5f); + REQUIRE(!region.isSwitchedOn()); + region.registerNoteOff(40, 0_norm, 0.5f); + REQUIRE(!region.isSwitchedOn()); + region.registerNoteOn(40, 64_norm, 0.5f); REQUIRE(region.isSwitchedOn()); region.registerNoteOff(40, 0_norm, 0.5f); REQUIRE(region.isSwitchedOn()); @@ -267,9 +271,5 @@ TEST_CASE("Region activation", "Region tests") REQUIRE(!region.isSwitchedOn()); region.registerNoteOff(40, 0_norm, 0.5f); REQUIRE(!region.isSwitchedOn()); - region.registerNoteOn(40, 64_norm, 0.5f); - REQUIRE(region.isSwitchedOn()); - region.registerNoteOff(40, 0_norm, 0.5f); - REQUIRE(region.isSwitchedOn()); } }