Don't require an explicit hikey/key=-1 to trigger on CC

This commit is contained in:
Paul Ferrand 2020-07-05 23:33:43 +02:00
parent 41a719a720
commit 0a328068b2
2 changed files with 15 additions and 6 deletions

View file

@ -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

View file

@ -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));