diff --git a/src/sfizz/Region.cpp b/src/sfizz/Region.cpp index bbfd5e8e..bef70718 100644 --- a/src/sfizz/Region.cpp +++ b/src/sfizz/Region.cpp @@ -186,6 +186,7 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode) break; // Region logic: key mapping case hash("lokey"): + triggerOnCC = false; setRangeStartFromOpcode(opcode, keyRange, Default::keyRange); break; case hash("hikey"): @@ -334,26 +335,34 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode) case hash("start_locc&"): // also on_locc& if (opcode.parameters.back() >= config::numCCs) return false; - if (auto value = readOpcode(opcode.value, Default::midi7Range)) + if (auto value = readOpcode(opcode.value, Default::midi7Range)) { + triggerOnCC = true; ccTriggers[opcode.parameters.back()].setStart(normalizeCC(*value)); + } break; case hash("start_hicc&"): // also on_hicc& if (opcode.parameters.back() >= config::numCCs) return false; - if (auto value = readOpcode(opcode.value, Default::midi7Range)) + if (auto value = readOpcode(opcode.value, Default::midi7Range)) { + triggerOnCC = true; ccTriggers[opcode.parameters.back()].setEnd(normalizeCC(*value)); + } break; case hash("start_lohdcc&"): // also on_lohdcc& if (opcode.parameters.back() >= config::numCCs) return false; - if (auto value = readOpcode(opcode.value, Default::normalizedRange)) + if (auto value = readOpcode(opcode.value, Default::normalizedRange)) { + triggerOnCC = true; ccTriggers[opcode.parameters.back()].setStart(*value); + } break; case hash("start_hihdcc&"): // also on_hihdcc& if (opcode.parameters.back() >= config::numCCs) return false; - if (auto value = readOpcode(opcode.value, Default::normalizedRange)) + if (auto value = readOpcode(opcode.value, Default::normalizedRange)) { + triggerOnCC = true; ccTriggers[opcode.parameters.back()].setEnd(*value); + } break; // Performance parameters: amplifier diff --git a/tests/RegionTriggersT.cpp b/tests/RegionTriggersT.cpp index 4ee56cde..4c567a52 100644 --- a/tests/RegionTriggersT.cpp +++ b/tests/RegionTriggersT.cpp @@ -114,8 +114,8 @@ TEST_CASE("Basic triggers", "Region triggers") region.parseOpcode({ "on_locc47", "64" }); region.parseOpcode({ "on_hicc47", "68" }); REQUIRE(!region.registerCC(47, 63_norm)); - REQUIRE(!region.registerCC(47, 64_norm)); - REQUIRE(!region.registerCC(47, 65_norm)); + REQUIRE(region.registerCC(47, 64_norm)); + REQUIRE(region.registerCC(47, 65_norm)); region.parseOpcode({ "hikey", "-1" }); REQUIRE(region.registerCC(47, 64_norm)); REQUIRE(region.registerCC(47, 65_norm));