Merge pull request #953 from paulfd/loop-startcc-aliases

Added aliases for Cakewalk and RGC loop_oncc opcodes
This commit is contained in:
Paul Ferrand 2021-07-20 12:26:17 +02:00 committed by GitHub
commit a1cef9ba16
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 949 additions and 672 deletions

File diff suppressed because it is too large Load diff

View file

@ -192,6 +192,21 @@ end_region_oncc:
goto end_region;
}
"loop_startcc" (number) END {
opcode = absl::StrCat("loop_start_oncc", group(1));
goto end_region;
}
"loop_lengthcc" (number) END {
opcode = absl::StrCat("loop_end_oncc", group(1));
goto end_region;
}
"loop_length_oncc" (number) END {
opcode = absl::StrCat("loop_end_oncc", group(1));
goto end_region;
}
* {
goto end_region;
}

View file

@ -128,13 +128,13 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode, bool cleanOpcode)
case hash("loop_start"): // also loopstart
loopRange.setStart(opcode.read(Default::loopStart));
break;
case hash("loop_start_oncc&"): // also loop_start_cc&
case hash("loop_start_oncc&"): // also loop_start_cc&, loop_startcc&
if (opcode.parameters.back() > config::numCCs)
return false;
loopStartCC[opcode.parameters.back()] = opcode.read(Default::loopMod);
break;
case hash("loop_end_oncc&"): // also loop_end_cc&
case hash("loop_end_oncc&"): // also loop_end_cc&, loop_lengthcc&, loop_length_oncc&, loop_length_cc&
if (opcode.parameters.back() > config::numCCs)
return false;

View file

@ -356,6 +356,9 @@ TEST_CASE("[Values] Loop range")
<region> sample=kick.wav
<region> sample=kick.wav loop_start_cc12=10 loop_end_cc14=-100
<region> sample=kick.wav loop_start_oncc12=-10 loop_end_oncc14=100
<region> sample=kick.wav loop_startcc12=-10 loop_lengthcc14=100
<region> sample=kick.wav loop_length_oncc14=100
<region> sample=kick.wav loop_length_cc14=100
)");
synth.dispatchMessage(client, 0, "/region0/loop_start_cc12", "", nullptr);
synth.dispatchMessage(client, 0, "/region0/loop_end_cc14", "", nullptr);
@ -363,6 +366,10 @@ TEST_CASE("[Values] Loop range")
synth.dispatchMessage(client, 0, "/region1/loop_end_cc14", "", nullptr);
synth.dispatchMessage(client, 0, "/region2/loop_start_cc12", "", nullptr);
synth.dispatchMessage(client, 0, "/region2/loop_end_cc14", "", nullptr);
synth.dispatchMessage(client, 0, "/region3/loop_start_cc12", "", nullptr);
synth.dispatchMessage(client, 0, "/region3/loop_end_cc14", "", nullptr);
synth.dispatchMessage(client, 0, "/region4/loop_end_cc14", "", nullptr);
synth.dispatchMessage(client, 0, "/region5/loop_end_cc14", "", nullptr);
std::vector<std::string> expected {
"/region0/loop_start_cc12,h : { 0 }",
"/region0/loop_end_cc14,h : { 0 }",
@ -370,6 +377,10 @@ TEST_CASE("[Values] Loop range")
"/region1/loop_end_cc14,h : { -100 }",
"/region2/loop_start_cc12,h : { -10 }",
"/region2/loop_end_cc14,h : { 100 }",
"/region3/loop_start_cc12,h : { -10 }",
"/region3/loop_end_cc14,h : { 100 }",
"/region4/loop_end_cc14,h : { 100 }",
"/region5/loop_end_cc14,h : { 100 }",
};
REQUIRE(messageList == expected);
}