diff --git a/src/sfizz/Region.cpp b/src/sfizz/Region.cpp index 2d96835a..b940031a 100644 --- a/src/sfizz/Region.cpp +++ b/src/sfizz/Region.cpp @@ -349,9 +349,11 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode) break; case hash("release"): trigger = SfzTrigger::release; + loopMode = SfzLoopMode::one_shot; break; case hash("release_key"): trigger = SfzTrigger::release_key; + loopMode = SfzLoopMode::one_shot; break; default: DBG("Unknown trigger mode: " << opcode.value); diff --git a/tests/RegionT.cpp b/tests/RegionT.cpp index 9ea9b924..cdf7a13c 100644 --- a/tests/RegionT.cpp +++ b/tests/RegionT.cpp @@ -497,10 +497,15 @@ TEST_CASE("[Region] Parsing opcodes") REQUIRE(region.trigger == SfzTrigger::attack); region.parseOpcode({ "trigger", "release" }); REQUIRE(region.trigger == SfzTrigger::release); + REQUIRE(region.loopMode == SfzLoopMode::one_shot); region.parseOpcode({ "trigger", "first" }); REQUIRE(region.trigger == SfzTrigger::first); region.parseOpcode({ "trigger", "legato" }); REQUIRE(region.trigger == SfzTrigger::legato); + region.parseOpcode({ "loop_mode", "no_loop" }); + region.parseOpcode({ "trigger", "release_key" }); + REQUIRE(region.trigger == SfzTrigger::release_key); + REQUIRE(region.loopMode == SfzLoopMode::one_shot); } SECTION("on_locc, on_hicc")