Support lohdccN and hihdccN
This commit is contained in:
parent
ec7b9bbb1f
commit
8c8192140e
3 changed files with 45 additions and 0 deletions
|
|
@ -146,6 +146,11 @@ end_generic:
|
||||||
goto end_region;
|
goto end_region;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
("hi"|"lo") "realcc" (number) END {
|
||||||
|
opcode = absl::StrCat(group(1), "hdcc", group(2));
|
||||||
|
goto end_region;
|
||||||
|
}
|
||||||
|
|
||||||
* {
|
* {
|
||||||
goto end_region;
|
goto end_region;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -206,6 +206,18 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode)
|
||||||
if (auto value = readOpcode(opcode.value, Default::midi7Range))
|
if (auto value = readOpcode(opcode.value, Default::midi7Range))
|
||||||
ccConditions[opcode.parameters.back()].setEnd(normalizeCC(*value));
|
ccConditions[opcode.parameters.back()].setEnd(normalizeCC(*value));
|
||||||
break;
|
break;
|
||||||
|
case hash("lohdcc&"):
|
||||||
|
if (opcode.parameters.back() >= config::numCCs)
|
||||||
|
return false;
|
||||||
|
if (auto value = readOpcode(opcode.value, Default::normalizedRange))
|
||||||
|
ccConditions[opcode.parameters.back()].setStart(*value);
|
||||||
|
break;
|
||||||
|
case hash("hihdcc&"):
|
||||||
|
if (opcode.parameters.back() >= config::numCCs)
|
||||||
|
return false;
|
||||||
|
if (auto value = readOpcode(opcode.value, Default::normalizedRange))
|
||||||
|
ccConditions[opcode.parameters.back()].setEnd(*value);
|
||||||
|
break;
|
||||||
case hash("sw_lokey"):
|
case hash("sw_lokey"):
|
||||||
setRangeStartFromOpcode(opcode, keyswitchRange, Default::keyRange);
|
setRangeStartFromOpcode(opcode, keyswitchRange, Default::keyRange);
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -278,6 +278,34 @@ TEST_CASE("[Region] Parsing opcodes")
|
||||||
REQUIRE(region.ccConditions[127] == sfz::Range<float>(0_norm, 127_norm));
|
REQUIRE(region.ccConditions[127] == sfz::Range<float>(0_norm, 127_norm));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SECTION("lohdcc, hihdcc")
|
||||||
|
{
|
||||||
|
region.parseOpcode({ "lohdcc7", "0.12" });
|
||||||
|
REQUIRE(region.ccConditions[7].getStart() == Approx(0.12f));
|
||||||
|
REQUIRE(region.ccConditions[7].getEnd() == 1.0f);
|
||||||
|
region.parseOpcode({ "lohdcc13", "-1.0" });
|
||||||
|
REQUIRE(region.ccConditions[13] == sfz::Range<float>(0.0f, 1.0f));
|
||||||
|
region.parseOpcode({ "hihdcc64", "0.45" });
|
||||||
|
REQUIRE(region.ccConditions[64].getStart() == 0.0f);
|
||||||
|
REQUIRE(region.ccConditions[64].getEnd() == Approx(0.45f));
|
||||||
|
region.parseOpcode({ "hihdcc126", "1.2" });
|
||||||
|
REQUIRE(region.ccConditions[126] == sfz::Range<float>(0.0f, 1.0f));
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("lorealcc, hirealcc")
|
||||||
|
{
|
||||||
|
region.parseOpcode({ "lorealcc8", "0.12" });
|
||||||
|
REQUIRE(region.ccConditions[8].getStart() == Approx(0.12f));
|
||||||
|
REQUIRE(region.ccConditions[8].getEnd() == 1.0f);
|
||||||
|
region.parseOpcode({ "lorealcc14", "-1.0" });
|
||||||
|
REQUIRE(region.ccConditions[14] == sfz::Range<float>(0.0f, 1.0f));
|
||||||
|
region.parseOpcode({ "hirealcc63", "0.45" });
|
||||||
|
REQUIRE(region.ccConditions[63].getStart() == 0.0f);
|
||||||
|
REQUIRE(region.ccConditions[63].getEnd() == Approx(0.45f));
|
||||||
|
region.parseOpcode({ "hirealcc125", "1.2" });
|
||||||
|
REQUIRE(region.ccConditions[125] == sfz::Range<float>(0.0f, 1.0f));
|
||||||
|
}
|
||||||
|
|
||||||
SECTION("sw_lokey, sw_hikey")
|
SECTION("sw_lokey, sw_hikey")
|
||||||
{
|
{
|
||||||
REQUIRE(region.keyswitchRange == sfz::Range<uint8_t>(0, 127));
|
REQUIRE(region.keyswitchRange == sfz::Range<uint8_t>(0, 127));
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue