From 7773474b1891c4a6202f97f880750d0217f95bb0 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Thu, 14 May 2020 23:54:57 +0200 Subject: [PATCH 01/14] Support the opcode set_hdccN --- src/sfizz/Synth.cpp | 10 ++++++++++ tests/FilesT.cpp | 9 +++++++++ tests/TestFiles/set_hdcc.sfz | 3 +++ 3 files changed, 22 insertions(+) create mode 100644 tests/TestFiles/set_hdcc.sfz diff --git a/src/sfizz/Synth.cpp b/src/sfizz/Synth.cpp index 0f438686..52b80c9a 100644 --- a/src/sfizz/Synth.cpp +++ b/src/sfizz/Synth.cpp @@ -209,6 +209,16 @@ void sfz::Synth::handleControlOpcodes(const std::vector& members) resources.midiState.ccEvent(0, member.parameters.back(), normalizeCC(*ccValue)); } break; + case hash("Set_hdcc&"): // fallthrough + case hash("set_hdcc&"): + case hash("Set_realcc&"): + case hash("set_realcc&"): + if (Default::ccNumberRange.containsWithEnd(member.parameters.back())) { + const auto ccValue = readOpcode(member.value, Default::normalizedRange); + if (ccValue) + resources.midiState.ccEvent(0, member.parameters.back(), *ccValue); + } + break; case hash("Label_cc&"): // fallthrough case hash("label_cc&"): if (Default::ccNumberRange.containsWithEnd(member.parameters.back())) diff --git a/tests/FilesT.cpp b/tests/FilesT.cpp index dbfaea38..c3b6d473 100644 --- a/tests/FilesT.cpp +++ b/tests/FilesT.cpp @@ -400,6 +400,15 @@ TEST_CASE("[Files] Set CC applies properly") REQUIRE(midiState.getCCValue(61) == 122_norm); } +TEST_CASE("[Files] Set HDCC applies properly") +{ + sfz::Synth synth; + const auto& midiState = synth.getResources().midiState; + synth.loadSfzFile(fs::current_path() / "tests/TestFiles/set_hdcc.sfz"); + REQUIRE(midiState.getCCValue(142) == Approx(0.5678)); + REQUIRE(midiState.getCCValue(61) == Approx(0.1234)); +} + TEST_CASE("[Files] Note and octave offsets") { sfz::Synth synth; diff --git a/tests/TestFiles/set_hdcc.sfz b/tests/TestFiles/set_hdcc.sfz new file mode 100644 index 00000000..02673b3b --- /dev/null +++ b/tests/TestFiles/set_hdcc.sfz @@ -0,0 +1,3 @@ + set_hdcc61=0.1234 + set_hdcc142=0.5678 + sample=snare.wav From ec7b9bbb1fffe372d2eb481695f29a00dc2603b6 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Fri, 15 May 2020 00:25:37 +0200 Subject: [PATCH 02/14] Add the realcc test --- tests/FilesT.cpp | 9 +++++++++ tests/TestFiles/set_realcc.sfz | 3 +++ 2 files changed, 12 insertions(+) create mode 100644 tests/TestFiles/set_realcc.sfz diff --git a/tests/FilesT.cpp b/tests/FilesT.cpp index c3b6d473..7e0e0520 100644 --- a/tests/FilesT.cpp +++ b/tests/FilesT.cpp @@ -409,6 +409,15 @@ TEST_CASE("[Files] Set HDCC applies properly") REQUIRE(midiState.getCCValue(61) == Approx(0.1234)); } +TEST_CASE("[Files] Set RealCC applies properly") +{ + sfz::Synth synth; + const auto& midiState = synth.getResources().midiState; + synth.loadSfzFile(fs::current_path() / "tests/TestFiles/set_realcc.sfz"); + REQUIRE(midiState.getCCValue(142) == Approx(0.5678)); + REQUIRE(midiState.getCCValue(61) == Approx(0.1234)); +} + TEST_CASE("[Files] Note and octave offsets") { sfz::Synth synth; diff --git a/tests/TestFiles/set_realcc.sfz b/tests/TestFiles/set_realcc.sfz new file mode 100644 index 00000000..8ce9221d --- /dev/null +++ b/tests/TestFiles/set_realcc.sfz @@ -0,0 +1,3 @@ + set_realcc61=0.1234 + set_realcc142=0.5678 + sample=snare.wav From 8c8192140ea26a7820390c5362ccde98a61921f6 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Fri, 15 May 2020 00:37:47 +0200 Subject: [PATCH 03/14] Support lohdccN and hihdccN --- src/sfizz/OpcodeCleanup.re | 5 +++++ src/sfizz/Region.cpp | 12 ++++++++++++ tests/RegionT.cpp | 28 ++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+) diff --git a/src/sfizz/OpcodeCleanup.re b/src/sfizz/OpcodeCleanup.re index 05305bff..8f48ab6c 100644 --- a/src/sfizz/OpcodeCleanup.re +++ b/src/sfizz/OpcodeCleanup.re @@ -146,6 +146,11 @@ end_generic: goto end_region; } + ("hi"|"lo") "realcc" (number) END { + opcode = absl::StrCat(group(1), "hdcc", group(2)); + goto end_region; + } + * { goto end_region; } diff --git a/src/sfizz/Region.cpp b/src/sfizz/Region.cpp index 8d505186..9f665296 100644 --- a/src/sfizz/Region.cpp +++ b/src/sfizz/Region.cpp @@ -206,6 +206,18 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode) if (auto value = readOpcode(opcode.value, Default::midi7Range)) ccConditions[opcode.parameters.back()].setEnd(normalizeCC(*value)); 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"): setRangeStartFromOpcode(opcode, keyswitchRange, Default::keyRange); break; diff --git a/tests/RegionT.cpp b/tests/RegionT.cpp index c2efe488..19d2ab71 100644 --- a/tests/RegionT.cpp +++ b/tests/RegionT.cpp @@ -278,6 +278,34 @@ TEST_CASE("[Region] Parsing opcodes") REQUIRE(region.ccConditions[127] == sfz::Range(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(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(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(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(0.0f, 1.0f)); + } + SECTION("sw_lokey, sw_hikey") { REQUIRE(region.keyswitchRange == sfz::Range(0, 127)); From 81f8e2bff2de2e4e8459d137ac85e8d85abe4e16 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Fri, 15 May 2020 00:38:26 +0200 Subject: [PATCH 04/14] Update the opcode cleanup grammar --- src/sfizz/OpcodeCleanup.cpp | 1788 ++++++++++++++++++----------------- 1 file changed, 940 insertions(+), 848 deletions(-) diff --git a/src/sfizz/OpcodeCleanup.cpp b/src/sfizz/OpcodeCleanup.cpp index b42c44e1..8e33865f 100644 --- a/src/sfizz/OpcodeCleanup.cpp +++ b/src/sfizz/OpcodeCleanup.cpp @@ -1,4 +1,4 @@ -/* Generated by re2c 1.3 on Tue May 5 03:27:40 2020 */ +/* Generated by re2c 1.3 on Fri May 15 00:29:29 2020 */ #line 1 "src/sfizz/OpcodeCleanup.re" /* -*- mode: c++; -*- */ // SPDX-License-Identifier: BSD-2-Clause @@ -189,214 +189,127 @@ end_generic: case 'g': yyt1 = YYCURSOR; goto yy26; + case 'h': goto yy27; case 'l': yyt1 = YYCURSOR; - goto yy27; - case 'o': goto yy28; + goto yy28; + case 'o': goto yy29; case 'p': yyt1 = YYCURSOR; - goto yy29; + goto yy30; case 'r': yyt1 = YYCURSOR; - goto yy30; + goto yy31; case 't': yyt1 = YYCURSOR; - goto yy31; + goto yy32; default: goto yy19; } yy19: ++YYCURSOR; yy20: -#line 149 "src/sfizz/OpcodeCleanup.re" +#line 154 "src/sfizz/OpcodeCleanup.re" { goto end_region; } -#line 215 "src/sfizz/OpcodeCleanup.cpp" +#line 216 "src/sfizz/OpcodeCleanup.cpp" yy21: yych = *(YYMARKER = ++YYCURSOR); switch (yych) { - case 'm': goto yy32; + case 'm': goto yy33; default: goto yy20; } yy22: yych = *(YYMARKER = ++YYCURSOR); switch (yych) { - case 'e': goto yy34; + case 'e': goto yy35; default: goto yy20; } yy23: yych = *(YYMARKER = ++YYCURSOR); switch (yych) { - case 'u': goto yy35; + case 'u': goto yy36; default: goto yy20; } yy24: yych = *(YYMARKER = ++YYCURSOR); switch (yych) { - case 'q': goto yy36; + case 'q': goto yy37; default: goto yy20; } yy25: yych = *(YYMARKER = ++YYCURSOR); switch (yych) { - case 'i': goto yy37; + case 'i': goto yy38; default: goto yy20; } yy26: yych = *(YYMARKER = ++YYCURSOR); switch (yych) { - case 'a': goto yy38; + case 'a': goto yy39; default: goto yy20; } yy27: yych = *(YYMARKER = ++YYCURSOR); switch (yych) { - case 'f': goto yy39; - case 'o': goto yy40; + case 'i': goto yy40; default: goto yy20; } yy28: yych = *(YYMARKER = ++YYCURSOR); switch (yych) { case 'f': goto yy41; - case 'n': goto yy42; + case 'o': goto yy42; default: goto yy20; } yy29: yych = *(YYMARKER = ++YYCURSOR); switch (yych) { - case 'i': goto yy43; - case 'o': goto yy44; + case 'f': goto yy43; + case 'n': goto yy44; default: goto yy20; } yy30: yych = *(YYMARKER = ++YYCURSOR); switch (yych) { - case 'e': goto yy45; + case 'i': goto yy45; + case 'o': goto yy46; default: goto yy20; } yy31: yych = *(YYMARKER = ++YYCURSOR); switch (yych) { - case 'u': goto yy46; + case 'e': goto yy47; default: goto yy20; } yy32: - yych = *++YYCURSOR; + yych = *(YYMARKER = ++YYCURSOR); switch (yych) { - case 'p': goto yy47; - default: goto yy33; + case 'u': goto yy48; + default: goto yy20; } yy33: - YYCURSOR = YYMARKER; - goto yy20; -yy34: yych = *++YYCURSOR; switch (yych) { - case 'n': goto yy48; - default: goto yy33; + case 'p': goto yy49; + default: goto yy34; } +yy34: + YYCURSOR = YYMARKER; + goto yy20; yy35: yych = *++YYCURSOR; switch (yych) { - case 't': goto yy49; - default: goto yy33; + case 'n': goto yy50; + default: goto yy34; } yy36: yych = *++YYCURSOR; switch (yych) { - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy50; - default: goto yy33; + case 't': goto yy51; + default: goto yy34; } yy37: - yych = *++YYCURSOR; - switch (yych) { - case 'l': goto yy52; - default: goto yy33; - } -yy38: - yych = *++YYCURSOR; - switch (yych) { - case 'i': goto yy53; - default: goto yy33; - } -yy39: - yych = *++YYCURSOR; - switch (yych) { - case 'o': goto yy54; - default: goto yy33; - } -yy40: - yych = *++YYCURSOR; - switch (yych) { - case 'o': goto yy55; - default: goto yy33; - } -yy41: - yych = *++YYCURSOR; - switch (yych) { - case 'f': goto yy56; - default: goto yy33; - } -yy42: - yych = *++YYCURSOR; - switch (yych) { - case '_': goto yy57; - default: goto yy33; - } -yy43: - yych = *++YYCURSOR; - switch (yych) { - case 't': goto yy58; - default: goto yy33; - } -yy44: - yych = *++YYCURSOR; - switch (yych) { - case 'l': goto yy59; - default: goto yy33; - } -yy45: - yych = *++YYCURSOR; - switch (yych) { - case 's': goto yy60; - default: goto yy33; - } -yy46: - yych = *++YYCURSOR; - switch (yych) { - case 'n': goto yy61; - default: goto yy33; - } -yy47: - yych = *++YYCURSOR; - switch (yych) { - case 'e': goto yy62; - case 'l': goto yy63; - default: goto yy33; - } -yy48: - yych = *++YYCURSOR; - switch (yych) { - case 'd': goto yy64; - default: goto yy33; - } -yy49: - yych = *++YYCURSOR; - switch (yych) { - case 'o': goto yy65; - default: goto yy33; - } -yy50: yych = *++YYCURSOR; switch (yych) { case '0': @@ -408,9 +321,94 @@ yy50: case '6': case '7': case '8': - case '9': goto yy50; - case '_': goto yy66; - default: goto yy33; + case '9': goto yy52; + default: goto yy34; + } +yy38: + yych = *++YYCURSOR; + switch (yych) { + case 'l': goto yy54; + default: goto yy34; + } +yy39: + yych = *++YYCURSOR; + switch (yych) { + case 'i': goto yy55; + default: goto yy34; + } +yy40: + yych = *++YYCURSOR; + switch (yych) { + case 'r': goto yy56; + default: goto yy34; + } +yy41: + yych = *++YYCURSOR; + switch (yych) { + case 'o': goto yy57; + default: goto yy34; + } +yy42: + yych = *++YYCURSOR; + switch (yych) { + case 'o': goto yy58; + case 'r': goto yy56; + default: goto yy34; + } +yy43: + yych = *++YYCURSOR; + switch (yych) { + case 'f': goto yy59; + default: goto yy34; + } +yy44: + yych = *++YYCURSOR; + switch (yych) { + case '_': goto yy60; + default: goto yy34; + } +yy45: + yych = *++YYCURSOR; + switch (yych) { + case 't': goto yy61; + default: goto yy34; + } +yy46: + yych = *++YYCURSOR; + switch (yych) { + case 'l': goto yy62; + default: goto yy34; + } +yy47: + yych = *++YYCURSOR; + switch (yych) { + case 's': goto yy63; + default: goto yy34; + } +yy48: + yych = *++YYCURSOR; + switch (yych) { + case 'n': goto yy64; + default: goto yy34; + } +yy49: + yych = *++YYCURSOR; + switch (yych) { + case 'e': goto yy65; + case 'l': goto yy66; + default: goto yy34; + } +yy50: + yych = *++YYCURSOR; + switch (yych) { + case 'd': goto yy67; + default: goto yy34; + } +yy51: + yych = *++YYCURSOR; + switch (yych) { + case 'o': goto yy68; + default: goto yy34; } yy52: yych = *++YYCURSOR; @@ -424,20 +422,9 @@ yy52: case '6': case '7': case '8': - case '9': - yyt1 = YYCURSOR; - goto yy67; + case '9': goto yy52; case '_': goto yy69; - case 'e': goto yy62; - case 'l': goto yy63; - case 't': goto yy70; - default: goto yy33; - } -yy53: - yych = *++YYCURSOR; - switch (yych) { - case 'n': goto yy71; - default: goto yy33; + default: goto yy34; } yy54: yych = *++YYCURSOR; @@ -451,138 +438,134 @@ yy54: case '6': case '7': case '8': - case '9': goto yy72; - default: goto yy33; + case '9': + yyt1 = YYCURSOR; + goto yy70; + case '_': goto yy72; + case 'e': goto yy65; + case 'l': goto yy66; + case 't': goto yy73; + default: goto yy34; } yy55: yych = *++YYCURSOR; switch (yych) { - case 'p': goto yy74; - default: goto yy33; + case 'n': goto yy74; + default: goto yy34; } yy56: yych = *++YYCURSOR; switch (yych) { - case 'b': - yyt1 = YYCURSOR; - goto yy75; - case 'm': - yyt1 = YYCURSOR; - goto yy76; - default: goto yy33; + case 'e': goto yy75; + default: goto yy34; } yy57: yych = *++YYCURSOR; switch (yych) { - case 'h': goto yy77; - case 'l': goto yy78; - default: goto yy33; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy76; + default: goto yy34; } yy58: yych = *++YYCURSOR; switch (yych) { - case 'c': goto yy79; - default: goto yy33; + case 'p': goto yy78; + default: goto yy34; } yy59: yych = *++YYCURSOR; switch (yych) { - case 'y': goto yy80; - default: goto yy33; + case 'b': + yyt1 = YYCURSOR; + goto yy79; + case 'm': + yyt1 = YYCURSOR; + goto yy80; + default: goto yy34; } yy60: yych = *++YYCURSOR; switch (yych) { - case 'o': goto yy81; - default: goto yy33; + case 'h': goto yy81; + case 'l': goto yy82; + default: goto yy34; } yy61: yych = *++YYCURSOR; switch (yych) { - case 'e': goto yy82; - default: goto yy33; + case 'c': goto yy83; + default: goto yy34; } yy62: yych = *++YYCURSOR; switch (yych) { - case 'g': goto yy83; - default: goto yy33; + case 'y': goto yy84; + default: goto yy34; } yy63: yych = *++YYCURSOR; switch (yych) { - case 'f': goto yy84; - default: goto yy33; + case 'o': goto yy85; + default: goto yy34; } yy64: yych = *++YYCURSOR; switch (yych) { - case 'd': - yyt1 = YYCURSOR; - goto yy85; - case 'u': - yyt1 = YYCURSOR; - goto yy86; - default: goto yy33; + case 'e': goto yy86; + default: goto yy34; } yy65: yych = *++YYCURSOR; switch (yych) { - case 'f': goto yy87; - default: goto yy33; + case 'g': goto yy87; + default: goto yy34; } yy66: yych = *++YYCURSOR; switch (yych) { - case 'b': - yyt2 = YYCURSOR; - goto yy88; - case 'f': - yyt2 = YYCURSOR; - goto yy89; - case 'g': - yyt2 = YYCURSOR; - goto yy90; - default: goto yy33; + case 'f': goto yy88; + default: goto yy34; } yy67: yych = *++YYCURSOR; switch (yych) { - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy67; - case 't': goto yy91; - default: goto yy33; + case 'd': + yyt1 = YYCURSOR; + goto yy89; + case 'u': + yyt1 = YYCURSOR; + goto yy90; + default: goto yy34; + } +yy68: + yych = *++YYCURSOR; + switch (yych) { + case 'f': goto yy91; + default: goto yy34; } yy69: yych = *++YYCURSOR; - yyt1 = YYCURSOR; - goto yy95; + switch (yych) { + case 'b': + yyt2 = YYCURSOR; + goto yy92; + case 'f': + yyt2 = YYCURSOR; + goto yy93; + case 'g': + yyt2 = YYCURSOR; + goto yy94; + default: goto yy34; + } yy70: - yych = *++YYCURSOR; - switch (yych) { - case 'y': goto yy96; - default: goto yy33; - } -yy71: - yych = *++YYCURSOR; - switch (yych) { - case 0x00: - yyt2 = yyt3 = NULL; - goto yy97; - case '_': - yyt3 = YYCURSOR; - goto yy99; - default: goto yy33; - } -yy72: yych = *++YYCURSOR; switch (yych) { case '0': @@ -594,132 +577,175 @@ yy72: case '6': case '7': case '8': - case '9': goto yy72; - case '_': goto yy101; - default: goto yy33; + case '9': goto yy70; + case 't': goto yy95; + default: goto yy34; + } +yy72: + yych = *++YYCURSOR; + yyt1 = YYCURSOR; + goto yy99; +yy73: + yych = *++YYCURSOR; + switch (yych) { + case 'y': goto yy100; + default: goto yy34; } yy74: yych = *++YYCURSOR; switch (yych) { - case 'e': - yyt1 = YYCURSOR; - goto yy102; - case 'm': - yyt1 = YYCURSOR; + case 0x00: + yyt2 = yyt3 = NULL; + goto yy101; + case '_': + yyt3 = YYCURSOR; goto yy103; - case 's': - yyt1 = YYCURSOR; - goto yy104; - default: goto yy33; + default: goto yy34; } yy75: yych = *++YYCURSOR; switch (yych) { - case 'y': goto yy105; - default: goto yy33; + case 'a': goto yy105; + default: goto yy34; } yy76: yych = *++YYCURSOR; switch (yych) { - case 'o': goto yy106; - default: goto yy33; - } -yy77: - yych = *++YYCURSOR; - switch (yych) { - case 'i': goto yy107; - default: goto yy33; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy76; + case '_': goto yy106; + default: goto yy34; } yy78: yych = *++YYCURSOR; switch (yych) { - case 'o': goto yy107; - default: goto yy33; + case 'e': + yyt1 = YYCURSOR; + goto yy107; + case 'm': + yyt1 = YYCURSOR; + goto yy108; + case 's': + yyt1 = YYCURSOR; + goto yy109; + default: goto yy34; } yy79: yych = *++YYCURSOR; switch (yych) { - case 'h': goto yy47; - default: goto yy33; + case 'y': goto yy110; + default: goto yy34; } yy80: yych = *++YYCURSOR; switch (yych) { - case 'p': goto yy108; - default: goto yy33; + case 'o': goto yy111; + default: goto yy34; } yy81: yych = *++YYCURSOR; switch (yych) { - case 'n': goto yy109; - default: goto yy33; + case 'i': goto yy112; + default: goto yy34; } yy82: yych = *++YYCURSOR; switch (yych) { - case 0x00: - yyt2 = yyt3 = NULL; - goto yy110; - case '_': - yyt3 = YYCURSOR; - goto yy112; - default: goto yy33; + case 'o': goto yy112; + default: goto yy34; } yy83: yych = *++YYCURSOR; switch (yych) { - case '_': goto yy114; - default: goto yy33; + case 'h': goto yy49; + default: goto yy34; } yy84: yych = *++YYCURSOR; switch (yych) { - case 'o': goto yy115; - default: goto yy33; + case 'p': goto yy113; + default: goto yy34; } yy85: yych = *++YYCURSOR; switch (yych) { - case 'o': goto yy116; - default: goto yy33; + case 'n': goto yy114; + default: goto yy34; } yy86: yych = *++YYCURSOR; switch (yych) { - case 'p': goto yy117; - default: goto yy33; + case 0x00: + yyt2 = yyt3 = NULL; + goto yy115; + case '_': + yyt3 = YYCURSOR; + goto yy117; + default: goto yy34; } yy87: yych = *++YYCURSOR; switch (yych) { - case 'f': goto yy118; - default: goto yy33; + case '_': goto yy119; + default: goto yy34; } yy88: yych = *++YYCURSOR; switch (yych) { - case 'w': goto yy119; - default: goto yy33; + case 'o': goto yy120; + default: goto yy34; } yy89: yych = *++YYCURSOR; switch (yych) { - case 'r': goto yy120; - default: goto yy33; + case 'o': goto yy121; + default: goto yy34; } yy90: yych = *++YYCURSOR; switch (yych) { - case 'a': goto yy121; - default: goto yy33; + case 'p': goto yy122; + default: goto yy34; } yy91: yych = *++YYCURSOR; switch (yych) { - case 'y': goto yy122; - default: goto yy33; + case 'f': goto yy123; + default: goto yy34; } yy92: + yych = *++YYCURSOR; + switch (yych) { + case 'w': goto yy124; + default: goto yy34; + } +yy93: + yych = *++YYCURSOR; + switch (yych) { + case 'r': goto yy125; + default: goto yy34; + } +yy94: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy126; + default: goto yy34; + } +yy95: + yych = *++YYCURSOR; + switch (yych) { + case 'y': goto yy127; + default: goto yy34; + } +yy96: ++YYCURSOR; yynmatch = 2; yypmatch[2] = yyt1; @@ -728,22 +754,22 @@ yy92: yypmatch[3] = YYCURSOR - 1; #line 136 "src/sfizz/OpcodeCleanup.re" { - opcode = absl::StrCat("fil1_", group(1)); - goto end_region; - } -#line 735 "src/sfizz/OpcodeCleanup.cpp" -yy94: + opcode = absl::StrCat("fil1_", group(1)); + goto end_region; + } +#line 761 "src/sfizz/OpcodeCleanup.cpp" +yy98: yych = *++YYCURSOR; -yy95: - if (yych <= 0x00) goto yy92; - goto yy94; -yy96: +yy99: + if (yych <= 0x00) goto yy96; + goto yy98; +yy100: yych = *++YYCURSOR; switch (yych) { - case 'p': goto yy123; - default: goto yy33; + case 'p': goto yy128; + default: goto yy34; } -yy97: +yy101: ++YYCURSOR; yynmatch = 2; yypmatch[0] = yyt1; @@ -752,81 +778,87 @@ yy97: yypmatch[1] = YYCURSOR; #line 122 "src/sfizz/OpcodeCleanup.re" { - opcode = absl::StrCat("volume", group(1)); - goto end_region; - } -#line 759 "src/sfizz/OpcodeCleanup.cpp" -yy99: + opcode = absl::StrCat("volume", group(1)); + goto end_region; + } +#line 785 "src/sfizz/OpcodeCleanup.cpp" +yy103: yych = *++YYCURSOR; if (yych <= 0x00) { yyt2 = YYCURSOR; - goto yy97; + goto yy101; } - goto yy99; -yy101: + goto yy103; +yy105: + yych = *++YYCURSOR; + switch (yych) { + case 'l': goto yy129; + default: goto yy34; + } +yy106: yych = *++YYCURSOR; switch (yych) { case 'o': yyt2 = YYCURSOR; - goto yy124; + goto yy130; case 'r': yyt2 = YYCURSOR; - goto yy125; + goto yy131; case 's': yyt2 = YYCURSOR; - goto yy126; + goto yy132; case 'w': yyt2 = YYCURSOR; - goto yy127; - default: goto yy33; - } -yy102: - yych = *++YYCURSOR; - switch (yych) { - case 'n': goto yy128; - default: goto yy33; - } -yy103: - yych = *++YYCURSOR; - switch (yych) { - case 'o': goto yy129; - default: goto yy33; - } -yy104: - yych = *++YYCURSOR; - switch (yych) { - case 't': goto yy130; - default: goto yy33; - } -yy105: - yych = *++YYCURSOR; - if (yych <= 0x00) goto yy131; - goto yy33; -yy106: - yych = *++YYCURSOR; - switch (yych) { - case 'd': goto yy133; - default: goto yy33; + goto yy133; + default: goto yy34; } yy107: yych = *++YYCURSOR; switch (yych) { - case 'c': goto yy134; - default: goto yy33; + case 'n': goto yy134; + default: goto yy34; } yy108: yych = *++YYCURSOR; switch (yych) { - case 'h': goto yy135; - default: goto yy33; + case 'o': goto yy135; + default: goto yy34; } yy109: yych = *++YYCURSOR; switch (yych) { - case 'a': goto yy136; - default: goto yy33; + case 't': goto yy136; + default: goto yy34; } yy110: + yych = *++YYCURSOR; + if (yych <= 0x00) goto yy137; + goto yy34; +yy111: + yych = *++YYCURSOR; + switch (yych) { + case 'd': goto yy139; + default: goto yy34; + } +yy112: + yych = *++YYCURSOR; + switch (yych) { + case 'c': goto yy140; + default: goto yy34; + } +yy113: + yych = *++YYCURSOR; + switch (yych) { + case 'h': goto yy141; + default: goto yy34; + } +yy114: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy142; + default: goto yy34; + } +yy115: ++YYCURSOR; yynmatch = 2; yypmatch[0] = yyt1; @@ -835,137 +867,143 @@ yy110: yypmatch[1] = YYCURSOR; #line 126 "src/sfizz/OpcodeCleanup.re" { - opcode = absl::StrCat("pitch", group(1)); - goto end_region; - } -#line 842 "src/sfizz/OpcodeCleanup.cpp" -yy112: + opcode = absl::StrCat("pitch", group(1)); + goto end_region; + } +#line 874 "src/sfizz/OpcodeCleanup.cpp" +yy117: yych = *++YYCURSOR; if (yych <= 0x00) { yyt2 = YYCURSOR; - goto yy110; + goto yy115; } - goto yy112; -yy114: + goto yy117; +yy119: yych = *++YYCURSOR; switch (yych) { case 'a': yyt2 = YYCURSOR; - goto yy137; + goto yy143; case 'd': yyt2 = YYCURSOR; - goto yy138; + goto yy144; case 'h': yyt2 = YYCURSOR; - goto yy139; + goto yy145; case 'r': yyt2 = YYCURSOR; - goto yy140; + goto yy146; case 's': yyt2 = YYCURSOR; - goto yy141; - default: goto yy33; - } -yy115: - yych = *++YYCURSOR; - switch (yych) { - case '_': goto yy142; - default: goto yy33; - } -yy116: - yych = *++YYCURSOR; - switch (yych) { - case 'w': goto yy143; - default: goto yy33; - } -yy117: - yych = *++YYCURSOR; - if (yych <= 0x00) goto yy144; - goto yy33; -yy118: - yych = *++YYCURSOR; - switch (yych) { - case 0x00: - yyt2 = yyt3 = NULL; - goto yy146; - case '_': - yyt3 = YYCURSOR; - goto yy148; - default: goto yy33; - } -yy119: - yych = *++YYCURSOR; - switch (yych) { - case 'c': goto yy150; - default: goto yy33; + goto yy147; + default: goto yy34; } yy120: yych = *++YYCURSOR; switch (yych) { - case 'e': goto yy151; - default: goto yy33; + case '_': goto yy148; + default: goto yy34; } yy121: yych = *++YYCURSOR; switch (yych) { - case 'i': goto yy152; - default: goto yy33; + case 'w': goto yy149; + default: goto yy34; } yy122: yych = *++YYCURSOR; - switch (yych) { - case 'p': goto yy153; - default: goto yy33; - } + if (yych <= 0x00) goto yy150; + goto yy34; yy123: yych = *++YYCURSOR; switch (yych) { - case 'e': goto yy154; - default: goto yy33; + case 0x00: + yyt2 = yyt3 = NULL; + goto yy152; + case '_': + yyt3 = YYCURSOR; + goto yy154; + default: goto yy34; } yy124: yych = *++YYCURSOR; switch (yych) { - case 'f': goto yy155; - default: goto yy33; + case 'c': goto yy156; + default: goto yy34; } yy125: yych = *++YYCURSOR; switch (yych) { - case 'a': goto yy156; - default: goto yy33; + case 'e': goto yy157; + default: goto yy34; } yy126: yych = *++YYCURSOR; switch (yych) { - case 'c': goto yy157; - default: goto yy33; + case 'i': goto yy158; + default: goto yy34; } yy127: yych = *++YYCURSOR; switch (yych) { - case 'a': goto yy158; - default: goto yy33; + case 'p': goto yy159; + default: goto yy34; } yy128: yych = *++YYCURSOR; switch (yych) { - case 'd': goto yy159; - default: goto yy33; + case 'e': goto yy160; + default: goto yy34; } yy129: yych = *++YYCURSOR; switch (yych) { - case 'd': goto yy160; - default: goto yy33; + case 'c': goto yy161; + default: goto yy34; } yy130: yych = *++YYCURSOR; switch (yych) { - case 'a': goto yy161; - default: goto yy33; + case 'f': goto yy162; + default: goto yy34; } yy131: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy163; + default: goto yy34; + } +yy132: + yych = *++YYCURSOR; + switch (yych) { + case 'c': goto yy164; + default: goto yy34; + } +yy133: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy165; + default: goto yy34; + } +yy134: + yych = *++YYCURSOR; + switch (yych) { + case 'd': goto yy166; + default: goto yy34; + } +yy135: + yych = *++YYCURSOR; + switch (yych) { + case 'd': goto yy167; + default: goto yy34; + } +yy136: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy168; + default: goto yy34; + } +yy137: ++YYCURSOR; yynmatch = 2; yypmatch[2] = yyt1; @@ -977,80 +1015,80 @@ yy131: opcode = absl::StrCat("off_", group(1)); goto end_region; } -#line 981 "src/sfizz/OpcodeCleanup.cpp" -yy133: - yych = *++YYCURSOR; - switch (yych) { - case 'e': goto yy105; - default: goto yy33; - } -yy134: - yych = *++YYCURSOR; - switch (yych) { - case 'c': goto yy162; - default: goto yy33; - } -yy135: - yych = *++YYCURSOR; - switch (yych) { - case 'o': goto yy163; - default: goto yy33; - } -yy136: - yych = *++YYCURSOR; - switch (yych) { - case 'n': goto yy164; - default: goto yy33; - } -yy137: - yych = *++YYCURSOR; - switch (yych) { - case 't': goto yy165; - default: goto yy33; - } -yy138: - yych = *++YYCURSOR; - switch (yych) { - case 'e': goto yy166; - default: goto yy33; - } +#line 1019 "src/sfizz/OpcodeCleanup.cpp" yy139: yych = *++YYCURSOR; switch (yych) { - case 'o': goto yy167; - default: goto yy33; + case 'e': goto yy110; + default: goto yy34; } yy140: yych = *++YYCURSOR; switch (yych) { - case 'e': goto yy168; - default: goto yy33; + case 'c': goto yy169; + default: goto yy34; } yy141: yych = *++YYCURSOR; switch (yych) { - case 't': goto yy169; - case 'u': goto yy170; - default: goto yy33; + case 'o': goto yy170; + default: goto yy34; } yy142: yych = *++YYCURSOR; switch (yych) { - case 'd': - yyt2 = YYCURSOR; - goto yy171; - case 'f': - yyt2 = YYCURSOR; - goto yy172; - default: goto yy33; + case 'n': goto yy171; + default: goto yy34; } yy143: yych = *++YYCURSOR; switch (yych) { - case 'n': goto yy117; - default: goto yy33; + case 't': goto yy172; + default: goto yy34; } yy144: + yych = *++YYCURSOR; + switch (yych) { + case 'e': goto yy173; + default: goto yy34; + } +yy145: + yych = *++YYCURSOR; + switch (yych) { + case 'o': goto yy174; + default: goto yy34; + } +yy146: + yych = *++YYCURSOR; + switch (yych) { + case 'e': goto yy175; + default: goto yy34; + } +yy147: + yych = *++YYCURSOR; + switch (yych) { + case 't': goto yy176; + case 'u': goto yy177; + default: goto yy34; + } +yy148: + yych = *++YYCURSOR; + switch (yych) { + case 'd': + yyt2 = YYCURSOR; + goto yy178; + case 'f': + yyt2 = YYCURSOR; + goto yy179; + default: goto yy34; + } +yy149: + yych = *++YYCURSOR; + switch (yych) { + case 'n': goto yy122; + default: goto yy34; + } +yy150: ++YYCURSOR; yynmatch = 2; yypmatch[2] = yyt1; @@ -1062,8 +1100,8 @@ yy144: opcode = absl::StrCat("bend_", group(1)); goto end_region; } -#line 1066 "src/sfizz/OpcodeCleanup.cpp" -yy146: +#line 1104 "src/sfizz/OpcodeCleanup.cpp" +yy152: ++YYCURSOR; yynmatch = 2; yypmatch[0] = yyt1; @@ -1072,86 +1110,92 @@ yy146: yypmatch[1] = YYCURSOR; #line 140 "src/sfizz/OpcodeCleanup.re" { - opcode = absl::StrCat("cutoff1", group(1)); - goto end_region; - } -#line 1079 "src/sfizz/OpcodeCleanup.cpp" -yy148: + opcode = absl::StrCat("cutoff1", group(1)); + goto end_region; + } +#line 1117 "src/sfizz/OpcodeCleanup.cpp" +yy154: yych = *++YYCURSOR; if (yych <= 0x00) { yyt2 = YYCURSOR; - goto yy146; - } - goto yy148; -yy150: - yych = *++YYCURSOR; - switch (yych) { - case 'c': goto yy173; - default: goto yy33; - } -yy151: - yych = *++YYCURSOR; - switch (yych) { - case 'q': goto yy119; - default: goto yy33; - } -yy152: - yych = *++YYCURSOR; - switch (yych) { - case 'n': goto yy119; - default: goto yy33; - } -yy153: - yych = *++YYCURSOR; - switch (yych) { - case 'e': goto yy174; - default: goto yy33; - } -yy154: - yych = *++YYCURSOR; - if (yych <= 0x00) goto yy175; - goto yy33; -yy155: - yych = *++YYCURSOR; - switch (yych) { - case 'f': goto yy177; - default: goto yy33; + goto yy152; } + goto yy154; yy156: yych = *++YYCURSOR; switch (yych) { - case 't': goto yy178; - default: goto yy33; + case 'c': goto yy180; + default: goto yy34; } yy157: yych = *++YYCURSOR; switch (yych) { - case 'a': goto yy179; - default: goto yy33; + case 'q': goto yy124; + default: goto yy34; } yy158: yych = *++YYCURSOR; switch (yych) { - case 'v': goto yy180; - default: goto yy33; + case 'n': goto yy124; + default: goto yy34; } yy159: yych = *++YYCURSOR; - if (yych <= 0x00) goto yy181; - goto yy33; + switch (yych) { + case 'e': goto yy181; + default: goto yy34; + } yy160: yych = *++YYCURSOR; - switch (yych) { - case 'e': goto yy159; - default: goto yy33; - } + if (yych <= 0x00) goto yy182; + goto yy34; yy161: yych = *++YYCURSOR; switch (yych) { - case 'r': goto yy183; - default: goto yy33; + case 'c': goto yy184; + default: goto yy34; } yy162: + yych = *++YYCURSOR; + switch (yych) { + case 'f': goto yy185; + default: goto yy34; + } +yy163: + yych = *++YYCURSOR; + switch (yych) { + case 't': goto yy186; + default: goto yy34; + } +yy164: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy187; + default: goto yy34; + } +yy165: + yych = *++YYCURSOR; + switch (yych) { + case 'v': goto yy188; + default: goto yy34; + } +yy166: + yych = *++YYCURSOR; + if (yych <= 0x00) goto yy189; + goto yy34; +yy167: + yych = *++YYCURSOR; + switch (yych) { + case 'e': goto yy166; + default: goto yy34; + } +yy168: + yych = *++YYCURSOR; + switch (yych) { + case 'r': goto yy191; + default: goto yy34; + } +yy169: yych = *++YYCURSOR; switch (yych) { case '0': @@ -1165,72 +1209,72 @@ yy162: case '8': case '9': yyt1 = YYCURSOR; - goto yy184; - default: goto yy33; - } -yy163: - yych = *++YYCURSOR; - switch (yych) { - case 'n': goto yy186; - default: goto yy33; - } -yy164: - yych = *++YYCURSOR; - switch (yych) { - case 'c': goto yy187; - default: goto yy33; - } -yy165: - yych = *++YYCURSOR; - switch (yych) { - case 't': goto yy188; - default: goto yy33; - } -yy166: - yych = *++YYCURSOR; - switch (yych) { - case 'c': - case 'l': goto yy189; - default: goto yy33; - } -yy167: - yych = *++YYCURSOR; - switch (yych) { - case 'l': goto yy190; - default: goto yy33; - } -yy168: - yych = *++YYCURSOR; - switch (yych) { - case 'l': goto yy191; - default: goto yy33; - } -yy169: - yych = *++YYCURSOR; - switch (yych) { - case 'a': goto yy192; - default: goto yy33; + goto yy192; + default: goto yy34; } yy170: yych = *++YYCURSOR; switch (yych) { - case 's': goto yy193; - default: goto yy33; + case 'n': goto yy194; + default: goto yy34; } yy171: yych = *++YYCURSOR; switch (yych) { - case 'e': goto yy194; - default: goto yy33; + case 'c': goto yy195; + default: goto yy34; } yy172: yych = *++YYCURSOR; switch (yych) { - case 'a': goto yy195; - case 'r': goto yy196; - default: goto yy33; + case 't': goto yy196; + default: goto yy34; } yy173: + yych = *++YYCURSOR; + switch (yych) { + case 'c': + case 'l': goto yy197; + default: goto yy34; + } +yy174: + yych = *++YYCURSOR; + switch (yych) { + case 'l': goto yy198; + default: goto yy34; + } +yy175: + yych = *++YYCURSOR; + switch (yych) { + case 'l': goto yy199; + default: goto yy34; + } +yy176: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy200; + default: goto yy34; + } +yy177: + yych = *++YYCURSOR; + switch (yych) { + case 's': goto yy201; + default: goto yy34; + } +yy178: + yych = *++YYCURSOR; + switch (yych) { + case 'e': goto yy202; + default: goto yy34; + } +yy179: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy203; + case 'r': goto yy204; + default: goto yy34; + } +yy180: yych = *++YYCURSOR; switch (yych) { case '0': @@ -1244,14 +1288,14 @@ yy173: case '8': case '9': yyt3 = YYCURSOR; - goto yy197; - default: goto yy33; + goto yy205; + default: goto yy34; } -yy174: +yy181: yych = *++YYCURSOR; - if (yych <= 0x00) goto yy199; - goto yy33; -yy175: + if (yych <= 0x00) goto yy207; + goto yy34; +yy182: ++YYCURSOR; yynmatch = 1; yypmatch[0] = YYCURSOR - 8; @@ -1261,32 +1305,49 @@ yy175: opcode = absl::StrCat("fil1_type"); goto end_region; } -#line 1265 "src/sfizz/OpcodeCleanup.cpp" -yy177: +#line 1309 "src/sfizz/OpcodeCleanup.cpp" +yy184: yych = *++YYCURSOR; switch (yych) { - case 's': goto yy201; - default: goto yy33; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + yyt1 = YYCURSOR; + goto yy209; + default: goto yy34; } -yy178: +yy185: yych = *++YYCURSOR; switch (yych) { - case 'i': goto yy202; - default: goto yy33; + case 's': goto yy211; + default: goto yy34; } -yy179: +yy186: yych = *++YYCURSOR; switch (yych) { - case 'l': goto yy180; - default: goto yy33; + case 'i': goto yy212; + default: goto yy34; } -yy180: +yy187: yych = *++YYCURSOR; switch (yych) { - case 'e': goto yy203; - default: goto yy33; + case 'l': goto yy188; + default: goto yy34; } -yy181: +yy188: + yych = *++YYCURSOR; + switch (yych) { + case 'e': goto yy213; + default: goto yy34; + } +yy189: ++YYCURSOR; yynmatch = 2; yypmatch[2] = yyt1; @@ -1298,99 +1359,17 @@ yy181: opcode = absl::StrCat("loop_", group(1)); goto end_region; } -#line 1302 "src/sfizz/OpcodeCleanup.cpp" -yy183: - yych = *++YYCURSOR; - switch (yych) { - case 't': goto yy159; - default: goto yy33; - } -yy184: - yych = *++YYCURSOR; - switch (yych) { - case 0x00: goto yy204; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy184; - default: goto yy33; - } -yy186: - yych = *++YYCURSOR; - switch (yych) { - case 'y': goto yy206; - default: goto yy33; - } -yy187: - yych = *++YYCURSOR; - switch (yych) { - case 'e': goto yy207; - default: goto yy33; - } -yy188: - yych = *++YYCURSOR; - switch (yych) { - case 'a': goto yy208; - default: goto yy33; - } -yy189: - yych = *++YYCURSOR; - switch (yych) { - case 'a': goto yy209; - default: goto yy33; - } -yy190: - yych = *++YYCURSOR; - switch (yych) { - case 'd': goto yy210; - default: goto yy33; - } +#line 1363 "src/sfizz/OpcodeCleanup.cpp" yy191: yych = *++YYCURSOR; switch (yych) { - case 'e': goto yy211; - default: goto yy33; + case 't': goto yy166; + default: goto yy34; } yy192: yych = *++YYCURSOR; switch (yych) { - case 'r': goto yy212; - default: goto yy33; - } -yy193: - yych = *++YYCURSOR; - switch (yych) { - case 't': goto yy213; - default: goto yy33; - } -yy194: - yych = *++YYCURSOR; - switch (yych) { - case 'p': goto yy214; - default: goto yy33; - } -yy195: - yych = *++YYCURSOR; - switch (yych) { - case 'd': goto yy215; - default: goto yy33; - } -yy196: - yych = *++YYCURSOR; - switch (yych) { - case 'e': goto yy216; - default: goto yy33; - } -yy197: - yych = *++YYCURSOR; - switch (yych) { - case 0x00: goto yy217; + case 0x00: goto yy214; case '0': case '1': case '2': @@ -1400,10 +1379,92 @@ yy197: case '6': case '7': case '8': - case '9': goto yy197; - default: goto yy33; + case '9': goto yy192; + default: goto yy34; + } +yy194: + yych = *++YYCURSOR; + switch (yych) { + case 'y': goto yy216; + default: goto yy34; + } +yy195: + yych = *++YYCURSOR; + switch (yych) { + case 'e': goto yy217; + default: goto yy34; + } +yy196: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy218; + default: goto yy34; + } +yy197: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy219; + default: goto yy34; + } +yy198: + yych = *++YYCURSOR; + switch (yych) { + case 'd': goto yy220; + default: goto yy34; } yy199: + yych = *++YYCURSOR; + switch (yych) { + case 'e': goto yy221; + default: goto yy34; + } +yy200: + yych = *++YYCURSOR; + switch (yych) { + case 'r': goto yy222; + default: goto yy34; + } +yy201: + yych = *++YYCURSOR; + switch (yych) { + case 't': goto yy223; + default: goto yy34; + } +yy202: + yych = *++YYCURSOR; + switch (yych) { + case 'p': goto yy224; + default: goto yy34; + } +yy203: + yych = *++YYCURSOR; + switch (yych) { + case 'd': goto yy225; + default: goto yy34; + } +yy204: + yych = *++YYCURSOR; + switch (yych) { + case 'e': goto yy226; + default: goto yy34; + } +yy205: + yych = *++YYCURSOR; + switch (yych) { + case 0x00: goto yy227; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy205; + default: goto yy34; + } +yy207: ++YYCURSOR; yynmatch = 2; yypmatch[2] = yyt1; @@ -1415,24 +1476,40 @@ yy199: opcode = absl::StrCat("fil", group(1), "_type"); goto end_region; } -#line 1419 "src/sfizz/OpcodeCleanup.cpp" -yy201: +#line 1480 "src/sfizz/OpcodeCleanup.cpp" +yy209: yych = *++YYCURSOR; switch (yych) { - case 'e': goto yy219; - default: goto yy33; + case 0x00: goto yy229; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy209; + default: goto yy34; } -yy202: +yy211: yych = *++YYCURSOR; switch (yych) { - case 'o': goto yy203; - default: goto yy33; + case 'e': goto yy231; + default: goto yy34; } -yy203: +yy212: yych = *++YYCURSOR; - if (yych <= 0x00) goto yy220; - goto yy33; -yy204: + switch (yych) { + case 'o': goto yy213; + default: goto yy34; + } +yy213: + yych = *++YYCURSOR; + if (yych <= 0x00) goto yy232; + goto yy34; +yy214: ++YYCURSOR; yynmatch = 3; yypmatch[4] = yyt1; @@ -1446,79 +1523,79 @@ yy204: opcode = absl::StrCat("start_", group(1), "cc", group(2)); goto end_region; } -#line 1450 "src/sfizz/OpcodeCleanup.cpp" -yy206: +#line 1527 "src/sfizz/OpcodeCleanup.cpp" +yy216: yych = *++YYCURSOR; switch (yych) { - case '_': goto yy222; - default: goto yy33; + case '_': goto yy234; + default: goto yy34; } -yy207: +yy217: yych = *++YYCURSOR; switch (yych) { case 0x00: yyt2 = yyt3 = NULL; - goto yy223; + goto yy235; case '_': yyt3 = YYCURSOR; - goto yy225; - default: goto yy33; + goto yy237; + default: goto yy34; } -yy208: +yy218: yych = *++YYCURSOR; switch (yych) { - case 'c': goto yy227; - default: goto yy33; + case 'c': goto yy239; + default: goto yy34; } -yy209: +yy219: yych = *++YYCURSOR; switch (yych) { - case 'y': goto yy210; - default: goto yy33; + case 'y': goto yy220; + default: goto yy34; } -yy210: +yy220: yych = *++YYCURSOR; switch (yych) { - case 'c': goto yy228; - default: goto yy33; + case 'c': goto yy240; + default: goto yy34; } -yy211: +yy221: yych = *++YYCURSOR; switch (yych) { - case 'a': goto yy229; - default: goto yy33; + case 'a': goto yy241; + default: goto yy34; } -yy212: +yy222: yych = *++YYCURSOR; switch (yych) { - case 't': goto yy210; - default: goto yy33; + case 't': goto yy220; + default: goto yy34; } -yy213: +yy223: yych = *++YYCURSOR; switch (yych) { - case 'a': goto yy230; - default: goto yy33; + case 'a': goto yy242; + default: goto yy34; } -yy214: +yy224: yych = *++YYCURSOR; switch (yych) { - case 't': goto yy231; - default: goto yy33; + case 't': goto yy243; + default: goto yy34; } -yy215: +yy225: yych = *++YYCURSOR; switch (yych) { - case 'e': goto yy232; - default: goto yy33; + case 'e': goto yy244; + default: goto yy34; } -yy216: +yy226: yych = *++YYCURSOR; switch (yych) { - case 'q': goto yy232; - default: goto yy33; + case 'q': goto yy244; + default: goto yy34; } -yy217: +yy227: ++YYCURSOR; yynmatch = 4; yypmatch[2] = yyt1; @@ -1534,14 +1611,29 @@ yy217: opcode = absl::StrCat(group(1), "_", group(2), "_oncc", group(3)); goto end_region; } -#line 1538 "src/sfizz/OpcodeCleanup.cpp" -yy219: +#line 1615 "src/sfizz/OpcodeCleanup.cpp" +yy229: + ++YYCURSOR; + yynmatch = 3; + yypmatch[4] = yyt1; + yypmatch[0] = yyt1 - 8; + yypmatch[1] = YYCURSOR; + yypmatch[2] = yyt1 - 8; + yypmatch[3] = yyt1 - 6; + yypmatch[5] = YYCURSOR - 1; +#line 149 "src/sfizz/OpcodeCleanup.re" + { + opcode = absl::StrCat(group(1), "hdcc", group(2)); + goto end_region; + } +#line 1630 "src/sfizz/OpcodeCleanup.cpp" +yy231: yych = *++YYCURSOR; switch (yych) { - case 't': goto yy203; - default: goto yy33; + case 't': goto yy213; + default: goto yy34; } -yy220: +yy232: ++YYCURSOR; yynmatch = 3; yypmatch[2] = yyt1; @@ -1555,14 +1647,14 @@ yy220: opcode = absl::StrCat(group(1), "_", group(2), "1"); goto end_region; } -#line 1559 "src/sfizz/OpcodeCleanup.cpp" -yy222: +#line 1651 "src/sfizz/OpcodeCleanup.cpp" +yy234: yych = *++YYCURSOR; switch (yych) { - case 'g': goto yy233; - default: goto yy33; + case 'g': goto yy245; + default: goto yy34; } -yy223: +yy235: ++YYCURSOR; yynmatch = 2; yypmatch[0] = yyt1; @@ -1571,117 +1663,60 @@ yy223: yypmatch[1] = YYCURSOR; #line 144 "src/sfizz/OpcodeCleanup.re" { - opcode = absl::StrCat("resonance1", group(1)); - goto end_region; - } -#line 1578 "src/sfizz/OpcodeCleanup.cpp" -yy225: + opcode = absl::StrCat("resonance1", group(1)); + goto end_region; + } +#line 1670 "src/sfizz/OpcodeCleanup.cpp" +yy237: yych = *++YYCURSOR; if (yych <= 0x00) { yyt2 = YYCURSOR; - goto yy223; - } - goto yy225; -yy227: - yych = *++YYCURSOR; - switch (yych) { - case 'k': goto yy210; - default: goto yy33; - } -yy228: - yych = *++YYCURSOR; - switch (yych) { - case 'c': goto yy234; - default: goto yy33; - } -yy229: - yych = *++YYCURSOR; - switch (yych) { - case 's': goto yy235; - default: goto yy33; - } -yy230: - yych = *++YYCURSOR; - switch (yych) { - case 'i': goto yy236; - default: goto yy33; - } -yy231: - yych = *++YYCURSOR; - switch (yych) { - case 'h': goto yy232; - default: goto yy33; - } -yy232: - yych = *++YYCURSOR; - switch (yych) { - case 'c': goto yy237; - default: goto yy33; - } -yy233: - yych = *++YYCURSOR; - switch (yych) { - case 'r': goto yy238; - default: goto yy33; - } -yy234: - yych = *++YYCURSOR; - switch (yych) { - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - yyt3 = YYCURSOR; - goto yy239; - default: goto yy33; - } -yy235: - yych = *++YYCURSOR; - switch (yych) { - case 'e': goto yy210; - default: goto yy33; - } -yy236: - yych = *++YYCURSOR; - switch (yych) { - case 'n': goto yy210; - default: goto yy33; - } -yy237: - yych = *++YYCURSOR; - switch (yych) { - case 'c': goto yy241; - default: goto yy33; - } -yy238: - yych = *++YYCURSOR; - switch (yych) { - case 'o': goto yy242; - default: goto yy33; + goto yy235; } + goto yy237; yy239: yych = *++YYCURSOR; switch (yych) { - case 0x00: goto yy243; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy239; - default: goto yy33; + case 'k': goto yy220; + default: goto yy34; + } +yy240: + yych = *++YYCURSOR; + switch (yych) { + case 'c': goto yy246; + default: goto yy34; } yy241: + yych = *++YYCURSOR; + switch (yych) { + case 's': goto yy247; + default: goto yy34; + } +yy242: + yych = *++YYCURSOR; + switch (yych) { + case 'i': goto yy248; + default: goto yy34; + } +yy243: + yych = *++YYCURSOR; + switch (yych) { + case 'h': goto yy244; + default: goto yy34; + } +yy244: + yych = *++YYCURSOR; + switch (yych) { + case 'c': goto yy249; + default: goto yy34; + } +yy245: + yych = *++YYCURSOR; + switch (yych) { + case 'r': goto yy250; + default: goto yy34; + } +yy246: yych = *++YYCURSOR; switch (yych) { case '0': @@ -1695,16 +1730,73 @@ yy241: case '8': case '9': yyt3 = YYCURSOR; - goto yy245; - default: goto yy33; + goto yy251; + default: goto yy34; } -yy242: +yy247: yych = *++YYCURSOR; switch (yych) { - case 'u': goto yy247; - default: goto yy33; + case 'e': goto yy220; + default: goto yy34; } -yy243: +yy248: + yych = *++YYCURSOR; + switch (yych) { + case 'n': goto yy220; + default: goto yy34; + } +yy249: + yych = *++YYCURSOR; + switch (yych) { + case 'c': goto yy253; + default: goto yy34; + } +yy250: + yych = *++YYCURSOR; + switch (yych) { + case 'o': goto yy254; + default: goto yy34; + } +yy251: + yych = *++YYCURSOR; + switch (yych) { + case 0x00: goto yy255; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy251; + default: goto yy34; + } +yy253: + yych = *++YYCURSOR; + switch (yych) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + yyt3 = YYCURSOR; + goto yy257; + default: goto yy34; + } +yy254: + yych = *++YYCURSOR; + switch (yych) { + case 'u': goto yy259; + default: goto yy34; + } +yy255: ++YYCURSOR; yynmatch = 4; yypmatch[2] = yyt1; @@ -1720,11 +1812,11 @@ yy243: opcode = absl::StrCat(group(1), "_", group(2), "_oncc", group(3)); goto end_region; } -#line 1724 "src/sfizz/OpcodeCleanup.cpp" -yy245: +#line 1816 "src/sfizz/OpcodeCleanup.cpp" +yy257: yych = *++YYCURSOR; switch (yych) { - case 0x00: goto yy248; + case 0x00: goto yy260; case '0': case '1': case '2': @@ -1734,16 +1826,16 @@ yy245: case '6': case '7': case '8': - case '9': goto yy245; - default: goto yy33; + case '9': goto yy257; + default: goto yy34; } -yy247: +yy259: yych = *++YYCURSOR; switch (yych) { - case 'p': goto yy250; - default: goto yy33; + case 'p': goto yy262; + default: goto yy34; } -yy248: +yy260: ++YYCURSOR; yynmatch = 4; yypmatch[2] = yyt1; @@ -1759,10 +1851,10 @@ yy248: opcode = absl::StrCat(group(1), "_", group(2), "_oncc", group(3)); goto end_region; } -#line 1763 "src/sfizz/OpcodeCleanup.cpp" -yy250: +#line 1855 "src/sfizz/OpcodeCleanup.cpp" +yy262: yych = *++YYCURSOR; - if (yych >= 0x01) goto yy33; + if (yych >= 0x01) goto yy34; ++YYCURSOR; yynmatch = 1; yypmatch[0] = YYCURSOR - 16; @@ -1771,10 +1863,10 @@ yy250: { opcode = "group"; goto end_region; - } -#line 1776 "src/sfizz/OpcodeCleanup.cpp" + } +#line 1868 "src/sfizz/OpcodeCleanup.cpp" } -#line 153 "src/sfizz/OpcodeCleanup.re" +#line 158 "src/sfizz/OpcodeCleanup.re" end_region: From 16bfe8fa98ff3874298db34c6e70baedb0ab5ffe Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Fri, 15 May 2020 07:50:12 +0200 Subject: [PATCH 05/14] Add some comments regarding aliases --- src/sfizz/Region.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sfizz/Region.cpp b/src/sfizz/Region.cpp index 9f665296..5c14c38b 100644 --- a/src/sfizz/Region.cpp +++ b/src/sfizz/Region.cpp @@ -206,13 +206,13 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode) if (auto value = readOpcode(opcode.value, Default::midi7Range)) ccConditions[opcode.parameters.back()].setEnd(normalizeCC(*value)); break; - case hash("lohdcc&"): + case hash("lohdcc&"): // also lorealcc& 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&"): + case hash("hihdcc&"): // also hirealcc& if (opcode.parameters.back() >= config::numCCs) return false; if (auto value = readOpcode(opcode.value, Default::normalizedRange)) From ed4177b57b5887e0dcd51e13528fe3183e3bc242 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Fri, 15 May 2020 08:09:57 +0200 Subject: [PATCH 06/14] Add support of start_lohdccN and start_hihdccN --- src/sfizz/OpcodeCleanup.re | 4 ++++ src/sfizz/Region.cpp | 12 ++++++++++++ tests/OpcodeT.cpp | 4 ++++ tests/RegionT.cpp | 15 +++++++++++++++ 4 files changed, 35 insertions(+) diff --git a/src/sfizz/OpcodeCleanup.re b/src/sfizz/OpcodeCleanup.re index 8f48ab6c..795fe053 100644 --- a/src/sfizz/OpcodeCleanup.re +++ b/src/sfizz/OpcodeCleanup.re @@ -132,6 +132,10 @@ end_generic: opcode = absl::StrCat("start_", group(1), "cc", group(2)); goto end_region; } + "on_" ("hi"|"lo") "hdcc" (number) END { + opcode = absl::StrCat("start_", group(1), "hdcc", group(2)); + goto end_region; + } "fil_" (any) END { opcode = absl::StrCat("fil1_", group(1)); diff --git a/src/sfizz/Region.cpp b/src/sfizz/Region.cpp index 5c14c38b..b6613c69 100644 --- a/src/sfizz/Region.cpp +++ b/src/sfizz/Region.cpp @@ -321,6 +321,18 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode) if (auto value = readOpcode(opcode.value, Default::midi7Range)) ccTriggers[opcode.parameters.back()].setEnd(normalizeCC(*value)); break; + case hash("start_lohdcc&"): // also on_lohdcc& + if (opcode.parameters.back() >= config::numCCs) + return false; + if (auto value = readOpcode(opcode.value, Default::normalizedRange)) + ccTriggers[opcode.parameters.back()].setStart(*value); + break; + case hash("start_hihdcc&"): // also on_hihdcc& + if (opcode.parameters.back() >= config::numCCs) + return false; + if (auto value = readOpcode(opcode.value, Default::normalizedRange)) + ccTriggers[opcode.parameters.back()].setEnd(*value); + break; // Performance parameters: amplifier case hash("volume"): // also gain diff --git a/tests/OpcodeT.cpp b/tests/OpcodeT.cpp index 733a185c..ed3fb40e 100644 --- a/tests/OpcodeT.cpp +++ b/tests/OpcodeT.cpp @@ -202,6 +202,10 @@ TEST_CASE("[Opcode] Normalization") {"gain_foobar", "volume_foobar"}, {"tune", "pitch"}, {"tune_foobar", "pitch_foobar"}, + {"lorealcc24", "lohdcc24"}, + {"hirealcc25", "hihdcc25"}, + {"on_lohdcc26", "start_lohdcc26"}, + {"on_hihdcc27", "start_hihdcc27"}, // SFZv2 aliases {"on_hicc22", "start_hicc22"}, {"on_locc23", "start_locc23"}, diff --git a/tests/RegionT.cpp b/tests/RegionT.cpp index 19d2ab71..4884274b 100644 --- a/tests/RegionT.cpp +++ b/tests/RegionT.cpp @@ -496,6 +496,21 @@ TEST_CASE("[Region] Parsing opcodes") REQUIRE(region.ccTriggers[4] == sfz::Range(0_norm, 47_norm)); } + SECTION("on_lohdcc, on_hihdcc") + { + for (int ccIdx = 1; ccIdx < 128; ++ccIdx) { + REQUIRE(!region.ccTriggers.contains(ccIdx)); + } + region.parseOpcode({ "on_lohdcc46", "0.15" }); + REQUIRE(region.ccTriggers.contains(46)); + REQUIRE(region.ccTriggers[46].getStart() == Approx(0.15f)); + REQUIRE(region.ccTriggers[46].getEnd() == 1.0f); + region.parseOpcode({ "on_hihdcc5", "0.47" }); + REQUIRE(region.ccTriggers.contains(5)); + REQUIRE(region.ccTriggers[5].getStart() == 0.0f); + REQUIRE(region.ccTriggers[5].getEnd() == Approx(0.47f)); + } + SECTION("volume") { REQUIRE(region.volume == 0.0f); From 81368745522257971a228e2d5ac0eff4cbc483c2 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Fri, 15 May 2020 08:10:23 +0200 Subject: [PATCH 07/14] Update opcode cleanups --- src/sfizz/OpcodeCleanup.cpp | 775 ++++++++++++++++++++---------------- 1 file changed, 421 insertions(+), 354 deletions(-) diff --git a/src/sfizz/OpcodeCleanup.cpp b/src/sfizz/OpcodeCleanup.cpp index 8e33865f..83b8aeb8 100644 --- a/src/sfizz/OpcodeCleanup.cpp +++ b/src/sfizz/OpcodeCleanup.cpp @@ -1,4 +1,4 @@ -/* Generated by re2c 1.3 on Fri May 15 00:29:29 2020 */ +/* Generated by re2c 1.3 on Fri May 15 08:07:56 2020 */ #line 1 "src/sfizz/OpcodeCleanup.re" /* -*- mode: c++; -*- */ // SPDX-License-Identifier: BSD-2-Clause @@ -208,7 +208,7 @@ end_generic: yy19: ++YYCURSOR; yy20: -#line 154 "src/sfizz/OpcodeCleanup.re" +#line 158 "src/sfizz/OpcodeCleanup.re" { goto end_region; } @@ -752,7 +752,7 @@ yy96: yypmatch[0] = yyt1 - 4; yypmatch[1] = YYCURSOR; yypmatch[3] = YYCURSOR - 1; -#line 136 "src/sfizz/OpcodeCleanup.re" +#line 140 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat("fil1_", group(1)); goto end_region; @@ -844,18 +844,19 @@ yy112: yych = *++YYCURSOR; switch (yych) { case 'c': goto yy140; + case 'h': goto yy141; default: goto yy34; } yy113: yych = *++YYCURSOR; switch (yych) { - case 'h': goto yy141; + case 'h': goto yy142; default: goto yy34; } yy114: yych = *++YYCURSOR; switch (yych) { - case 'a': goto yy142; + case 'a': goto yy143; default: goto yy34; } yy115: @@ -870,7 +871,7 @@ yy115: opcode = absl::StrCat("pitch", group(1)); goto end_region; } -#line 874 "src/sfizz/OpcodeCleanup.cpp" +#line 875 "src/sfizz/OpcodeCleanup.cpp" yy117: yych = *++YYCURSOR; if (yych <= 0x00) { @@ -883,124 +884,124 @@ yy119: switch (yych) { case 'a': yyt2 = YYCURSOR; - goto yy143; + goto yy144; case 'd': yyt2 = YYCURSOR; - goto yy144; + goto yy145; case 'h': yyt2 = YYCURSOR; - goto yy145; + goto yy146; case 'r': yyt2 = YYCURSOR; - goto yy146; + goto yy147; case 's': yyt2 = YYCURSOR; - goto yy147; + goto yy148; default: goto yy34; } yy120: yych = *++YYCURSOR; switch (yych) { - case '_': goto yy148; + case '_': goto yy149; default: goto yy34; } yy121: yych = *++YYCURSOR; switch (yych) { - case 'w': goto yy149; + case 'w': goto yy150; default: goto yy34; } yy122: yych = *++YYCURSOR; - if (yych <= 0x00) goto yy150; + if (yych <= 0x00) goto yy151; goto yy34; yy123: yych = *++YYCURSOR; switch (yych) { case 0x00: yyt2 = yyt3 = NULL; - goto yy152; + goto yy153; case '_': yyt3 = YYCURSOR; - goto yy154; + goto yy155; default: goto yy34; } yy124: yych = *++YYCURSOR; switch (yych) { - case 'c': goto yy156; + case 'c': goto yy157; default: goto yy34; } yy125: yych = *++YYCURSOR; switch (yych) { - case 'e': goto yy157; + case 'e': goto yy158; default: goto yy34; } yy126: yych = *++YYCURSOR; switch (yych) { - case 'i': goto yy158; + case 'i': goto yy159; default: goto yy34; } yy127: yych = *++YYCURSOR; switch (yych) { - case 'p': goto yy159; + case 'p': goto yy160; default: goto yy34; } yy128: yych = *++YYCURSOR; switch (yych) { - case 'e': goto yy160; + case 'e': goto yy161; default: goto yy34; } yy129: yych = *++YYCURSOR; switch (yych) { - case 'c': goto yy161; + case 'c': goto yy162; default: goto yy34; } yy130: yych = *++YYCURSOR; switch (yych) { - case 'f': goto yy162; + case 'f': goto yy163; default: goto yy34; } yy131: yych = *++YYCURSOR; switch (yych) { - case 'a': goto yy163; + case 'a': goto yy164; default: goto yy34; } yy132: yych = *++YYCURSOR; switch (yych) { - case 'c': goto yy164; + case 'c': goto yy165; default: goto yy34; } yy133: yych = *++YYCURSOR; switch (yych) { - case 'a': goto yy165; + case 'a': goto yy166; default: goto yy34; } yy134: yych = *++YYCURSOR; switch (yych) { - case 'd': goto yy166; + case 'd': goto yy167; default: goto yy34; } yy135: yych = *++YYCURSOR; switch (yych) { - case 'd': goto yy167; + case 'd': goto yy168; default: goto yy34; } yy136: yych = *++YYCURSOR; switch (yych) { - case 'a': goto yy168; + case 'a': goto yy169; default: goto yy34; } yy137: @@ -1015,7 +1016,7 @@ yy137: opcode = absl::StrCat("off_", group(1)); goto end_region; } -#line 1019 "src/sfizz/OpcodeCleanup.cpp" +#line 1020 "src/sfizz/OpcodeCleanup.cpp" yy139: yych = *++YYCURSOR; switch (yych) { @@ -1025,70 +1026,76 @@ yy139: yy140: yych = *++YYCURSOR; switch (yych) { - case 'c': goto yy169; + case 'c': goto yy170; default: goto yy34; } yy141: yych = *++YYCURSOR; switch (yych) { - case 'o': goto yy170; + case 'd': goto yy171; default: goto yy34; } yy142: yych = *++YYCURSOR; switch (yych) { - case 'n': goto yy171; + case 'o': goto yy172; default: goto yy34; } yy143: yych = *++YYCURSOR; switch (yych) { - case 't': goto yy172; + case 'n': goto yy173; default: goto yy34; } yy144: yych = *++YYCURSOR; switch (yych) { - case 'e': goto yy173; + case 't': goto yy174; default: goto yy34; } yy145: yych = *++YYCURSOR; switch (yych) { - case 'o': goto yy174; + case 'e': goto yy175; default: goto yy34; } yy146: yych = *++YYCURSOR; switch (yych) { - case 'e': goto yy175; + case 'o': goto yy176; default: goto yy34; } yy147: yych = *++YYCURSOR; switch (yych) { - case 't': goto yy176; - case 'u': goto yy177; + case 'e': goto yy177; default: goto yy34; } yy148: yych = *++YYCURSOR; switch (yych) { - case 'd': - yyt2 = YYCURSOR; - goto yy178; - case 'f': - yyt2 = YYCURSOR; - goto yy179; + case 't': goto yy178; + case 'u': goto yy179; default: goto yy34; } yy149: yych = *++YYCURSOR; switch (yych) { - case 'n': goto yy122; + case 'd': + yyt2 = YYCURSOR; + goto yy180; + case 'f': + yyt2 = YYCURSOR; + goto yy181; default: goto yy34; } yy150: + yych = *++YYCURSOR; + switch (yych) { + case 'n': goto yy122; + default: goto yy34; + } +yy151: ++YYCURSOR; yynmatch = 2; yypmatch[2] = yyt1; @@ -1100,102 +1107,102 @@ yy150: opcode = absl::StrCat("bend_", group(1)); goto end_region; } -#line 1104 "src/sfizz/OpcodeCleanup.cpp" -yy152: +#line 1111 "src/sfizz/OpcodeCleanup.cpp" +yy153: ++YYCURSOR; yynmatch = 2; yypmatch[0] = yyt1; yypmatch[2] = yyt3; yypmatch[3] = yyt2; yypmatch[1] = YYCURSOR; -#line 140 "src/sfizz/OpcodeCleanup.re" +#line 144 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat("cutoff1", group(1)); goto end_region; } -#line 1117 "src/sfizz/OpcodeCleanup.cpp" -yy154: +#line 1124 "src/sfizz/OpcodeCleanup.cpp" +yy155: yych = *++YYCURSOR; if (yych <= 0x00) { yyt2 = YYCURSOR; - goto yy152; - } - goto yy154; -yy156: - yych = *++YYCURSOR; - switch (yych) { - case 'c': goto yy180; - default: goto yy34; + goto yy153; } + goto yy155; yy157: yych = *++YYCURSOR; switch (yych) { - case 'q': goto yy124; + case 'c': goto yy182; default: goto yy34; } yy158: yych = *++YYCURSOR; switch (yych) { - case 'n': goto yy124; + case 'q': goto yy124; default: goto yy34; } yy159: yych = *++YYCURSOR; switch (yych) { - case 'e': goto yy181; + case 'n': goto yy124; default: goto yy34; } yy160: - yych = *++YYCURSOR; - if (yych <= 0x00) goto yy182; - goto yy34; -yy161: yych = *++YYCURSOR; switch (yych) { - case 'c': goto yy184; + case 'e': goto yy183; default: goto yy34; } +yy161: + yych = *++YYCURSOR; + if (yych <= 0x00) goto yy184; + goto yy34; yy162: yych = *++YYCURSOR; switch (yych) { - case 'f': goto yy185; + case 'c': goto yy186; default: goto yy34; } yy163: yych = *++YYCURSOR; switch (yych) { - case 't': goto yy186; + case 'f': goto yy187; default: goto yy34; } yy164: yych = *++YYCURSOR; switch (yych) { - case 'a': goto yy187; + case 't': goto yy188; default: goto yy34; } yy165: yych = *++YYCURSOR; switch (yych) { - case 'v': goto yy188; + case 'a': goto yy189; default: goto yy34; } yy166: - yych = *++YYCURSOR; - if (yych <= 0x00) goto yy189; - goto yy34; -yy167: yych = *++YYCURSOR; switch (yych) { - case 'e': goto yy166; + case 'v': goto yy190; default: goto yy34; } +yy167: + yych = *++YYCURSOR; + if (yych <= 0x00) goto yy191; + goto yy34; yy168: yych = *++YYCURSOR; switch (yych) { - case 'r': goto yy191; + case 'e': goto yy167; default: goto yy34; } yy169: + yych = *++YYCURSOR; + switch (yych) { + case 'r': goto yy193; + default: goto yy34; + } +yy170: yych = *++YYCURSOR; switch (yych) { case '0': @@ -1209,72 +1216,78 @@ yy169: case '8': case '9': yyt1 = YYCURSOR; - goto yy192; - default: goto yy34; - } -yy170: - yych = *++YYCURSOR; - switch (yych) { - case 'n': goto yy194; + goto yy194; default: goto yy34; } yy171: yych = *++YYCURSOR; switch (yych) { - case 'c': goto yy195; + case 'c': goto yy196; default: goto yy34; } yy172: yych = *++YYCURSOR; switch (yych) { - case 't': goto yy196; + case 'n': goto yy197; default: goto yy34; } yy173: yych = *++YYCURSOR; switch (yych) { - case 'c': - case 'l': goto yy197; + case 'c': goto yy198; default: goto yy34; } yy174: yych = *++YYCURSOR; switch (yych) { - case 'l': goto yy198; + case 't': goto yy199; default: goto yy34; } yy175: yych = *++YYCURSOR; switch (yych) { - case 'l': goto yy199; + case 'c': + case 'l': goto yy200; default: goto yy34; } yy176: yych = *++YYCURSOR; switch (yych) { - case 'a': goto yy200; + case 'l': goto yy201; default: goto yy34; } yy177: yych = *++YYCURSOR; switch (yych) { - case 's': goto yy201; + case 'l': goto yy202; default: goto yy34; } yy178: yych = *++YYCURSOR; switch (yych) { - case 'e': goto yy202; + case 'a': goto yy203; default: goto yy34; } yy179: yych = *++YYCURSOR; switch (yych) { - case 'a': goto yy203; - case 'r': goto yy204; + case 's': goto yy204; default: goto yy34; } yy180: + yych = *++YYCURSOR; + switch (yych) { + case 'e': goto yy205; + default: goto yy34; + } +yy181: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy206; + case 'r': goto yy207; + default: goto yy34; + } +yy182: yych = *++YYCURSOR; switch (yych) { case '0': @@ -1288,14 +1301,14 @@ yy180: case '8': case '9': yyt3 = YYCURSOR; - goto yy205; + goto yy208; default: goto yy34; } -yy181: +yy183: yych = *++YYCURSOR; - if (yych <= 0x00) goto yy207; + if (yych <= 0x00) goto yy210; goto yy34; -yy182: +yy184: ++YYCURSOR; yynmatch = 1; yypmatch[0] = YYCURSOR - 8; @@ -1305,8 +1318,8 @@ yy182: opcode = absl::StrCat("fil1_type"); goto end_region; } -#line 1309 "src/sfizz/OpcodeCleanup.cpp" -yy184: +#line 1322 "src/sfizz/OpcodeCleanup.cpp" +yy186: yych = *++YYCURSOR; switch (yych) { case '0': @@ -1320,34 +1333,34 @@ yy184: case '8': case '9': yyt1 = YYCURSOR; - goto yy209; - default: goto yy34; - } -yy185: - yych = *++YYCURSOR; - switch (yych) { - case 's': goto yy211; - default: goto yy34; - } -yy186: - yych = *++YYCURSOR; - switch (yych) { - case 'i': goto yy212; + goto yy212; default: goto yy34; } yy187: yych = *++YYCURSOR; switch (yych) { - case 'l': goto yy188; + case 's': goto yy214; default: goto yy34; } yy188: yych = *++YYCURSOR; switch (yych) { - case 'e': goto yy213; + case 'i': goto yy215; default: goto yy34; } yy189: + yych = *++YYCURSOR; + switch (yych) { + case 'l': goto yy190; + default: goto yy34; + } +yy190: + yych = *++YYCURSOR; + switch (yych) { + case 'e': goto yy216; + default: goto yy34; + } +yy191: ++YYCURSOR; yynmatch = 2; yypmatch[2] = yyt1; @@ -1359,99 +1372,17 @@ yy189: opcode = absl::StrCat("loop_", group(1)); goto end_region; } -#line 1363 "src/sfizz/OpcodeCleanup.cpp" -yy191: +#line 1376 "src/sfizz/OpcodeCleanup.cpp" +yy193: yych = *++YYCURSOR; switch (yych) { - case 't': goto yy166; - default: goto yy34; - } -yy192: - yych = *++YYCURSOR; - switch (yych) { - case 0x00: goto yy214; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy192; + case 't': goto yy167; default: goto yy34; } yy194: yych = *++YYCURSOR; switch (yych) { - case 'y': goto yy216; - default: goto yy34; - } -yy195: - yych = *++YYCURSOR; - switch (yych) { - case 'e': goto yy217; - default: goto yy34; - } -yy196: - yych = *++YYCURSOR; - switch (yych) { - case 'a': goto yy218; - default: goto yy34; - } -yy197: - yych = *++YYCURSOR; - switch (yych) { - case 'a': goto yy219; - default: goto yy34; - } -yy198: - yych = *++YYCURSOR; - switch (yych) { - case 'd': goto yy220; - default: goto yy34; - } -yy199: - yych = *++YYCURSOR; - switch (yych) { - case 'e': goto yy221; - default: goto yy34; - } -yy200: - yych = *++YYCURSOR; - switch (yych) { - case 'r': goto yy222; - default: goto yy34; - } -yy201: - yych = *++YYCURSOR; - switch (yych) { - case 't': goto yy223; - default: goto yy34; - } -yy202: - yych = *++YYCURSOR; - switch (yych) { - case 'p': goto yy224; - default: goto yy34; - } -yy203: - yych = *++YYCURSOR; - switch (yych) { - case 'd': goto yy225; - default: goto yy34; - } -yy204: - yych = *++YYCURSOR; - switch (yych) { - case 'e': goto yy226; - default: goto yy34; - } -yy205: - yych = *++YYCURSOR; - switch (yych) { - case 0x00: goto yy227; + case 0x00: goto yy217; case '0': case '1': case '2': @@ -1461,10 +1392,98 @@ yy205: case '6': case '7': case '8': - case '9': goto yy205; + case '9': goto yy194; + default: goto yy34; + } +yy196: + yych = *++YYCURSOR; + switch (yych) { + case 'c': goto yy219; + default: goto yy34; + } +yy197: + yych = *++YYCURSOR; + switch (yych) { + case 'y': goto yy220; + default: goto yy34; + } +yy198: + yych = *++YYCURSOR; + switch (yych) { + case 'e': goto yy221; + default: goto yy34; + } +yy199: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy222; + default: goto yy34; + } +yy200: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy223; + default: goto yy34; + } +yy201: + yych = *++YYCURSOR; + switch (yych) { + case 'd': goto yy224; + default: goto yy34; + } +yy202: + yych = *++YYCURSOR; + switch (yych) { + case 'e': goto yy225; + default: goto yy34; + } +yy203: + yych = *++YYCURSOR; + switch (yych) { + case 'r': goto yy226; + default: goto yy34; + } +yy204: + yych = *++YYCURSOR; + switch (yych) { + case 't': goto yy227; + default: goto yy34; + } +yy205: + yych = *++YYCURSOR; + switch (yych) { + case 'p': goto yy228; + default: goto yy34; + } +yy206: + yych = *++YYCURSOR; + switch (yych) { + case 'd': goto yy229; default: goto yy34; } yy207: + yych = *++YYCURSOR; + switch (yych) { + case 'e': goto yy230; + default: goto yy34; + } +yy208: + yych = *++YYCURSOR; + switch (yych) { + case 0x00: goto yy231; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy208; + default: goto yy34; + } +yy210: ++YYCURSOR; yynmatch = 2; yypmatch[2] = yyt1; @@ -1476,11 +1495,11 @@ yy207: opcode = absl::StrCat("fil", group(1), "_type"); goto end_region; } -#line 1480 "src/sfizz/OpcodeCleanup.cpp" -yy209: +#line 1499 "src/sfizz/OpcodeCleanup.cpp" +yy212: yych = *++YYCURSOR; switch (yych) { - case 0x00: goto yy229; + case 0x00: goto yy233; case '0': case '1': case '2': @@ -1490,26 +1509,26 @@ yy209: case '6': case '7': case '8': - case '9': goto yy209; + case '9': goto yy212; default: goto yy34; } -yy211: - yych = *++YYCURSOR; - switch (yych) { - case 'e': goto yy231; - default: goto yy34; - } -yy212: - yych = *++YYCURSOR; - switch (yych) { - case 'o': goto yy213; - default: goto yy34; - } -yy213: - yych = *++YYCURSOR; - if (yych <= 0x00) goto yy232; - goto yy34; yy214: + yych = *++YYCURSOR; + switch (yych) { + case 'e': goto yy235; + default: goto yy34; + } +yy215: + yych = *++YYCURSOR; + switch (yych) { + case 'o': goto yy216; + default: goto yy34; + } +yy216: + yych = *++YYCURSOR; + if (yych <= 0x00) goto yy236; + goto yy34; +yy217: ++YYCURSOR; yynmatch = 3; yypmatch[4] = yyt1; @@ -1523,79 +1542,96 @@ yy214: opcode = absl::StrCat("start_", group(1), "cc", group(2)); goto end_region; } -#line 1527 "src/sfizz/OpcodeCleanup.cpp" -yy216: - yych = *++YYCURSOR; - switch (yych) { - case '_': goto yy234; - default: goto yy34; - } -yy217: - yych = *++YYCURSOR; - switch (yych) { - case 0x00: - yyt2 = yyt3 = NULL; - goto yy235; - case '_': - yyt3 = YYCURSOR; - goto yy237; - default: goto yy34; - } -yy218: - yych = *++YYCURSOR; - switch (yych) { - case 'c': goto yy239; - default: goto yy34; - } +#line 1546 "src/sfizz/OpcodeCleanup.cpp" yy219: yych = *++YYCURSOR; switch (yych) { - case 'y': goto yy220; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + yyt1 = YYCURSOR; + goto yy238; default: goto yy34; } yy220: yych = *++YYCURSOR; switch (yych) { - case 'c': goto yy240; + case '_': goto yy240; default: goto yy34; } yy221: yych = *++YYCURSOR; switch (yych) { - case 'a': goto yy241; + case 0x00: + yyt2 = yyt3 = NULL; + goto yy241; + case '_': + yyt3 = YYCURSOR; + goto yy243; default: goto yy34; } yy222: yych = *++YYCURSOR; switch (yych) { - case 't': goto yy220; + case 'c': goto yy245; default: goto yy34; } yy223: yych = *++YYCURSOR; switch (yych) { - case 'a': goto yy242; + case 'y': goto yy224; default: goto yy34; } yy224: yych = *++YYCURSOR; switch (yych) { - case 't': goto yy243; + case 'c': goto yy246; default: goto yy34; } yy225: yych = *++YYCURSOR; switch (yych) { - case 'e': goto yy244; + case 'a': goto yy247; default: goto yy34; } yy226: yych = *++YYCURSOR; switch (yych) { - case 'q': goto yy244; + case 't': goto yy224; default: goto yy34; } yy227: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy248; + default: goto yy34; + } +yy228: + yych = *++YYCURSOR; + switch (yych) { + case 't': goto yy249; + default: goto yy34; + } +yy229: + yych = *++YYCURSOR; + switch (yych) { + case 'e': goto yy250; + default: goto yy34; + } +yy230: + yych = *++YYCURSOR; + switch (yych) { + case 'q': goto yy250; + default: goto yy34; + } +yy231: ++YYCURSOR; yynmatch = 4; yypmatch[2] = yyt1; @@ -1611,8 +1647,8 @@ yy227: opcode = absl::StrCat(group(1), "_", group(2), "_oncc", group(3)); goto end_region; } -#line 1615 "src/sfizz/OpcodeCleanup.cpp" -yy229: +#line 1651 "src/sfizz/OpcodeCleanup.cpp" +yy233: ++YYCURSOR; yynmatch = 3; yypmatch[4] = yyt1; @@ -1621,19 +1657,19 @@ yy229: yypmatch[2] = yyt1 - 8; yypmatch[3] = yyt1 - 6; yypmatch[5] = YYCURSOR - 1; -#line 149 "src/sfizz/OpcodeCleanup.re" +#line 153 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat(group(1), "hdcc", group(2)); goto end_region; } -#line 1630 "src/sfizz/OpcodeCleanup.cpp" -yy231: +#line 1666 "src/sfizz/OpcodeCleanup.cpp" +yy235: yych = *++YYCURSOR; switch (yych) { - case 't': goto yy213; + case 't': goto yy216; default: goto yy34; } -yy232: +yy236: ++YYCURSOR; yynmatch = 3; yypmatch[2] = yyt1; @@ -1647,133 +1683,107 @@ yy232: opcode = absl::StrCat(group(1), "_", group(2), "1"); goto end_region; } -#line 1651 "src/sfizz/OpcodeCleanup.cpp" -yy234: +#line 1687 "src/sfizz/OpcodeCleanup.cpp" +yy238: yych = *++YYCURSOR; switch (yych) { - case 'g': goto yy245; + case 0x00: goto yy251; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy238; default: goto yy34; } -yy235: +yy240: + yych = *++YYCURSOR; + switch (yych) { + case 'g': goto yy253; + default: goto yy34; + } +yy241: ++YYCURSOR; yynmatch = 2; yypmatch[0] = yyt1; yypmatch[2] = yyt3; yypmatch[3] = yyt2; yypmatch[1] = YYCURSOR; -#line 144 "src/sfizz/OpcodeCleanup.re" +#line 148 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat("resonance1", group(1)); goto end_region; } -#line 1670 "src/sfizz/OpcodeCleanup.cpp" -yy237: +#line 1722 "src/sfizz/OpcodeCleanup.cpp" +yy243: yych = *++YYCURSOR; if (yych <= 0x00) { yyt2 = YYCURSOR; - goto yy235; - } - goto yy237; -yy239: - yych = *++YYCURSOR; - switch (yych) { - case 'k': goto yy220; - default: goto yy34; - } -yy240: - yych = *++YYCURSOR; - switch (yych) { - case 'c': goto yy246; - default: goto yy34; - } -yy241: - yych = *++YYCURSOR; - switch (yych) { - case 's': goto yy247; - default: goto yy34; - } -yy242: - yych = *++YYCURSOR; - switch (yych) { - case 'i': goto yy248; - default: goto yy34; - } -yy243: - yych = *++YYCURSOR; - switch (yych) { - case 'h': goto yy244; - default: goto yy34; - } -yy244: - yych = *++YYCURSOR; - switch (yych) { - case 'c': goto yy249; - default: goto yy34; + goto yy241; } + goto yy243; yy245: yych = *++YYCURSOR; switch (yych) { - case 'r': goto yy250; + case 'k': goto yy224; default: goto yy34; } yy246: yych = *++YYCURSOR; switch (yych) { - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - yyt3 = YYCURSOR; - goto yy251; + case 'c': goto yy254; default: goto yy34; } yy247: yych = *++YYCURSOR; switch (yych) { - case 'e': goto yy220; + case 's': goto yy255; default: goto yy34; } yy248: yych = *++YYCURSOR; switch (yych) { - case 'n': goto yy220; + case 'i': goto yy256; default: goto yy34; } yy249: yych = *++YYCURSOR; switch (yych) { - case 'c': goto yy253; + case 'h': goto yy250; default: goto yy34; } yy250: yych = *++YYCURSOR; switch (yych) { - case 'o': goto yy254; + case 'c': goto yy257; default: goto yy34; } yy251: + ++YYCURSOR; + yynmatch = 3; + yypmatch[4] = yyt1; + yypmatch[0] = yyt1 - 9; + yypmatch[1] = YYCURSOR; + yypmatch[2] = yyt1 - 6; + yypmatch[3] = yyt1 - 4; + yypmatch[5] = YYCURSOR - 1; +#line 135 "src/sfizz/OpcodeCleanup.re" + { + opcode = absl::StrCat("start_", group(1), "hdcc", group(2)); + goto end_region; + } +#line 1780 "src/sfizz/OpcodeCleanup.cpp" +yy253: yych = *++YYCURSOR; switch (yych) { - case 0x00: goto yy255; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy251; + case 'r': goto yy258; default: goto yy34; } -yy253: +yy254: yych = *++YYCURSOR; switch (yych) { case '0': @@ -1787,16 +1797,73 @@ yy253: case '8': case '9': yyt3 = YYCURSOR; - goto yy257; - default: goto yy34; - } -yy254: - yych = *++YYCURSOR; - switch (yych) { - case 'u': goto yy259; + goto yy259; default: goto yy34; } yy255: + yych = *++YYCURSOR; + switch (yych) { + case 'e': goto yy224; + default: goto yy34; + } +yy256: + yych = *++YYCURSOR; + switch (yych) { + case 'n': goto yy224; + default: goto yy34; + } +yy257: + yych = *++YYCURSOR; + switch (yych) { + case 'c': goto yy261; + default: goto yy34; + } +yy258: + yych = *++YYCURSOR; + switch (yych) { + case 'o': goto yy262; + default: goto yy34; + } +yy259: + yych = *++YYCURSOR; + switch (yych) { + case 0x00: goto yy263; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy259; + default: goto yy34; + } +yy261: + yych = *++YYCURSOR; + switch (yych) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + yyt3 = YYCURSOR; + goto yy265; + default: goto yy34; + } +yy262: + yych = *++YYCURSOR; + switch (yych) { + case 'u': goto yy267; + default: goto yy34; + } +yy263: ++YYCURSOR; yynmatch = 4; yypmatch[2] = yyt1; @@ -1812,11 +1879,11 @@ yy255: opcode = absl::StrCat(group(1), "_", group(2), "_oncc", group(3)); goto end_region; } -#line 1816 "src/sfizz/OpcodeCleanup.cpp" -yy257: +#line 1883 "src/sfizz/OpcodeCleanup.cpp" +yy265: yych = *++YYCURSOR; switch (yych) { - case 0x00: goto yy260; + case 0x00: goto yy268; case '0': case '1': case '2': @@ -1826,16 +1893,16 @@ yy257: case '6': case '7': case '8': - case '9': goto yy257; + case '9': goto yy265; default: goto yy34; } -yy259: +yy267: yych = *++YYCURSOR; switch (yych) { - case 'p': goto yy262; + case 'p': goto yy270; default: goto yy34; } -yy260: +yy268: ++YYCURSOR; yynmatch = 4; yypmatch[2] = yyt1; @@ -1851,8 +1918,8 @@ yy260: opcode = absl::StrCat(group(1), "_", group(2), "_oncc", group(3)); goto end_region; } -#line 1855 "src/sfizz/OpcodeCleanup.cpp" -yy262: +#line 1922 "src/sfizz/OpcodeCleanup.cpp" +yy270: yych = *++YYCURSOR; if (yych >= 0x01) goto yy34; ++YYCURSOR; @@ -1864,9 +1931,9 @@ yy262: opcode = "group"; goto end_region; } -#line 1868 "src/sfizz/OpcodeCleanup.cpp" +#line 1935 "src/sfizz/OpcodeCleanup.cpp" } -#line 158 "src/sfizz/OpcodeCleanup.re" +#line 162 "src/sfizz/OpcodeCleanup.re" end_region: From e666b1dfaaf7d6df971754a61f4ee459bbe63781 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Fri, 15 May 2020 08:19:33 +0200 Subject: [PATCH 08/14] Opcode cleanups for and set_realccN --- src/sfizz/Opcode.h | 2 ++ src/sfizz/OpcodeCleanup.re | 35 ++++++++++++++++++++++++++++++++--- src/sfizz/Synth.cpp | 6 +++--- tests/OpcodeT.cpp | 2 +- 4 files changed, 38 insertions(+), 7 deletions(-) diff --git a/src/sfizz/Opcode.h b/src/sfizz/Opcode.h index 29f05c7b..4d77a96d 100644 --- a/src/sfizz/Opcode.h +++ b/src/sfizz/Opcode.h @@ -42,6 +42,8 @@ enum OpcodeCategory { enum OpcodeScope { //! unknown scope or other kOpcodeScopeGeneric, + //! control scope + kOpcodeScopeControl, //! region scope kOpcodeScopeRegion, //! effect scope diff --git a/src/sfizz/OpcodeCleanup.re b/src/sfizz/OpcodeCleanup.re index 795fe053..87658347 100644 --- a/src/sfizz/OpcodeCleanup.re +++ b/src/sfizz/OpcodeCleanup.re @@ -45,24 +45,28 @@ static std::string cleanUpOpcodeName(absl::string_view rawOpcode, OpcodeScope sc //-------------------------------------------------------------------------- + if (scope == kOpcodeScopeRegion) { + YYCURSOR = opcode.c_str(); /*!re2c (any) "_cc" (number) END { opcode = absl::StrCat(group(1), "_oncc", group(2)); - goto end_generic; + goto end_region_oncc; } * { - goto end_generic; + goto end_region_oncc; } */ -end_generic: +end_region_oncc: /* end */; + } // scope == kOpcodeScopeRegion + //-------------------------------------------------------------------------- if (scope == kOpcodeScopeRegion) { @@ -168,6 +172,31 @@ end_region: //-------------------------------------------------------------------------- + if (scope == kOpcodeScopeControl) { + + YYCURSOR = opcode.c_str(); + + /*!re2c + + "set_realcc" (number) END { + opcode = absl::StrCat("set_hdcc", group(1)); + goto end_control; + } + + * { + goto end_control; + } + + */ + +end_control: + /* end */; + + } // scope == kOpcodeScopeControl + + //-------------------------------------------------------------------------- + + #undef YYMAXNMATCH return opcode; diff --git a/src/sfizz/Synth.cpp b/src/sfizz/Synth.cpp index 52b80c9a..e458a8f8 100644 --- a/src/sfizz/Synth.cpp +++ b/src/sfizz/Synth.cpp @@ -199,7 +199,9 @@ void sfz::Synth::handleGroupOpcodes(const std::vector& members, const st void sfz::Synth::handleControlOpcodes(const std::vector& members) { - for (auto& member : members) { + for (auto& rawMember : members) { + const Opcode member = rawMember.cleanUp(kOpcodeScopeControl); + switch (member.lettersOnlyHash) { case hash("Set_cc&"): // fallthrough case hash("set_cc&"): @@ -211,8 +213,6 @@ void sfz::Synth::handleControlOpcodes(const std::vector& members) break; case hash("Set_hdcc&"): // fallthrough case hash("set_hdcc&"): - case hash("Set_realcc&"): - case hash("set_realcc&"): if (Default::ccNumberRange.containsWithEnd(member.parameters.back())) { const auto ccValue = readOpcode(member.value, Default::normalizedRange); if (ccValue) diff --git a/tests/OpcodeT.cpp b/tests/OpcodeT.cpp index ed3fb40e..374336b7 100644 --- a/tests/OpcodeT.cpp +++ b/tests/OpcodeT.cpp @@ -161,8 +161,8 @@ TEST_CASE("[Opcode] Derived names") TEST_CASE("[Opcode] Normalization") { - REQUIRE(sfz::Opcode("foo_cc7", "").cleanUp(sfz::kOpcodeScopeGeneric).opcode == "foo_oncc7"); REQUIRE(sfz::Opcode("foo_cc7", "").cleanUp(sfz::kOpcodeScopeRegion).opcode == "foo_oncc7"); + REQUIRE(sfz::Opcode("foo_cc7", "").cleanUp(sfz::kOpcodeScopeControl).opcode == "foo_cc7"); static const std::pair regionSpecific[] = { // LFO SFZv1 From b5548e85c0fe91436bfdc6ff77c75e2e8f6df568 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Fri, 15 May 2020 08:19:46 +0200 Subject: [PATCH 09/14] Update opcode cleanups --- src/sfizz/OpcodeCleanup.cpp | 240 ++++++++++++++++++++++++++++-------- 1 file changed, 190 insertions(+), 50 deletions(-) diff --git a/src/sfizz/OpcodeCleanup.cpp b/src/sfizz/OpcodeCleanup.cpp index 83b8aeb8..d5e41a63 100644 --- a/src/sfizz/OpcodeCleanup.cpp +++ b/src/sfizz/OpcodeCleanup.cpp @@ -1,4 +1,4 @@ -/* Generated by re2c 1.3 on Fri May 15 08:07:56 2020 */ +/* Generated by re2c 1.3 on Fri May 15 08:18:09 2020 */ #line 1 "src/sfizz/OpcodeCleanup.re" /* -*- mode: c++; -*- */ // SPDX-License-Identifier: BSD-2-Clause @@ -41,10 +41,12 @@ static std::string cleanUpOpcodeName(absl::string_view rawOpcode, OpcodeScope sc //-------------------------------------------------------------------------- + if (scope == kOpcodeScopeRegion) { + YYCURSOR = opcode.c_str(); -#line 48 "src/sfizz/OpcodeCleanup.cpp" +#line 50 "src/sfizz/OpcodeCleanup.cpp" { char yych; yych = *YYCURSOR; @@ -60,11 +62,11 @@ static std::string cleanUpOpcodeName(absl::string_view rawOpcode, OpcodeScope sc yy2: ++YYCURSOR; yy3: -#line 57 "src/sfizz/OpcodeCleanup.re" +#line 59 "src/sfizz/OpcodeCleanup.re" { - goto end_generic; + goto end_region_oncc; } -#line 68 "src/sfizz/OpcodeCleanup.cpp" +#line 70 "src/sfizz/OpcodeCleanup.cpp" yy4: yych = *(YYMARKER = ++YYCURSOR); if (yych <= 0x00) goto yy3; @@ -148,19 +150,21 @@ yy15: yypmatch[1] = YYCURSOR; yypmatch[3] = yyt2 - 3; yypmatch[5] = YYCURSOR - 1; -#line 52 "src/sfizz/OpcodeCleanup.re" +#line 54 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat(group(1), "_oncc", group(2)); - goto end_generic; + goto end_region_oncc; } -#line 157 "src/sfizz/OpcodeCleanup.cpp" +#line 159 "src/sfizz/OpcodeCleanup.cpp" } -#line 61 "src/sfizz/OpcodeCleanup.re" +#line 63 "src/sfizz/OpcodeCleanup.re" -end_generic: +end_region_oncc: /* end */; + } // scope == kOpcodeScopeRegion + //-------------------------------------------------------------------------- if (scope == kOpcodeScopeRegion) { @@ -168,7 +172,7 @@ end_generic: YYCURSOR = opcode.c_str(); -#line 172 "src/sfizz/OpcodeCleanup.cpp" +#line 176 "src/sfizz/OpcodeCleanup.cpp" { char yych; yych = *YYCURSOR; @@ -208,11 +212,11 @@ end_generic: yy19: ++YYCURSOR; yy20: -#line 158 "src/sfizz/OpcodeCleanup.re" +#line 162 "src/sfizz/OpcodeCleanup.re" { goto end_region; } -#line 216 "src/sfizz/OpcodeCleanup.cpp" +#line 220 "src/sfizz/OpcodeCleanup.cpp" yy21: yych = *(YYMARKER = ++YYCURSOR); switch (yych) { @@ -752,12 +756,12 @@ yy96: yypmatch[0] = yyt1 - 4; yypmatch[1] = YYCURSOR; yypmatch[3] = YYCURSOR - 1; -#line 140 "src/sfizz/OpcodeCleanup.re" +#line 144 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat("fil1_", group(1)); goto end_region; } -#line 761 "src/sfizz/OpcodeCleanup.cpp" +#line 765 "src/sfizz/OpcodeCleanup.cpp" yy98: yych = *++YYCURSOR; yy99: @@ -776,12 +780,12 @@ yy101: yypmatch[2] = yyt3; yypmatch[3] = yyt2; yypmatch[1] = YYCURSOR; -#line 122 "src/sfizz/OpcodeCleanup.re" +#line 126 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat("volume", group(1)); goto end_region; } -#line 785 "src/sfizz/OpcodeCleanup.cpp" +#line 789 "src/sfizz/OpcodeCleanup.cpp" yy103: yych = *++YYCURSOR; if (yych <= 0x00) { @@ -866,12 +870,12 @@ yy115: yypmatch[2] = yyt3; yypmatch[3] = yyt2; yypmatch[1] = YYCURSOR; -#line 126 "src/sfizz/OpcodeCleanup.re" +#line 130 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat("pitch", group(1)); goto end_region; } -#line 875 "src/sfizz/OpcodeCleanup.cpp" +#line 879 "src/sfizz/OpcodeCleanup.cpp" yy117: yych = *++YYCURSOR; if (yych <= 0x00) { @@ -1011,12 +1015,12 @@ yy137: yypmatch[0] = yyt1 - 3; yypmatch[1] = YYCURSOR; yypmatch[3] = YYCURSOR - 1; -#line 100 "src/sfizz/OpcodeCleanup.re" +#line 104 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat("off_", group(1)); goto end_region; } -#line 1020 "src/sfizz/OpcodeCleanup.cpp" +#line 1024 "src/sfizz/OpcodeCleanup.cpp" yy139: yych = *++YYCURSOR; switch (yych) { @@ -1102,12 +1106,12 @@ yy151: yypmatch[0] = yyt1 - 4; yypmatch[1] = YYCURSOR; yypmatch[3] = YYCURSOR - 1; -#line 104 "src/sfizz/OpcodeCleanup.re" +#line 108 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat("bend_", group(1)); goto end_region; } -#line 1111 "src/sfizz/OpcodeCleanup.cpp" +#line 1115 "src/sfizz/OpcodeCleanup.cpp" yy153: ++YYCURSOR; yynmatch = 2; @@ -1115,12 +1119,12 @@ yy153: yypmatch[2] = yyt3; yypmatch[3] = yyt2; yypmatch[1] = YYCURSOR; -#line 144 "src/sfizz/OpcodeCleanup.re" +#line 148 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat("cutoff1", group(1)); goto end_region; } -#line 1124 "src/sfizz/OpcodeCleanup.cpp" +#line 1128 "src/sfizz/OpcodeCleanup.cpp" yy155: yych = *++YYCURSOR; if (yych <= 0x00) { @@ -1313,12 +1317,12 @@ yy184: yynmatch = 1; yypmatch[0] = YYCURSOR - 8; yypmatch[1] = YYCURSOR; -#line 108 "src/sfizz/OpcodeCleanup.re" +#line 112 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat("fil1_type"); goto end_region; } -#line 1322 "src/sfizz/OpcodeCleanup.cpp" +#line 1326 "src/sfizz/OpcodeCleanup.cpp" yy186: yych = *++YYCURSOR; switch (yych) { @@ -1367,12 +1371,12 @@ yy191: yypmatch[0] = yyt1 - 4; yypmatch[1] = YYCURSOR; yypmatch[3] = YYCURSOR - 1; -#line 96 "src/sfizz/OpcodeCleanup.re" +#line 100 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat("loop_", group(1)); goto end_region; } -#line 1376 "src/sfizz/OpcodeCleanup.cpp" +#line 1380 "src/sfizz/OpcodeCleanup.cpp" yy193: yych = *++YYCURSOR; switch (yych) { @@ -1490,12 +1494,12 @@ yy210: yypmatch[0] = yyt1 - 3; yypmatch[1] = YYCURSOR; yypmatch[3] = YYCURSOR - 5; -#line 112 "src/sfizz/OpcodeCleanup.re" +#line 116 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat("fil", group(1), "_type"); goto end_region; } -#line 1499 "src/sfizz/OpcodeCleanup.cpp" +#line 1503 "src/sfizz/OpcodeCleanup.cpp" yy212: yych = *++YYCURSOR; switch (yych) { @@ -1537,12 +1541,12 @@ yy217: yypmatch[2] = yyt1 - 4; yypmatch[3] = yyt1 - 2; yypmatch[5] = YYCURSOR - 1; -#line 131 "src/sfizz/OpcodeCleanup.re" +#line 135 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat("start_", group(1), "cc", group(2)); goto end_region; } -#line 1546 "src/sfizz/OpcodeCleanup.cpp" +#line 1550 "src/sfizz/OpcodeCleanup.cpp" yy219: yych = *++YYCURSOR; switch (yych) { @@ -1642,12 +1646,12 @@ yy231: yypmatch[3] = yyt2 - 1; yypmatch[5] = yyt3 - 2; yypmatch[7] = YYCURSOR - 1; -#line 87 "src/sfizz/OpcodeCleanup.re" +#line 91 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat(group(1), "_", group(2), "_oncc", group(3)); goto end_region; } -#line 1651 "src/sfizz/OpcodeCleanup.cpp" +#line 1655 "src/sfizz/OpcodeCleanup.cpp" yy233: ++YYCURSOR; yynmatch = 3; @@ -1657,12 +1661,12 @@ yy233: yypmatch[2] = yyt1 - 8; yypmatch[3] = yyt1 - 6; yypmatch[5] = YYCURSOR - 1; -#line 153 "src/sfizz/OpcodeCleanup.re" +#line 157 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat(group(1), "hdcc", group(2)); goto end_region; } -#line 1666 "src/sfizz/OpcodeCleanup.cpp" +#line 1670 "src/sfizz/OpcodeCleanup.cpp" yy235: yych = *++YYCURSOR; switch (yych) { @@ -1678,12 +1682,12 @@ yy236: yypmatch[1] = YYCURSOR; yypmatch[3] = yyt2 - 1; yypmatch[5] = YYCURSOR - 1; -#line 91 "src/sfizz/OpcodeCleanup.re" +#line 95 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat(group(1), "_", group(2), "1"); goto end_region; } -#line 1687 "src/sfizz/OpcodeCleanup.cpp" +#line 1691 "src/sfizz/OpcodeCleanup.cpp" yy238: yych = *++YYCURSOR; switch (yych) { @@ -1713,12 +1717,12 @@ yy241: yypmatch[2] = yyt3; yypmatch[3] = yyt2; yypmatch[1] = YYCURSOR; -#line 148 "src/sfizz/OpcodeCleanup.re" +#line 152 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat("resonance1", group(1)); goto end_region; } -#line 1722 "src/sfizz/OpcodeCleanup.cpp" +#line 1726 "src/sfizz/OpcodeCleanup.cpp" yy243: yych = *++YYCURSOR; if (yych <= 0x00) { @@ -1771,12 +1775,12 @@ yy251: yypmatch[2] = yyt1 - 6; yypmatch[3] = yyt1 - 4; yypmatch[5] = YYCURSOR - 1; -#line 135 "src/sfizz/OpcodeCleanup.re" +#line 139 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat("start_", group(1), "hdcc", group(2)); goto end_region; } -#line 1780 "src/sfizz/OpcodeCleanup.cpp" +#line 1784 "src/sfizz/OpcodeCleanup.cpp" yy253: yych = *++YYCURSOR; switch (yych) { @@ -1874,12 +1878,12 @@ yy263: yypmatch[3] = yyt2 - 1; yypmatch[5] = yyt3 - 2; yypmatch[7] = YYCURSOR - 1; -#line 83 "src/sfizz/OpcodeCleanup.re" +#line 87 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat(group(1), "_", group(2), "_oncc", group(3)); goto end_region; } -#line 1883 "src/sfizz/OpcodeCleanup.cpp" +#line 1887 "src/sfizz/OpcodeCleanup.cpp" yy265: yych = *++YYCURSOR; switch (yych) { @@ -1913,12 +1917,12 @@ yy268: yypmatch[3] = yyt2 - 1; yypmatch[5] = yyt3 - 2; yypmatch[7] = YYCURSOR - 1; -#line 79 "src/sfizz/OpcodeCleanup.re" +#line 83 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat(group(1), "_", group(2), "_oncc", group(3)); goto end_region; } -#line 1922 "src/sfizz/OpcodeCleanup.cpp" +#line 1926 "src/sfizz/OpcodeCleanup.cpp" yy270: yych = *++YYCURSOR; if (yych >= 0x01) goto yy34; @@ -1926,14 +1930,14 @@ yy270: yynmatch = 1; yypmatch[0] = YYCURSOR - 16; yypmatch[1] = YYCURSOR; -#line 117 "src/sfizz/OpcodeCleanup.re" +#line 121 "src/sfizz/OpcodeCleanup.re" { opcode = "group"; goto end_region; } -#line 1935 "src/sfizz/OpcodeCleanup.cpp" +#line 1939 "src/sfizz/OpcodeCleanup.cpp" } -#line 162 "src/sfizz/OpcodeCleanup.re" +#line 166 "src/sfizz/OpcodeCleanup.re" end_region: @@ -1943,6 +1947,142 @@ end_region: //-------------------------------------------------------------------------- + if (scope == kOpcodeScopeControl) { + + YYCURSOR = opcode.c_str(); + + +#line 1956 "src/sfizz/OpcodeCleanup.cpp" +{ + char yych; + yych = *YYCURSOR; + switch (yych) { + case 's': goto yy277; + default: goto yy275; + } +yy275: + ++YYCURSOR; +yy276: +#line 186 "src/sfizz/OpcodeCleanup.re" + { + goto end_control; + } +#line 1971 "src/sfizz/OpcodeCleanup.cpp" +yy277: + yych = *(YYMARKER = ++YYCURSOR); + switch (yych) { + case 'e': goto yy278; + default: goto yy276; + } +yy278: + yych = *++YYCURSOR; + switch (yych) { + case 't': goto yy280; + default: goto yy279; + } +yy279: + YYCURSOR = YYMARKER; + goto yy276; +yy280: + yych = *++YYCURSOR; + switch (yych) { + case '_': goto yy281; + default: goto yy279; + } +yy281: + yych = *++YYCURSOR; + switch (yych) { + case 'r': goto yy282; + default: goto yy279; + } +yy282: + yych = *++YYCURSOR; + switch (yych) { + case 'e': goto yy283; + default: goto yy279; + } +yy283: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy284; + default: goto yy279; + } +yy284: + yych = *++YYCURSOR; + switch (yych) { + case 'l': goto yy285; + default: goto yy279; + } +yy285: + yych = *++YYCURSOR; + switch (yych) { + case 'c': goto yy286; + default: goto yy279; + } +yy286: + yych = *++YYCURSOR; + switch (yych) { + case 'c': goto yy287; + default: goto yy279; + } +yy287: + yych = *++YYCURSOR; + switch (yych) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + yyt1 = YYCURSOR; + goto yy288; + default: goto yy279; + } +yy288: + yych = *++YYCURSOR; + switch (yych) { + case 0x00: goto yy290; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy288; + default: goto yy279; + } +yy290: + ++YYCURSOR; + yynmatch = 2; + yypmatch[2] = yyt1; + yypmatch[0] = yyt1 - 10; + yypmatch[1] = YYCURSOR; + yypmatch[3] = YYCURSOR - 1; +#line 181 "src/sfizz/OpcodeCleanup.re" + { + opcode = absl::StrCat("set_hdcc", group(1)); + goto end_control; + } +#line 2074 "src/sfizz/OpcodeCleanup.cpp" +} +#line 190 "src/sfizz/OpcodeCleanup.re" + + +end_control: + /* end */; + + } // scope == kOpcodeScopeControl + + //-------------------------------------------------------------------------- + + #undef YYMAXNMATCH return opcode; From a29b72feb2c96d90aefb4e945266935fa75438c7 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Fri, 15 May 2020 08:24:38 +0200 Subject: [PATCH 10/14] Pass all opcodes through cleanup, including and --- src/sfizz/Opcode.h | 4 ++++ src/sfizz/Synth.cpp | 8 ++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/sfizz/Opcode.h b/src/sfizz/Opcode.h index 4d77a96d..04cf67ac 100644 --- a/src/sfizz/Opcode.h +++ b/src/sfizz/Opcode.h @@ -42,8 +42,12 @@ enum OpcodeCategory { enum OpcodeScope { //! unknown scope or other kOpcodeScopeGeneric, + //! global scope + kOpcodeScopeGlobal, //! control scope kOpcodeScopeControl, + //! group scope + kOpcodeScopeGroup, //! region scope kOpcodeScopeRegion, //! effect scope diff --git a/src/sfizz/Synth.cpp b/src/sfizz/Synth.cpp index e458a8f8..0dfbb0ac 100644 --- a/src/sfizz/Synth.cpp +++ b/src/sfizz/Synth.cpp @@ -158,7 +158,9 @@ void sfz::Synth::clear() void sfz::Synth::handleGlobalOpcodes(const std::vector& members) { - for (auto& member : members) { + for (auto& rawMember : members) { + const Opcode member = rawMember.cleanUp(kOpcodeScopeGlobal); + switch (member.lettersOnlyHash) { case hash("sw_default"): setValueFromOpcode(member, defaultSwitch, Default::keyRange); @@ -176,7 +178,9 @@ void sfz::Synth::handleGroupOpcodes(const std::vector& members, const st absl::optional groupIdx; unsigned maxPolyphony { config::maxVoices }; - const auto parseOpcode = [&](const Opcode& member) { + const auto parseOpcode = [&](const Opcode& rawMember) { + const Opcode member = rawMember.cleanUp(kOpcodeScopeGroup); + switch (member.lettersOnlyHash) { case hash("group"): setValueFromOpcode(member, groupIdx, Default::groupRange); From 66d4a0d1751b4dd53de6c16a437b3a9f8060de04 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Fri, 15 May 2020 08:26:29 +0200 Subject: [PATCH 11/14] Test for opcode cleanup --- tests/OpcodeT.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tests/OpcodeT.cpp b/tests/OpcodeT.cpp index 374336b7..8a64a921 100644 --- a/tests/OpcodeT.cpp +++ b/tests/OpcodeT.cpp @@ -223,4 +223,18 @@ TEST_CASE("[Opcode] Normalization") REQUIRE(sfz::Opcode(input, "").cleanUp(sfz::kOpcodeScopeRegion).opcode == expected); REQUIRE(sfz::Opcode(input, "").cleanUp(sfz::kOpcodeScopeGeneric).opcode == input); } + + /// + + static const std::pair controlSpecific[] = { + // ARIA aliases + {"set_realcc1", "set_hdcc1"}, + }; + + for (auto pair : controlSpecific) { + absl::string_view input = pair.first; + absl::string_view expected = pair.second; + REQUIRE(sfz::Opcode(input, "").cleanUp(sfz::kOpcodeScopeControl).opcode == expected); + REQUIRE(sfz::Opcode(input, "").cleanUp(sfz::kOpcodeScopeGeneric).opcode == input); + } } From 6472784bafdd91b9cc9ed7ae103a6e9dbb104e22 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Fri, 15 May 2020 08:31:33 +0200 Subject: [PATCH 12/14] Handle case-insensitivity in the cleanup --- src/sfizz/OpcodeCleanup.re | 4 ++++ src/sfizz/Synth.cpp | 5 ----- tests/OpcodeT.cpp | 10 +++++++++- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/sfizz/OpcodeCleanup.re b/src/sfizz/OpcodeCleanup.re index 87658347..3cf7bc47 100644 --- a/src/sfizz/OpcodeCleanup.re +++ b/src/sfizz/OpcodeCleanup.re @@ -8,6 +8,7 @@ #include "Opcode.h" #include "absl/strings/string_view.h" #include "absl/strings/str_cat.h" +#include "absl/strings/ascii.h" #include namespace sfz { @@ -16,6 +17,9 @@ static std::string cleanUpOpcodeName(absl::string_view rawOpcode, OpcodeScope sc { std::string opcode { rawOpcode }; + // always convert it to lower case + absl::AsciiStrToLower(&opcode); + /*!re2c re2c:flags:posix-captures = 1; re2c:define:YYCTYPE = char; diff --git a/src/sfizz/Synth.cpp b/src/sfizz/Synth.cpp index 0dfbb0ac..5bc5c376 100644 --- a/src/sfizz/Synth.cpp +++ b/src/sfizz/Synth.cpp @@ -207,7 +207,6 @@ void sfz::Synth::handleControlOpcodes(const std::vector& members) const Opcode member = rawMember.cleanUp(kOpcodeScopeControl); switch (member.lettersOnlyHash) { - case hash("Set_cc&"): // fallthrough case hash("set_cc&"): if (Default::ccNumberRange.containsWithEnd(member.parameters.back())) { const auto ccValue = readOpcode(member.value, Default::midi7Range); @@ -215,7 +214,6 @@ void sfz::Synth::handleControlOpcodes(const std::vector& members) resources.midiState.ccEvent(0, member.parameters.back(), normalizeCC(*ccValue)); } break; - case hash("Set_hdcc&"): // fallthrough case hash("set_hdcc&"): if (Default::ccNumberRange.containsWithEnd(member.parameters.back())) { const auto ccValue = readOpcode(member.value, Default::normalizedRange); @@ -223,7 +221,6 @@ void sfz::Synth::handleControlOpcodes(const std::vector& members) resources.midiState.ccEvent(0, member.parameters.back(), *ccValue); } break; - case hash("Label_cc&"): // fallthrough case hash("label_cc&"): if (Default::ccNumberRange.containsWithEnd(member.parameters.back())) ccLabels.emplace_back(member.parameters.back(), std::string(member.value)); @@ -232,8 +229,6 @@ void sfz::Synth::handleControlOpcodes(const std::vector& members) if (Default::keyRange.containsWithEnd(member.parameters.back())) keyLabels.emplace_back(member.parameters.back(), std::string(member.value)); break; - case hash("Default_path"): - // fallthrough case hash("default_path"): defaultPath = absl::StrReplaceAll(trim(member.value), { { "\\", "/" } }); DBG("Changing default sample path to " << defaultPath); diff --git a/tests/OpcodeT.cpp b/tests/OpcodeT.cpp index 8a64a921..78ce2d87 100644 --- a/tests/OpcodeT.cpp +++ b/tests/OpcodeT.cpp @@ -161,9 +161,13 @@ TEST_CASE("[Opcode] Derived names") TEST_CASE("[Opcode] Normalization") { + // *_ccN + REQUIRE(sfz::Opcode("foo_cc7", "").cleanUp(sfz::kOpcodeScopeRegion).opcode == "foo_oncc7"); REQUIRE(sfz::Opcode("foo_cc7", "").cleanUp(sfz::kOpcodeScopeControl).opcode == "foo_cc7"); + // + static const std::pair regionSpecific[] = { // LFO SFZv1 {"amplfo_depthcc1", "amplfo_depth_oncc1"}, @@ -224,7 +228,7 @@ TEST_CASE("[Opcode] Normalization") REQUIRE(sfz::Opcode(input, "").cleanUp(sfz::kOpcodeScopeGeneric).opcode == input); } - /// + // static const std::pair controlSpecific[] = { // ARIA aliases @@ -237,4 +241,8 @@ TEST_CASE("[Opcode] Normalization") REQUIRE(sfz::Opcode(input, "").cleanUp(sfz::kOpcodeScopeControl).opcode == expected); REQUIRE(sfz::Opcode(input, "").cleanUp(sfz::kOpcodeScopeGeneric).opcode == input); } + + // case + + REQUIRE(sfz::Opcode("SaMpLe", "").cleanUp(sfz::kOpcodeScopeRegion).opcode == "sample"); } From 513055980b985a798c434e3f2b6c87cf59f0f1ed Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Fri, 15 May 2020 08:31:42 +0200 Subject: [PATCH 13/14] Update cleanups --- src/sfizz/OpcodeCleanup.cpp | 114 +++++++++++++++++++----------------- 1 file changed, 59 insertions(+), 55 deletions(-) diff --git a/src/sfizz/OpcodeCleanup.cpp b/src/sfizz/OpcodeCleanup.cpp index d5e41a63..9c895648 100644 --- a/src/sfizz/OpcodeCleanup.cpp +++ b/src/sfizz/OpcodeCleanup.cpp @@ -1,4 +1,4 @@ -/* Generated by re2c 1.3 on Fri May 15 08:18:09 2020 */ +/* Generated by re2c 1.3 on Fri May 15 08:30:58 2020 */ #line 1 "src/sfizz/OpcodeCleanup.re" /* -*- mode: c++; -*- */ // SPDX-License-Identifier: BSD-2-Clause @@ -10,6 +10,7 @@ #include "Opcode.h" #include "absl/strings/string_view.h" #include "absl/strings/str_cat.h" +#include "absl/strings/ascii.h" #include namespace sfz { @@ -18,7 +19,10 @@ static std::string cleanUpOpcodeName(absl::string_view rawOpcode, OpcodeScope sc { std::string opcode { rawOpcode }; - #line 23 "src/sfizz/OpcodeCleanup.re" + // always convert it to lower case + absl::AsciiStrToLower(&opcode); + + #line 27 "src/sfizz/OpcodeCleanup.re" #define YYMAXNMATCH 4 @@ -36,7 +40,7 @@ static std::string cleanUpOpcodeName(absl::string_view rawOpcode, OpcodeScope sc return absl::string_view(beg, end - beg); }; - #line 44 "src/sfizz/OpcodeCleanup.re" + #line 48 "src/sfizz/OpcodeCleanup.re" //-------------------------------------------------------------------------- @@ -46,7 +50,7 @@ static std::string cleanUpOpcodeName(absl::string_view rawOpcode, OpcodeScope sc YYCURSOR = opcode.c_str(); -#line 50 "src/sfizz/OpcodeCleanup.cpp" +#line 54 "src/sfizz/OpcodeCleanup.cpp" { char yych; yych = *YYCURSOR; @@ -62,11 +66,11 @@ static std::string cleanUpOpcodeName(absl::string_view rawOpcode, OpcodeScope sc yy2: ++YYCURSOR; yy3: -#line 59 "src/sfizz/OpcodeCleanup.re" +#line 63 "src/sfizz/OpcodeCleanup.re" { goto end_region_oncc; } -#line 70 "src/sfizz/OpcodeCleanup.cpp" +#line 74 "src/sfizz/OpcodeCleanup.cpp" yy4: yych = *(YYMARKER = ++YYCURSOR); if (yych <= 0x00) goto yy3; @@ -150,14 +154,14 @@ yy15: yypmatch[1] = YYCURSOR; yypmatch[3] = yyt2 - 3; yypmatch[5] = YYCURSOR - 1; -#line 54 "src/sfizz/OpcodeCleanup.re" +#line 58 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat(group(1), "_oncc", group(2)); goto end_region_oncc; } -#line 159 "src/sfizz/OpcodeCleanup.cpp" +#line 163 "src/sfizz/OpcodeCleanup.cpp" } -#line 63 "src/sfizz/OpcodeCleanup.re" +#line 67 "src/sfizz/OpcodeCleanup.re" end_region_oncc: @@ -172,7 +176,7 @@ end_region_oncc: YYCURSOR = opcode.c_str(); -#line 176 "src/sfizz/OpcodeCleanup.cpp" +#line 180 "src/sfizz/OpcodeCleanup.cpp" { char yych; yych = *YYCURSOR; @@ -212,11 +216,11 @@ end_region_oncc: yy19: ++YYCURSOR; yy20: -#line 162 "src/sfizz/OpcodeCleanup.re" +#line 166 "src/sfizz/OpcodeCleanup.re" { goto end_region; } -#line 220 "src/sfizz/OpcodeCleanup.cpp" +#line 224 "src/sfizz/OpcodeCleanup.cpp" yy21: yych = *(YYMARKER = ++YYCURSOR); switch (yych) { @@ -756,12 +760,12 @@ yy96: yypmatch[0] = yyt1 - 4; yypmatch[1] = YYCURSOR; yypmatch[3] = YYCURSOR - 1; -#line 144 "src/sfizz/OpcodeCleanup.re" +#line 148 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat("fil1_", group(1)); goto end_region; } -#line 765 "src/sfizz/OpcodeCleanup.cpp" +#line 769 "src/sfizz/OpcodeCleanup.cpp" yy98: yych = *++YYCURSOR; yy99: @@ -780,12 +784,12 @@ yy101: yypmatch[2] = yyt3; yypmatch[3] = yyt2; yypmatch[1] = YYCURSOR; -#line 126 "src/sfizz/OpcodeCleanup.re" +#line 130 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat("volume", group(1)); goto end_region; } -#line 789 "src/sfizz/OpcodeCleanup.cpp" +#line 793 "src/sfizz/OpcodeCleanup.cpp" yy103: yych = *++YYCURSOR; if (yych <= 0x00) { @@ -870,12 +874,12 @@ yy115: yypmatch[2] = yyt3; yypmatch[3] = yyt2; yypmatch[1] = YYCURSOR; -#line 130 "src/sfizz/OpcodeCleanup.re" +#line 134 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat("pitch", group(1)); goto end_region; } -#line 879 "src/sfizz/OpcodeCleanup.cpp" +#line 883 "src/sfizz/OpcodeCleanup.cpp" yy117: yych = *++YYCURSOR; if (yych <= 0x00) { @@ -1015,12 +1019,12 @@ yy137: yypmatch[0] = yyt1 - 3; yypmatch[1] = YYCURSOR; yypmatch[3] = YYCURSOR - 1; -#line 104 "src/sfizz/OpcodeCleanup.re" +#line 108 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat("off_", group(1)); goto end_region; } -#line 1024 "src/sfizz/OpcodeCleanup.cpp" +#line 1028 "src/sfizz/OpcodeCleanup.cpp" yy139: yych = *++YYCURSOR; switch (yych) { @@ -1106,12 +1110,12 @@ yy151: yypmatch[0] = yyt1 - 4; yypmatch[1] = YYCURSOR; yypmatch[3] = YYCURSOR - 1; -#line 108 "src/sfizz/OpcodeCleanup.re" +#line 112 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat("bend_", group(1)); goto end_region; } -#line 1115 "src/sfizz/OpcodeCleanup.cpp" +#line 1119 "src/sfizz/OpcodeCleanup.cpp" yy153: ++YYCURSOR; yynmatch = 2; @@ -1119,12 +1123,12 @@ yy153: yypmatch[2] = yyt3; yypmatch[3] = yyt2; yypmatch[1] = YYCURSOR; -#line 148 "src/sfizz/OpcodeCleanup.re" +#line 152 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat("cutoff1", group(1)); goto end_region; } -#line 1128 "src/sfizz/OpcodeCleanup.cpp" +#line 1132 "src/sfizz/OpcodeCleanup.cpp" yy155: yych = *++YYCURSOR; if (yych <= 0x00) { @@ -1317,12 +1321,12 @@ yy184: yynmatch = 1; yypmatch[0] = YYCURSOR - 8; yypmatch[1] = YYCURSOR; -#line 112 "src/sfizz/OpcodeCleanup.re" +#line 116 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat("fil1_type"); goto end_region; } -#line 1326 "src/sfizz/OpcodeCleanup.cpp" +#line 1330 "src/sfizz/OpcodeCleanup.cpp" yy186: yych = *++YYCURSOR; switch (yych) { @@ -1371,12 +1375,12 @@ yy191: yypmatch[0] = yyt1 - 4; yypmatch[1] = YYCURSOR; yypmatch[3] = YYCURSOR - 1; -#line 100 "src/sfizz/OpcodeCleanup.re" +#line 104 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat("loop_", group(1)); goto end_region; } -#line 1380 "src/sfizz/OpcodeCleanup.cpp" +#line 1384 "src/sfizz/OpcodeCleanup.cpp" yy193: yych = *++YYCURSOR; switch (yych) { @@ -1494,12 +1498,12 @@ yy210: yypmatch[0] = yyt1 - 3; yypmatch[1] = YYCURSOR; yypmatch[3] = YYCURSOR - 5; -#line 116 "src/sfizz/OpcodeCleanup.re" +#line 120 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat("fil", group(1), "_type"); goto end_region; } -#line 1503 "src/sfizz/OpcodeCleanup.cpp" +#line 1507 "src/sfizz/OpcodeCleanup.cpp" yy212: yych = *++YYCURSOR; switch (yych) { @@ -1541,12 +1545,12 @@ yy217: yypmatch[2] = yyt1 - 4; yypmatch[3] = yyt1 - 2; yypmatch[5] = YYCURSOR - 1; -#line 135 "src/sfizz/OpcodeCleanup.re" +#line 139 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat("start_", group(1), "cc", group(2)); goto end_region; } -#line 1550 "src/sfizz/OpcodeCleanup.cpp" +#line 1554 "src/sfizz/OpcodeCleanup.cpp" yy219: yych = *++YYCURSOR; switch (yych) { @@ -1646,12 +1650,12 @@ yy231: yypmatch[3] = yyt2 - 1; yypmatch[5] = yyt3 - 2; yypmatch[7] = YYCURSOR - 1; -#line 91 "src/sfizz/OpcodeCleanup.re" +#line 95 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat(group(1), "_", group(2), "_oncc", group(3)); goto end_region; } -#line 1655 "src/sfizz/OpcodeCleanup.cpp" +#line 1659 "src/sfizz/OpcodeCleanup.cpp" yy233: ++YYCURSOR; yynmatch = 3; @@ -1661,12 +1665,12 @@ yy233: yypmatch[2] = yyt1 - 8; yypmatch[3] = yyt1 - 6; yypmatch[5] = YYCURSOR - 1; -#line 157 "src/sfizz/OpcodeCleanup.re" +#line 161 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat(group(1), "hdcc", group(2)); goto end_region; } -#line 1670 "src/sfizz/OpcodeCleanup.cpp" +#line 1674 "src/sfizz/OpcodeCleanup.cpp" yy235: yych = *++YYCURSOR; switch (yych) { @@ -1682,12 +1686,12 @@ yy236: yypmatch[1] = YYCURSOR; yypmatch[3] = yyt2 - 1; yypmatch[5] = YYCURSOR - 1; -#line 95 "src/sfizz/OpcodeCleanup.re" +#line 99 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat(group(1), "_", group(2), "1"); goto end_region; } -#line 1691 "src/sfizz/OpcodeCleanup.cpp" +#line 1695 "src/sfizz/OpcodeCleanup.cpp" yy238: yych = *++YYCURSOR; switch (yych) { @@ -1717,12 +1721,12 @@ yy241: yypmatch[2] = yyt3; yypmatch[3] = yyt2; yypmatch[1] = YYCURSOR; -#line 152 "src/sfizz/OpcodeCleanup.re" +#line 156 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat("resonance1", group(1)); goto end_region; } -#line 1726 "src/sfizz/OpcodeCleanup.cpp" +#line 1730 "src/sfizz/OpcodeCleanup.cpp" yy243: yych = *++YYCURSOR; if (yych <= 0x00) { @@ -1775,12 +1779,12 @@ yy251: yypmatch[2] = yyt1 - 6; yypmatch[3] = yyt1 - 4; yypmatch[5] = YYCURSOR - 1; -#line 139 "src/sfizz/OpcodeCleanup.re" +#line 143 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat("start_", group(1), "hdcc", group(2)); goto end_region; } -#line 1784 "src/sfizz/OpcodeCleanup.cpp" +#line 1788 "src/sfizz/OpcodeCleanup.cpp" yy253: yych = *++YYCURSOR; switch (yych) { @@ -1878,12 +1882,12 @@ yy263: yypmatch[3] = yyt2 - 1; yypmatch[5] = yyt3 - 2; yypmatch[7] = YYCURSOR - 1; -#line 87 "src/sfizz/OpcodeCleanup.re" +#line 91 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat(group(1), "_", group(2), "_oncc", group(3)); goto end_region; } -#line 1887 "src/sfizz/OpcodeCleanup.cpp" +#line 1891 "src/sfizz/OpcodeCleanup.cpp" yy265: yych = *++YYCURSOR; switch (yych) { @@ -1917,12 +1921,12 @@ yy268: yypmatch[3] = yyt2 - 1; yypmatch[5] = yyt3 - 2; yypmatch[7] = YYCURSOR - 1; -#line 83 "src/sfizz/OpcodeCleanup.re" +#line 87 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat(group(1), "_", group(2), "_oncc", group(3)); goto end_region; } -#line 1926 "src/sfizz/OpcodeCleanup.cpp" +#line 1930 "src/sfizz/OpcodeCleanup.cpp" yy270: yych = *++YYCURSOR; if (yych >= 0x01) goto yy34; @@ -1930,14 +1934,14 @@ yy270: yynmatch = 1; yypmatch[0] = YYCURSOR - 16; yypmatch[1] = YYCURSOR; -#line 121 "src/sfizz/OpcodeCleanup.re" +#line 125 "src/sfizz/OpcodeCleanup.re" { opcode = "group"; goto end_region; } -#line 1939 "src/sfizz/OpcodeCleanup.cpp" +#line 1943 "src/sfizz/OpcodeCleanup.cpp" } -#line 166 "src/sfizz/OpcodeCleanup.re" +#line 170 "src/sfizz/OpcodeCleanup.re" end_region: @@ -1952,7 +1956,7 @@ end_region: YYCURSOR = opcode.c_str(); -#line 1956 "src/sfizz/OpcodeCleanup.cpp" +#line 1960 "src/sfizz/OpcodeCleanup.cpp" { char yych; yych = *YYCURSOR; @@ -1963,11 +1967,11 @@ end_region: yy275: ++YYCURSOR; yy276: -#line 186 "src/sfizz/OpcodeCleanup.re" +#line 190 "src/sfizz/OpcodeCleanup.re" { goto end_control; } -#line 1971 "src/sfizz/OpcodeCleanup.cpp" +#line 1975 "src/sfizz/OpcodeCleanup.cpp" yy277: yych = *(YYMARKER = ++YYCURSOR); switch (yych) { @@ -2065,14 +2069,14 @@ yy290: yypmatch[0] = yyt1 - 10; yypmatch[1] = YYCURSOR; yypmatch[3] = YYCURSOR - 1; -#line 181 "src/sfizz/OpcodeCleanup.re" +#line 185 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat("set_hdcc", group(1)); goto end_control; } -#line 2074 "src/sfizz/OpcodeCleanup.cpp" +#line 2078 "src/sfizz/OpcodeCleanup.cpp" } -#line 190 "src/sfizz/OpcodeCleanup.re" +#line 194 "src/sfizz/OpcodeCleanup.re" end_control: From ac8d2d24a34696c14ec6962539aca3a4dc6f1c7e Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Sat, 16 May 2020 20:15:51 +0200 Subject: [PATCH 14/14] Adapt start_lohdccN to match ARIA: float 0-127 range --- src/sfizz/Range.h | 14 ++++++++++++++ src/sfizz/Region.cpp | 8 ++++---- src/sfizz/SfzHelpers.h | 10 ++++++++++ tests/RegionT.cpp | 8 ++++---- 4 files changed, 32 insertions(+), 8 deletions(-) diff --git a/src/sfizz/Range.h b/src/sfizz/Range.h index 9f339565..3b548535 100644 --- a/src/sfizz/Range.h +++ b/src/sfizz/Range.h @@ -102,6 +102,20 @@ public: _start = value; } + /** + * @brief Convert the range to a different value type + * + * @return Range + */ + template + Range to() const noexcept + { + return Range { + static_cast(_start), + static_cast(_end), + }; + } + private: Type _start { static_cast(0.0) }; Type _end { static_cast(0.0) }; diff --git a/src/sfizz/Region.cpp b/src/sfizz/Region.cpp index b6613c69..9e705904 100644 --- a/src/sfizz/Region.cpp +++ b/src/sfizz/Region.cpp @@ -324,14 +324,14 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode) case hash("start_lohdcc&"): // also on_lohdcc& if (opcode.parameters.back() >= config::numCCs) return false; - if (auto value = readOpcode(opcode.value, Default::normalizedRange)) - ccTriggers[opcode.parameters.back()].setStart(*value); + if (auto value = readOpcode(opcode.value, Default::midi7Range.to())) + ccTriggers[opcode.parameters.back()].setStart(normalizeCC(*value)); break; case hash("start_hihdcc&"): // also on_hihdcc& if (opcode.parameters.back() >= config::numCCs) return false; - if (auto value = readOpcode(opcode.value, Default::normalizedRange)) - ccTriggers[opcode.parameters.back()].setEnd(*value); + if (auto value = readOpcode(opcode.value, Default::midi7Range.to())) + ccTriggers[opcode.parameters.back()].setEnd(normalizeCC(*value)); break; // Performance parameters: amplifier diff --git a/src/sfizz/SfzHelpers.h b/src/sfizz/SfzHelpers.h index 5cd49aad..3d017980 100644 --- a/src/sfizz/SfzHelpers.h +++ b/src/sfizz/SfzHelpers.h @@ -194,6 +194,16 @@ namespace literals { return normalize7Bits(value); } + + inline float operator""_norm(long double value) + { + if (value < 0) + value = 0; + if (value > 127) + value = 127; + + return normalize7Bits(value); + } } /** diff --git a/tests/RegionT.cpp b/tests/RegionT.cpp index 4884274b..b7f88d92 100644 --- a/tests/RegionT.cpp +++ b/tests/RegionT.cpp @@ -501,14 +501,14 @@ TEST_CASE("[Region] Parsing opcodes") for (int ccIdx = 1; ccIdx < 128; ++ccIdx) { REQUIRE(!region.ccTriggers.contains(ccIdx)); } - region.parseOpcode({ "on_lohdcc46", "0.15" }); + region.parseOpcode({ "on_lohdcc46", "15.9" }); REQUIRE(region.ccTriggers.contains(46)); - REQUIRE(region.ccTriggers[46].getStart() == Approx(0.15f)); + REQUIRE(region.ccTriggers[46].getStart() == Approx(15.9_norm)); REQUIRE(region.ccTriggers[46].getEnd() == 1.0f); - region.parseOpcode({ "on_hihdcc5", "0.47" }); + region.parseOpcode({ "on_hihdcc5", "47.3" }); REQUIRE(region.ccTriggers.contains(5)); REQUIRE(region.ccTriggers[5].getStart() == 0.0f); - REQUIRE(region.ccTriggers[5].getEnd() == Approx(0.47f)); + REQUIRE(region.ccTriggers[5].getEnd() == Approx(47.3_norm)); } SECTION("volume")