Triggering on note or CC is not exclusive
This commit is contained in:
parent
b46b30f35d
commit
cda4ae2db3
3 changed files with 40 additions and 5 deletions
|
|
@ -186,15 +186,15 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode)
|
|||
break;
|
||||
// Region logic: key mapping
|
||||
case hash("lokey"):
|
||||
triggerOnCC = false;
|
||||
triggerOnNote = true;
|
||||
setRangeStartFromOpcode(opcode, keyRange, Default::keyRange);
|
||||
break;
|
||||
case hash("hikey"):
|
||||
triggerOnCC = (opcode.value == "-1");
|
||||
triggerOnNote = (opcode.value != "-1");
|
||||
setRangeEndFromOpcode(opcode, keyRange, Default::keyRange);
|
||||
break;
|
||||
case hash("key"):
|
||||
triggerOnCC = (opcode.value == "-1");
|
||||
triggerOnNote = (opcode.value != "-1");
|
||||
setRangeStartFromOpcode(opcode, keyRange, Default::keyRange);
|
||||
setRangeEndFromOpcode(opcode, keyRange, Default::keyRange);
|
||||
setValueFromOpcode(opcode, pitchKeycenter, Default::keyRange);
|
||||
|
|
@ -996,7 +996,7 @@ bool sfz::Region::registerNoteOn(int noteNumber, float velocity, float randValue
|
|||
if (!isSwitchedOn())
|
||||
return false;
|
||||
|
||||
if (triggerOnCC)
|
||||
if (!triggerOnNote)
|
||||
return false;
|
||||
|
||||
if (previousNote && !(previousKeySwitched && noteNumber != *previousNote))
|
||||
|
|
@ -1028,7 +1028,7 @@ bool sfz::Region::registerNoteOff(int noteNumber, float velocity, float randValu
|
|||
if (!isSwitchedOn())
|
||||
return false;
|
||||
|
||||
if (triggerOnCC)
|
||||
if (!triggerOnNote)
|
||||
return false;
|
||||
|
||||
const bool velOk = velocityRange.containsWithEnd(velocity);
|
||||
|
|
|
|||
|
|
@ -381,6 +381,7 @@ private:
|
|||
bool aftertouchSwitched { true };
|
||||
std::bitset<config::numCCs> ccSwitched;
|
||||
bool triggerOnCC { false };
|
||||
bool triggerOnNote { true };
|
||||
absl::string_view defaultPath { "" };
|
||||
|
||||
int sequenceCounter { 0 };
|
||||
|
|
|
|||
|
|
@ -125,6 +125,40 @@ TEST_CASE("Basic triggers", "Region triggers")
|
|||
REQUIRE(!region.registerCC(47, 69_norm));
|
||||
REQUIRE(!region.registerCC(40, 64_norm));
|
||||
}
|
||||
|
||||
SECTION("on_loccN does not disable key triggering")
|
||||
{
|
||||
region.parseOpcode({ "sample", "*sine" });
|
||||
region.parseOpcode({ "on_locc1", "127" });
|
||||
region.parseOpcode({ "on_hicc1", "127" });
|
||||
REQUIRE(!region.registerCC(1, 126_norm));
|
||||
REQUIRE(!region.registerCC(2, 127_norm));
|
||||
REQUIRE(region.registerCC(1, 127_norm));
|
||||
REQUIRE(region.registerNoteOn(64, 127_norm, 0.5f));
|
||||
}
|
||||
|
||||
SECTION("on_loccN does not disable key triggering, but adding key=-1 does")
|
||||
{
|
||||
region.parseOpcode({ "sample", "*sine" });
|
||||
region.parseOpcode({ "on_locc1", "127" });
|
||||
region.parseOpcode({ "on_hicc1", "127" });
|
||||
region.parseOpcode({ "key", "-1" });
|
||||
REQUIRE(!region.registerCC(1, 126_norm));
|
||||
REQUIRE(region.registerCC(1, 127_norm));
|
||||
REQUIRE(!region.registerNoteOn(64, 127_norm, 0.5f));
|
||||
}
|
||||
|
||||
SECTION("on_loccN does not disable key triggering, but adding hikey=-1 does")
|
||||
{
|
||||
region.parseOpcode({ "sample", "*sine" });
|
||||
region.parseOpcode({ "on_locc1", "127" });
|
||||
region.parseOpcode({ "on_hicc1", "127" });
|
||||
region.parseOpcode({ "hikey", "-1" });
|
||||
REQUIRE(!region.registerCC(1, 126_norm));
|
||||
REQUIRE(!region.registerCC(2, 127_norm));
|
||||
REQUIRE(region.registerCC(1, 127_norm));
|
||||
REQUIRE(!region.registerNoteOn(64, 127_norm, 0.5f));
|
||||
}
|
||||
}
|
||||
|
||||
TEST_CASE("Legato triggers", "Region triggers")
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue