diff --git a/src/sfizz/Region.cpp b/src/sfizz/Region.cpp index 3411e915..fd87ef30 100644 --- a/src/sfizz/Region.cpp +++ b/src/sfizz/Region.cpp @@ -199,6 +199,9 @@ bool sfz::Region::parseOpcode(const Opcode& opcode) setValueFromOpcode(opcode, keyswitch, Default::keyRange); keySwitched = false; break; + case hash("sw_label"): + keyswitchLabel = opcode.value; + break; case hash("sw_down"): setValueFromOpcode(opcode, keyswitchDown, Default::keyRange); keySwitched = false; diff --git a/src/sfizz/Region.h b/src/sfizz/Region.h index fa952675..66a0e94e 100644 --- a/src/sfizz/Region.h +++ b/src/sfizz/Region.h @@ -259,6 +259,7 @@ struct Region { CCMap> ccConditions { Default::ccValueRange }; Range keyswitchRange { Default::keyRange }; // sw_hikey and sw_lokey absl::optional keyswitch {}; // sw_last + absl::optional keyswitchLabel {}; absl::optional keyswitchUp {}; // sw_up absl::optional keyswitchDown {}; // sw_down absl::optional previousNote {}; // sw_previous diff --git a/tests/RegionT.cpp b/tests/RegionT.cpp index f982c424..fe33765c 100644 --- a/tests/RegionT.cpp +++ b/tests/RegionT.cpp @@ -273,6 +273,15 @@ TEST_CASE("[Region] Parsing opcodes") REQUIRE(region.keyswitchRange == sfz::Range(0, 0)); } + SECTION("sw_label") + { + REQUIRE(!region.keyswitchLabel); + region.parseOpcode({ "sw_label", "note" }); + REQUIRE(region.keyswitchLabel == "note"); + region.parseOpcode({ "sw_label", "ring" }); + REQUIRE(region.keyswitchLabel == "ring"); + } + SECTION("sw_last") { REQUIRE(!region.keyswitch);