From cd8ea73d0a700bc9587af58db84ec49de6c9f0b3 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Mon, 4 May 2020 18:30:21 +0200 Subject: [PATCH 1/7] Add the normalization of opcode names --- scripts/generate_re2c.sh | 11 + src/CMakeLists.txt | 2 +- src/sfizz/Opcode.h | 21 + src/sfizz/OpcodeCleanup.cpp | 1651 +++++++++++++++++++++++++++++++++++ src/sfizz/OpcodeCleanup.re | 164 ++++ 5 files changed, 1848 insertions(+), 1 deletion(-) create mode 100755 scripts/generate_re2c.sh create mode 100644 src/sfizz/OpcodeCleanup.cpp create mode 100644 src/sfizz/OpcodeCleanup.re diff --git a/scripts/generate_re2c.sh b/scripts/generate_re2c.sh new file mode 100755 index 00000000..4f65b9e1 --- /dev/null +++ b/scripts/generate_re2c.sh @@ -0,0 +1,11 @@ +#!/bin/sh +set -e + +if ! test -d "src"; then + echo "Please run this in the project root directory." + exit 1 +fi + +for src in src/sfizz/OpcodeCleanup.re; do + re2c -o "${src%.re}.cpp" "$src" +done diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e786dae3..03f976d2 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -45,7 +45,7 @@ sfizz_add_simd_sources (SFIZZ_SOURCES ".") # Parser core library add_library (sfizz_parser STATIC) target_sources (sfizz_parser PRIVATE - sfizz/Parser.cpp sfizz/Opcode.cpp sfizz/SfzHelpers.cpp + sfizz/Parser.cpp sfizz/Opcode.cpp sfizz/OpcodeCleanup.cpp sfizz/SfzHelpers.cpp sfizz/parser/Parser.cpp sfizz/parser/ParserPrivate.cpp) target_include_directories (sfizz_parser PUBLIC sfizz) target_include_directories (sfizz_parser PUBLIC external) diff --git a/src/sfizz/Opcode.h b/src/sfizz/Opcode.h index 189aca0b..b6f64e09 100644 --- a/src/sfizz/Opcode.h +++ b/src/sfizz/Opcode.h @@ -36,6 +36,18 @@ enum OpcodeCategory { kOpcodeSmoothCcN, }; +/** + * @brief A scope where an opcode may appear. + */ +enum OpcodeScope { + //! unknown scope or other + kOpcodeScopeGeneric, + //! region scope + kOpcodeScopeRegion, + //! effect scope + kOpcodeScopeEffect, +}; + /** * @brief Opcode description class. The class parses the parameters * of the opcode on construction. @@ -51,6 +63,15 @@ struct Opcode { std::vector parameters; OpcodeCategory category; + /* + * @brief Normalize in order to make the ampersand-name unique, and + * facilitate subsequent processing. + * + * @param scope scope where this opcode appears + * @return normalized opcode + */ + Opcode cleanUp(OpcodeScope scope) const; + /* * @brief Get the derived opcode name to convert it to another category. * diff --git a/src/sfizz/OpcodeCleanup.cpp b/src/sfizz/OpcodeCleanup.cpp new file mode 100644 index 00000000..e14b9017 --- /dev/null +++ b/src/sfizz/OpcodeCleanup.cpp @@ -0,0 +1,1651 @@ +/* Generated by re2c 1.3 on Mon May 4 19:13:10 2020 */ +#line 1 "src/sfizz/OpcodeCleanup.re" +/* -*- mode: c++; -*- */ +// SPDX-License-Identifier: BSD-2-Clause + +// This code is part of the sfizz library and is licensed under a BSD 2-clause +// license. You should have receive a LICENSE.md file along with the code. +// If not, contact the sfizz maintainers at https://github.com/sfztools/sfizz + +#include "Opcode.h" +#include "absl/strings/string_view.h" +#include "absl/strings/str_cat.h" +#include + +namespace sfz { + +static std::string cleanUpOpcodeName(absl::string_view rawOpcode, OpcodeScope scope) +{ + std::string opcode { rawOpcode }; + + #line 23 "src/sfizz/OpcodeCleanup.re" + + #define YYMAXNMATCH 4 + + + const char* YYCURSOR; + const char* YYMARKER; + const char* yypmatch[2 * YYMAXNMATCH]; + size_t yynmatch; + + const char* yyt1; const char* yyt2; const char* yyt3; + + auto group = [&yypmatch](size_t i) -> absl::string_view { + const char *beg = yypmatch[2 * i]; + const char *end = yypmatch[2 * i + 1]; + return absl::string_view(beg, end - beg); + }; + + #line 44 "src/sfizz/OpcodeCleanup.re" + + + //-------------------------------------------------------------------------- + + YYCURSOR = opcode.c_str(); + + +#line 48 "src/sfizz/OpcodeCleanup.cpp" +{ + char yych; + yych = *YYCURSOR; + switch (yych) { + case 0x00: goto yy2; + case '_': + yyt1 = YYCURSOR; + goto yy5; + default: + yyt1 = YYCURSOR; + goto yy4; + } +yy2: + ++YYCURSOR; +yy3: +#line 57 "src/sfizz/OpcodeCleanup.re" + { + goto end_generic; + } +#line 68 "src/sfizz/OpcodeCleanup.cpp" +yy4: + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= 0x00) goto yy3; + goto yy7; +yy5: + yych = *(YYMARKER = ++YYCURSOR); + switch (yych) { + case 0x00: goto yy3; + case 'c': goto yy11; + default: goto yy7; + } +yy6: + yych = *++YYCURSOR; +yy7: + switch (yych) { + case 0x00: goto yy8; + case '_': goto yy9; + default: goto yy6; + } +yy8: + YYCURSOR = YYMARKER; + goto yy3; +yy9: + yych = *++YYCURSOR; + switch (yych) { + case 0x00: goto yy8; + case '_': goto yy9; + case 'c': goto yy11; + default: goto yy6; + } +yy11: + yych = *++YYCURSOR; + switch (yych) { + case 0x00: goto yy8; + case '_': goto yy9; + case 'c': goto yy12; + default: goto yy6; + } +yy12: + yych = *++YYCURSOR; + switch (yych) { + case 0x00: goto yy8; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + yyt2 = YYCURSOR; + goto yy13; + case '_': goto yy9; + default: goto yy6; + } +yy13: + yych = *++YYCURSOR; + switch (yych) { + case 0x00: goto yy15; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy13; + case '_': goto yy9; + default: goto yy6; + } +yy15: + ++YYCURSOR; + yynmatch = 3; + yypmatch[2] = yyt1; + yypmatch[4] = yyt2; + yypmatch[0] = yyt1; + yypmatch[1] = YYCURSOR; + yypmatch[3] = yyt2 - 3; + yypmatch[5] = YYCURSOR - 1; +#line 52 "src/sfizz/OpcodeCleanup.re" + { + opcode = absl::StrCat(group(1), "_oncc", group(2)); + goto end_generic; + } +#line 157 "src/sfizz/OpcodeCleanup.cpp" +} +#line 61 "src/sfizz/OpcodeCleanup.re" + + +end_generic: + /* end */; + + //-------------------------------------------------------------------------- + + if (scope == kOpcodeScopeRegion) { + + YYCURSOR = opcode.c_str(); + + +#line 172 "src/sfizz/OpcodeCleanup.cpp" +{ + char yych; + yych = *YYCURSOR; + switch (yych) { + case 'a': + yyt1 = YYCURSOR; + goto yy21; + case 'b': goto yy22; + case 'e': + yyt1 = YYCURSOR; + goto yy23; + case 'f': + yyt1 = YYCURSOR; + goto yy24; + case 'g': + yyt1 = YYCURSOR; + goto yy25; + case 'l': + yyt1 = YYCURSOR; + goto yy26; + case 'o': goto yy27; + case 'p': + yyt1 = YYCURSOR; + goto yy28; + case 't': + yyt1 = YYCURSOR; + goto yy29; + default: goto yy19; + } +yy19: + ++YYCURSOR; +yy20: +#line 141 "src/sfizz/OpcodeCleanup.re" + { + goto end_region; + } +#line 209 "src/sfizz/OpcodeCleanup.cpp" +yy21: + yych = *(YYMARKER = ++YYCURSOR); + switch (yych) { + case 'm': goto yy30; + default: goto yy20; + } +yy22: + yych = *(YYMARKER = ++YYCURSOR); + switch (yych) { + case 'e': goto yy32; + default: goto yy20; + } +yy23: + yych = *(YYMARKER = ++YYCURSOR); + switch (yych) { + case 'q': goto yy33; + default: goto yy20; + } +yy24: + yych = *(YYMARKER = ++YYCURSOR); + switch (yych) { + case 'i': goto yy34; + default: goto yy20; + } +yy25: + yych = *(YYMARKER = ++YYCURSOR); + switch (yych) { + case 'a': goto yy35; + default: goto yy20; + } +yy26: + yych = *(YYMARKER = ++YYCURSOR); + switch (yych) { + case 'f': goto yy36; + case 'o': goto yy37; + default: goto yy20; + } +yy27: + yych = *(YYMARKER = ++YYCURSOR); + switch (yych) { + case 'f': goto yy38; + case 'n': goto yy39; + default: goto yy20; + } +yy28: + yych = *(YYMARKER = ++YYCURSOR); + switch (yych) { + case 'i': goto yy40; + case 'o': goto yy41; + default: goto yy20; + } +yy29: + yych = *(YYMARKER = ++YYCURSOR); + switch (yych) { + case 'u': goto yy42; + default: goto yy20; + } +yy30: + yych = *++YYCURSOR; + switch (yych) { + case 'p': goto yy43; + default: goto yy31; + } +yy31: + YYCURSOR = YYMARKER; + goto yy20; +yy32: + yych = *++YYCURSOR; + switch (yych) { + case 'n': goto yy44; + default: goto yy31; + } +yy33: + 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 yy45; + default: goto yy31; + } +yy34: + yych = *++YYCURSOR; + switch (yych) { + case 'l': goto yy47; + default: goto yy31; + } +yy35: + yych = *++YYCURSOR; + switch (yych) { + case 'i': goto yy48; + default: goto yy31; + } +yy36: + yych = *++YYCURSOR; + switch (yych) { + case 'o': goto yy49; + default: goto yy31; + } +yy37: + yych = *++YYCURSOR; + switch (yych) { + case 'o': goto yy50; + default: goto yy31; + } +yy38: + yych = *++YYCURSOR; + switch (yych) { + case 'f': goto yy51; + default: goto yy31; + } +yy39: + yych = *++YYCURSOR; + switch (yych) { + case '_': goto yy52; + default: goto yy31; + } +yy40: + yych = *++YYCURSOR; + switch (yych) { + case 't': goto yy53; + default: goto yy31; + } +yy41: + yych = *++YYCURSOR; + switch (yych) { + case 'l': goto yy54; + default: goto yy31; + } +yy42: + yych = *++YYCURSOR; + switch (yych) { + case 'n': goto yy55; + default: goto yy31; + } +yy43: + yych = *++YYCURSOR; + switch (yych) { + case 'e': goto yy56; + case 'l': goto yy57; + default: goto yy31; + } +yy44: + yych = *++YYCURSOR; + switch (yych) { + case 'd': goto yy58; + default: goto yy31; + } +yy45: + 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 yy45; + case '_': goto yy59; + default: goto yy31; + } +yy47: + 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 yy60; + case '_': goto yy62; + case 'e': goto yy56; + case 'l': goto yy57; + case 't': goto yy63; + default: goto yy31; + } +yy48: + yych = *++YYCURSOR; + switch (yych) { + case 'n': goto yy64; + default: goto yy31; + } +yy49: + 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 yy65; + default: goto yy31; + } +yy50: + yych = *++YYCURSOR; + switch (yych) { + case 'p': goto yy67; + default: goto yy31; + } +yy51: + yych = *++YYCURSOR; + switch (yych) { + case 'b': + yyt1 = YYCURSOR; + goto yy68; + case 'm': + yyt1 = YYCURSOR; + goto yy69; + default: goto yy31; + } +yy52: + yych = *++YYCURSOR; + switch (yych) { + case 'h': goto yy70; + case 'l': goto yy71; + default: goto yy31; + } +yy53: + yych = *++YYCURSOR; + switch (yych) { + case 'c': goto yy72; + default: goto yy31; + } +yy54: + yych = *++YYCURSOR; + switch (yych) { + case 'y': goto yy73; + default: goto yy31; + } +yy55: + yych = *++YYCURSOR; + switch (yych) { + case 'e': goto yy74; + default: goto yy31; + } +yy56: + yych = *++YYCURSOR; + switch (yych) { + case 'g': goto yy75; + default: goto yy31; + } +yy57: + yych = *++YYCURSOR; + switch (yych) { + case 'f': goto yy76; + default: goto yy31; + } +yy58: + yych = *++YYCURSOR; + switch (yych) { + case 'd': + yyt1 = YYCURSOR; + goto yy77; + case 'u': + yyt1 = YYCURSOR; + goto yy78; + default: goto yy31; + } +yy59: + yych = *++YYCURSOR; + switch (yych) { + case 'b': + yyt2 = YYCURSOR; + goto yy79; + case 'f': + yyt2 = YYCURSOR; + goto yy80; + case 'g': + yyt2 = YYCURSOR; + goto yy81; + default: goto yy31; + } +yy60: + 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 yy60; + case 't': goto yy82; + default: goto yy31; + } +yy62: + yych = *++YYCURSOR; + yyt1 = YYCURSOR; + goto yy86; +yy63: + yych = *++YYCURSOR; + switch (yych) { + case 'y': goto yy87; + default: goto yy31; + } +yy64: + yych = *++YYCURSOR; + switch (yych) { + case 0x00: + yyt2 = yyt3 = NULL; + goto yy88; + case '_': + yyt3 = YYCURSOR; + goto yy90; + default: goto yy31; + } +yy65: + 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 yy65; + case '_': goto yy92; + default: goto yy31; + } +yy67: + yych = *++YYCURSOR; + switch (yych) { + case 'e': + yyt1 = YYCURSOR; + goto yy93; + case 'm': + yyt1 = YYCURSOR; + goto yy94; + case 's': + yyt1 = YYCURSOR; + goto yy95; + default: goto yy31; + } +yy68: + yych = *++YYCURSOR; + switch (yych) { + case 'y': goto yy96; + default: goto yy31; + } +yy69: + yych = *++YYCURSOR; + switch (yych) { + case 'o': goto yy97; + default: goto yy31; + } +yy70: + yych = *++YYCURSOR; + switch (yych) { + case 'i': goto yy98; + default: goto yy31; + } +yy71: + yych = *++YYCURSOR; + switch (yych) { + case 'o': goto yy98; + default: goto yy31; + } +yy72: + yych = *++YYCURSOR; + switch (yych) { + case 'h': goto yy43; + default: goto yy31; + } +yy73: + yych = *++YYCURSOR; + switch (yych) { + case 'p': goto yy99; + default: goto yy31; + } +yy74: + yych = *++YYCURSOR; + switch (yych) { + case 0x00: + yyt2 = yyt3 = NULL; + goto yy100; + case '_': + yyt3 = YYCURSOR; + goto yy102; + default: goto yy31; + } +yy75: + yych = *++YYCURSOR; + switch (yych) { + case '_': goto yy104; + default: goto yy31; + } +yy76: + yych = *++YYCURSOR; + switch (yych) { + case 'o': goto yy105; + default: goto yy31; + } +yy77: + yych = *++YYCURSOR; + switch (yych) { + case 'o': goto yy106; + default: goto yy31; + } +yy78: + yych = *++YYCURSOR; + switch (yych) { + case 'p': goto yy107; + default: goto yy31; + } +yy79: + yych = *++YYCURSOR; + switch (yych) { + case 'w': goto yy108; + default: goto yy31; + } +yy80: + yych = *++YYCURSOR; + switch (yych) { + case 'r': goto yy109; + default: goto yy31; + } +yy81: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy110; + default: goto yy31; + } +yy82: + yych = *++YYCURSOR; + switch (yych) { + case 'y': goto yy111; + default: goto yy31; + } +yy83: + ++YYCURSOR; + yynmatch = 2; + yypmatch[2] = yyt1; + yypmatch[0] = yyt1 - 4; + yypmatch[1] = YYCURSOR; + yypmatch[3] = YYCURSOR - 1; +#line 131 "src/sfizz/OpcodeCleanup.re" + { + opcode = absl::StrCat("fil1_", group(1)); + goto end_region; + } +#line 675 "src/sfizz/OpcodeCleanup.cpp" +yy85: + yych = *++YYCURSOR; +yy86: + if (yych <= 0x00) goto yy83; + goto yy85; +yy87: + yych = *++YYCURSOR; + switch (yych) { + case 'p': goto yy112; + default: goto yy31; + } +yy88: + ++YYCURSOR; + yynmatch = 2; + yypmatch[0] = yyt1; + yypmatch[2] = yyt3; + yypmatch[3] = yyt2; + yypmatch[1] = YYCURSOR; +#line 122 "src/sfizz/OpcodeCleanup.re" + { + opcode = absl::StrCat("volume", group(1)); + goto end_region; + } +#line 699 "src/sfizz/OpcodeCleanup.cpp" +yy90: + yych = *++YYCURSOR; + if (yych <= 0x00) { + yyt2 = YYCURSOR; + goto yy88; + } + goto yy90; +yy92: + yych = *++YYCURSOR; + switch (yych) { + case 'o': + yyt2 = YYCURSOR; + goto yy113; + case 'r': + yyt2 = YYCURSOR; + goto yy114; + case 's': + yyt2 = YYCURSOR; + goto yy115; + case 'w': + yyt2 = YYCURSOR; + goto yy116; + default: goto yy31; + } +yy93: + yych = *++YYCURSOR; + switch (yych) { + case 'n': goto yy117; + default: goto yy31; + } +yy94: + yych = *++YYCURSOR; + switch (yych) { + case 'o': goto yy118; + default: goto yy31; + } +yy95: + yych = *++YYCURSOR; + switch (yych) { + case 't': goto yy119; + default: goto yy31; + } +yy96: + yych = *++YYCURSOR; + if (yych <= 0x00) goto yy120; + goto yy31; +yy97: + yych = *++YYCURSOR; + switch (yych) { + case 'd': goto yy122; + default: goto yy31; + } +yy98: + yych = *++YYCURSOR; + switch (yych) { + case 'c': goto yy123; + default: goto yy31; + } +yy99: + yych = *++YYCURSOR; + switch (yych) { + case 'h': goto yy124; + default: goto yy31; + } +yy100: + ++YYCURSOR; + yynmatch = 2; + yypmatch[0] = yyt1; + yypmatch[2] = yyt3; + yypmatch[3] = yyt2; + yypmatch[1] = YYCURSOR; +#line 126 "src/sfizz/OpcodeCleanup.re" + { + opcode = absl::StrCat("pitch", group(1)); + goto end_region; + } +#line 776 "src/sfizz/OpcodeCleanup.cpp" +yy102: + yych = *++YYCURSOR; + if (yych <= 0x00) { + yyt2 = YYCURSOR; + goto yy100; + } + goto yy102; +yy104: + yych = *++YYCURSOR; + switch (yych) { + case 'a': + yyt2 = YYCURSOR; + goto yy125; + case 'd': + yyt2 = YYCURSOR; + goto yy126; + case 'h': + yyt2 = YYCURSOR; + goto yy127; + case 'r': + yyt2 = YYCURSOR; + goto yy128; + case 's': + yyt2 = YYCURSOR; + goto yy129; + default: goto yy31; + } +yy105: + yych = *++YYCURSOR; + switch (yych) { + case '_': goto yy130; + default: goto yy31; + } +yy106: + yych = *++YYCURSOR; + switch (yych) { + case 'w': goto yy131; + default: goto yy31; + } +yy107: + yych = *++YYCURSOR; + if (yych <= 0x00) goto yy132; + goto yy31; +yy108: + yych = *++YYCURSOR; + switch (yych) { + case 'c': goto yy134; + default: goto yy31; + } +yy109: + yych = *++YYCURSOR; + switch (yych) { + case 'e': goto yy135; + default: goto yy31; + } +yy110: + yych = *++YYCURSOR; + switch (yych) { + case 'i': goto yy136; + default: goto yy31; + } +yy111: + yych = *++YYCURSOR; + switch (yych) { + case 'p': goto yy137; + default: goto yy31; + } +yy112: + yych = *++YYCURSOR; + switch (yych) { + case 'e': goto yy138; + default: goto yy31; + } +yy113: + yych = *++YYCURSOR; + switch (yych) { + case 'f': goto yy139; + default: goto yy31; + } +yy114: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy140; + default: goto yy31; + } +yy115: + yych = *++YYCURSOR; + switch (yych) { + case 'c': goto yy141; + default: goto yy31; + } +yy116: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy142; + default: goto yy31; + } +yy117: + yych = *++YYCURSOR; + switch (yych) { + case 'd': goto yy143; + default: goto yy31; + } +yy118: + yych = *++YYCURSOR; + switch (yych) { + case 'd': goto yy144; + default: goto yy31; + } +yy119: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy145; + default: goto yy31; + } +yy120: + ++YYCURSOR; + yynmatch = 2; + yypmatch[2] = yyt1; + yypmatch[0] = yyt1 - 3; + yypmatch[1] = YYCURSOR; + yypmatch[3] = YYCURSOR - 1; +#line 100 "src/sfizz/OpcodeCleanup.re" + { + opcode = absl::StrCat("off_", group(1)); + goto end_region; + } +#line 904 "src/sfizz/OpcodeCleanup.cpp" +yy122: + yych = *++YYCURSOR; + switch (yych) { + case 'e': goto yy96; + default: goto yy31; + } +yy123: + yych = *++YYCURSOR; + switch (yych) { + case 'c': goto yy146; + default: goto yy31; + } +yy124: + yych = *++YYCURSOR; + switch (yych) { + case 'o': goto yy147; + default: goto yy31; + } +yy125: + yych = *++YYCURSOR; + switch (yych) { + case 't': goto yy148; + default: goto yy31; + } +yy126: + yych = *++YYCURSOR; + switch (yych) { + case 'e': goto yy149; + default: goto yy31; + } +yy127: + yych = *++YYCURSOR; + switch (yych) { + case 'o': goto yy150; + default: goto yy31; + } +yy128: + yych = *++YYCURSOR; + switch (yych) { + case 'e': goto yy151; + default: goto yy31; + } +yy129: + yych = *++YYCURSOR; + switch (yych) { + case 't': goto yy152; + case 'u': goto yy153; + default: goto yy31; + } +yy130: + yych = *++YYCURSOR; + switch (yych) { + case 'd': + yyt2 = YYCURSOR; + goto yy154; + case 'f': + yyt2 = YYCURSOR; + goto yy155; + default: goto yy31; + } +yy131: + yych = *++YYCURSOR; + switch (yych) { + case 'n': goto yy107; + default: goto yy31; + } +yy132: + ++YYCURSOR; + yynmatch = 2; + yypmatch[2] = yyt1; + yypmatch[0] = yyt1 - 4; + yypmatch[1] = YYCURSOR; + yypmatch[3] = YYCURSOR - 1; +#line 104 "src/sfizz/OpcodeCleanup.re" + { + opcode = absl::StrCat("bend_", group(1)); + goto end_region; + } +#line 983 "src/sfizz/OpcodeCleanup.cpp" +yy134: + yych = *++YYCURSOR; + switch (yych) { + case 'c': goto yy156; + default: goto yy31; + } +yy135: + yych = *++YYCURSOR; + switch (yych) { + case 'q': goto yy108; + default: goto yy31; + } +yy136: + yych = *++YYCURSOR; + switch (yych) { + case 'n': goto yy108; + default: goto yy31; + } +yy137: + yych = *++YYCURSOR; + switch (yych) { + case 'e': goto yy157; + default: goto yy31; + } +yy138: + yych = *++YYCURSOR; + if (yych <= 0x00) goto yy158; + goto yy31; +yy139: + yych = *++YYCURSOR; + switch (yych) { + case 'f': goto yy160; + default: goto yy31; + } +yy140: + yych = *++YYCURSOR; + switch (yych) { + case 't': goto yy161; + default: goto yy31; + } +yy141: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy162; + default: goto yy31; + } +yy142: + yych = *++YYCURSOR; + switch (yych) { + case 'v': goto yy163; + default: goto yy31; + } +yy143: + yych = *++YYCURSOR; + if (yych <= 0x00) goto yy164; + goto yy31; +yy144: + yych = *++YYCURSOR; + switch (yych) { + case 'e': goto yy143; + default: goto yy31; + } +yy145: + yych = *++YYCURSOR; + switch (yych) { + case 'r': goto yy166; + default: goto yy31; + } +yy146: + 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 yy167; + default: goto yy31; + } +yy147: + yych = *++YYCURSOR; + switch (yych) { + case 'n': goto yy169; + default: goto yy31; + } +yy148: + yych = *++YYCURSOR; + switch (yych) { + case 't': goto yy170; + default: goto yy31; + } +yy149: + yych = *++YYCURSOR; + switch (yych) { + case 'c': + case 'l': goto yy171; + default: goto yy31; + } +yy150: + yych = *++YYCURSOR; + switch (yych) { + case 'l': goto yy172; + default: goto yy31; + } +yy151: + yych = *++YYCURSOR; + switch (yych) { + case 'l': goto yy173; + default: goto yy31; + } +yy152: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy174; + default: goto yy31; + } +yy153: + yych = *++YYCURSOR; + switch (yych) { + case 's': goto yy175; + default: goto yy31; + } +yy154: + yych = *++YYCURSOR; + switch (yych) { + case 'e': goto yy176; + default: goto yy31; + } +yy155: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy177; + case 'r': goto yy178; + default: goto yy31; + } +yy156: + 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 yy179; + default: goto yy31; + } +yy157: + yych = *++YYCURSOR; + if (yych <= 0x00) goto yy181; + goto yy31; +yy158: + ++YYCURSOR; + yynmatch = 1; + yypmatch[0] = YYCURSOR - 8; + yypmatch[1] = YYCURSOR; +#line 108 "src/sfizz/OpcodeCleanup.re" + { + opcode = absl::StrCat("fil1_type"); + goto end_region; + } +#line 1156 "src/sfizz/OpcodeCleanup.cpp" +yy160: + yych = *++YYCURSOR; + switch (yych) { + case 's': goto yy183; + default: goto yy31; + } +yy161: + yych = *++YYCURSOR; + switch (yych) { + case 'i': goto yy184; + default: goto yy31; + } +yy162: + yych = *++YYCURSOR; + switch (yych) { + case 'l': goto yy163; + default: goto yy31; + } +yy163: + yych = *++YYCURSOR; + switch (yych) { + case 'e': goto yy185; + default: goto yy31; + } +yy164: + ++YYCURSOR; + yynmatch = 2; + yypmatch[2] = yyt1; + yypmatch[0] = yyt1 - 4; + yypmatch[1] = YYCURSOR; + yypmatch[3] = YYCURSOR - 1; +#line 96 "src/sfizz/OpcodeCleanup.re" + { + opcode = absl::StrCat("loop_", group(1)); + goto end_region; + } +#line 1193 "src/sfizz/OpcodeCleanup.cpp" +yy166: + yych = *++YYCURSOR; + switch (yych) { + case 't': goto yy143; + default: goto yy31; + } +yy167: + yych = *++YYCURSOR; + switch (yych) { + case 0x00: goto yy186; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy167; + default: goto yy31; + } +yy169: + yych = *++YYCURSOR; + switch (yych) { + case 'y': goto yy188; + default: goto yy31; + } +yy170: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy189; + default: goto yy31; + } +yy171: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy190; + default: goto yy31; + } +yy172: + yych = *++YYCURSOR; + switch (yych) { + case 'd': goto yy191; + default: goto yy31; + } +yy173: + yych = *++YYCURSOR; + switch (yych) { + case 'e': goto yy192; + default: goto yy31; + } +yy174: + yych = *++YYCURSOR; + switch (yych) { + case 'r': goto yy193; + default: goto yy31; + } +yy175: + yych = *++YYCURSOR; + switch (yych) { + case 't': goto yy194; + default: goto yy31; + } +yy176: + yych = *++YYCURSOR; + switch (yych) { + case 'p': goto yy195; + default: goto yy31; + } +yy177: + yych = *++YYCURSOR; + switch (yych) { + case 'd': goto yy196; + default: goto yy31; + } +yy178: + yych = *++YYCURSOR; + switch (yych) { + case 'e': goto yy197; + default: goto yy31; + } +yy179: + yych = *++YYCURSOR; + switch (yych) { + case 0x00: goto yy198; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy179; + default: goto yy31; + } +yy181: + ++YYCURSOR; + yynmatch = 2; + yypmatch[2] = yyt1; + yypmatch[0] = yyt1 - 3; + yypmatch[1] = YYCURSOR; + yypmatch[3] = YYCURSOR - 5; +#line 112 "src/sfizz/OpcodeCleanup.re" + { + opcode = absl::StrCat("fil", group(1), "_type"); + goto end_region; + } +#line 1304 "src/sfizz/OpcodeCleanup.cpp" +yy183: + yych = *++YYCURSOR; + switch (yych) { + case 'e': goto yy200; + default: goto yy31; + } +yy184: + yych = *++YYCURSOR; + switch (yych) { + case 'o': goto yy185; + default: goto yy31; + } +yy185: + yych = *++YYCURSOR; + if (yych <= 0x00) goto yy201; + goto yy31; +yy186: + ++YYCURSOR; + yynmatch = 3; + yypmatch[4] = yyt1; + yypmatch[0] = yyt1 - 7; + yypmatch[1] = YYCURSOR; + yypmatch[2] = yyt1 - 4; + yypmatch[3] = yyt1 - 2; + yypmatch[5] = YYCURSOR - 1; +#line 136 "src/sfizz/OpcodeCleanup.re" + { + opcode = absl::StrCat("start_", group(1), "cc", group(2)); + goto end_region; + } +#line 1335 "src/sfizz/OpcodeCleanup.cpp" +yy188: + yych = *++YYCURSOR; + switch (yych) { + case '_': goto yy203; + default: goto yy31; + } +yy189: + yych = *++YYCURSOR; + switch (yych) { + case 'c': goto yy204; + default: goto yy31; + } +yy190: + yych = *++YYCURSOR; + switch (yych) { + case 'y': goto yy191; + default: goto yy31; + } +yy191: + yych = *++YYCURSOR; + switch (yych) { + case 'c': goto yy205; + default: goto yy31; + } +yy192: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy206; + default: goto yy31; + } +yy193: + yych = *++YYCURSOR; + switch (yych) { + case 't': goto yy191; + default: goto yy31; + } +yy194: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy207; + default: goto yy31; + } +yy195: + yych = *++YYCURSOR; + switch (yych) { + case 't': goto yy208; + default: goto yy31; + } +yy196: + yych = *++YYCURSOR; + switch (yych) { + case 'e': goto yy209; + default: goto yy31; + } +yy197: + yych = *++YYCURSOR; + switch (yych) { + case 'q': goto yy209; + default: goto yy31; + } +yy198: + ++YYCURSOR; + yynmatch = 4; + yypmatch[2] = yyt1; + yypmatch[4] = yyt2; + yypmatch[6] = yyt3; + yypmatch[0] = yyt1; + yypmatch[1] = YYCURSOR; + yypmatch[3] = yyt2 - 1; + yypmatch[5] = yyt3 - 2; + yypmatch[7] = YYCURSOR - 1; +#line 87 "src/sfizz/OpcodeCleanup.re" + { + opcode = absl::StrCat(group(1), "_", group(2), "_oncc", group(3)); + goto end_region; + } +#line 1412 "src/sfizz/OpcodeCleanup.cpp" +yy200: + yych = *++YYCURSOR; + switch (yych) { + case 't': goto yy185; + default: goto yy31; + } +yy201: + ++YYCURSOR; + yynmatch = 3; + yypmatch[2] = yyt1; + yypmatch[4] = yyt2; + yypmatch[0] = yyt1; + yypmatch[1] = YYCURSOR; + yypmatch[3] = yyt2 - 1; + yypmatch[5] = YYCURSOR - 1; +#line 91 "src/sfizz/OpcodeCleanup.re" + { + opcode = absl::StrCat(group(1), "_", group(2), "1"); + goto end_region; + } +#line 1433 "src/sfizz/OpcodeCleanup.cpp" +yy203: + yych = *++YYCURSOR; + switch (yych) { + case 'g': goto yy210; + default: goto yy31; + } +yy204: + yych = *++YYCURSOR; + switch (yych) { + case 'k': goto yy191; + default: goto yy31; + } +yy205: + yych = *++YYCURSOR; + switch (yych) { + case 'c': goto yy211; + default: goto yy31; + } +yy206: + yych = *++YYCURSOR; + switch (yych) { + case 's': goto yy212; + default: goto yy31; + } +yy207: + yych = *++YYCURSOR; + switch (yych) { + case 'i': goto yy213; + default: goto yy31; + } +yy208: + yych = *++YYCURSOR; + switch (yych) { + case 'h': goto yy209; + default: goto yy31; + } +yy209: + yych = *++YYCURSOR; + switch (yych) { + case 'c': goto yy214; + default: goto yy31; + } +yy210: + yych = *++YYCURSOR; + switch (yych) { + case 'r': goto yy215; + default: goto yy31; + } +yy211: + 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 yy216; + default: goto yy31; + } +yy212: + yych = *++YYCURSOR; + switch (yych) { + case 'e': goto yy191; + default: goto yy31; + } +yy213: + yych = *++YYCURSOR; + switch (yych) { + case 'n': goto yy191; + default: goto yy31; + } +yy214: + yych = *++YYCURSOR; + switch (yych) { + case 'c': goto yy218; + default: goto yy31; + } +yy215: + yych = *++YYCURSOR; + switch (yych) { + case 'o': goto yy219; + default: goto yy31; + } +yy216: + yych = *++YYCURSOR; + switch (yych) { + case 0x00: goto yy220; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy216; + default: goto yy31; + } +yy218: + 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 yy222; + default: goto yy31; + } +yy219: + yych = *++YYCURSOR; + switch (yych) { + case 'u': goto yy224; + default: goto yy31; + } +yy220: + ++YYCURSOR; + yynmatch = 4; + yypmatch[2] = yyt1; + yypmatch[4] = yyt2; + yypmatch[6] = yyt3; + yypmatch[0] = yyt1; + yypmatch[1] = YYCURSOR; + yypmatch[3] = yyt2 - 1; + yypmatch[5] = yyt3 - 2; + yypmatch[7] = YYCURSOR - 1; +#line 83 "src/sfizz/OpcodeCleanup.re" + { + opcode = absl::StrCat(group(1), "_", group(2), "_oncc", group(3)); + goto end_region; + } +#line 1578 "src/sfizz/OpcodeCleanup.cpp" +yy222: + yych = *++YYCURSOR; + switch (yych) { + case 0x00: goto yy225; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy222; + default: goto yy31; + } +yy224: + yych = *++YYCURSOR; + switch (yych) { + case 'p': goto yy227; + default: goto yy31; + } +yy225: + ++YYCURSOR; + yynmatch = 4; + yypmatch[2] = yyt1; + yypmatch[4] = yyt2; + yypmatch[6] = yyt3; + yypmatch[0] = yyt1; + yypmatch[1] = YYCURSOR; + yypmatch[3] = yyt2 - 1; + yypmatch[5] = yyt3 - 2; + yypmatch[7] = YYCURSOR - 1; +#line 79 "src/sfizz/OpcodeCleanup.re" + { + opcode = absl::StrCat(group(1), "_", group(2), "_oncc", group(3)); + goto end_region; + } +#line 1617 "src/sfizz/OpcodeCleanup.cpp" +yy227: + yych = *++YYCURSOR; + if (yych >= 0x01) goto yy31; + ++YYCURSOR; + yynmatch = 1; + yypmatch[0] = YYCURSOR - 16; + yypmatch[1] = YYCURSOR; +#line 117 "src/sfizz/OpcodeCleanup.re" + { + opcode = "group"; + goto end_region; + } +#line 1630 "src/sfizz/OpcodeCleanup.cpp" +} +#line 145 "src/sfizz/OpcodeCleanup.re" + + +end_region: + /* end */; + + } // scope == kOpcodeScopeRegion + + //-------------------------------------------------------------------------- + + #undef YYMAXNMATCH + + return opcode; +} + +Opcode Opcode::cleanUp(OpcodeScope scope) const +{ + return Opcode(cleanUpOpcodeName(opcode, scope), value); +} + +} // namespace sfz diff --git a/src/sfizz/OpcodeCleanup.re b/src/sfizz/OpcodeCleanup.re new file mode 100644 index 00000000..fec5f89b --- /dev/null +++ b/src/sfizz/OpcodeCleanup.re @@ -0,0 +1,164 @@ +/* -*- mode: c++; -*- */ +// SPDX-License-Identifier: BSD-2-Clause + +// This code is part of the sfizz library and is licensed under a BSD 2-clause +// license. You should have receive a LICENSE.md file along with the code. +// If not, contact the sfizz maintainers at https://github.com/sfztools/sfizz + +#include "Opcode.h" +#include "absl/strings/string_view.h" +#include "absl/strings/str_cat.h" +#include + +namespace sfz { + +static std::string cleanUpOpcodeName(absl::string_view rawOpcode, OpcodeScope scope) +{ + std::string opcode { rawOpcode }; + + /*!re2c + re2c:flags:posix-captures = 1; + re2c:define:YYCTYPE = char; + re2c:yyfill:enable = 0; + */ + /*!maxnmatch:re2c*/ + + const char* YYCURSOR; + const char* YYMARKER; + const char* yypmatch[2 * YYMAXNMATCH]; + size_t yynmatch; + + /*!stags:re2c format = "const char* @@; "; */ + + auto group = [&yypmatch](size_t i) -> absl::string_view { + const char *beg = yypmatch[2 * i]; + const char *end = yypmatch[2 * i + 1]; + return absl::string_view(beg, end - beg); + }; + + /*!re2c + digit = [0-9]; + number = digit+; + any = [^\x00]*; + END = [\x00]; + */ + + //-------------------------------------------------------------------------- + + YYCURSOR = opcode.c_str(); + + /*!re2c + + (any) "_cc" (number) END { + opcode = absl::StrCat(group(1), "_oncc", group(2)); + goto end_generic; + } + + * { + goto end_generic; + } + + */ + +end_generic: + /* end */; + + //-------------------------------------------------------------------------- + + if (scope == kOpcodeScopeRegion) { + + YYCURSOR = opcode.c_str(); + + /*!re2c + + lfoV1 = "amplfo"|"fillfo"|"pitchlfo"; + egV1 = "ampeg"|"fileg"|"pitcheg"; + eqV1 = "eq" number; + lfoV2 = "lfo" number; + + (lfoV1) "_" ("depth"|"freq"|"fade") "cc" (number) END { + opcode = absl::StrCat(group(1), "_", group(2), "_oncc", group(3)); + goto end_region; + } + (egV1) "_" ("delay"|"start"|"attack"|"hold"|"decay"|"sustain"|"release") "cc" (number) END { + opcode = absl::StrCat(group(1), "_", group(2), "_oncc", group(3)); + goto end_region; + } + (eqV1) "_" ("bw"|"freq"|"gain") "cc" (number) END { + opcode = absl::StrCat(group(1), "_", group(2), "_oncc", group(3)); + goto end_region; + } + (lfoV2) "_" ("wave"|"offset"|"ratio"|"scale") END { + opcode = absl::StrCat(group(1), "_", group(2), "1"); + goto end_region; + } + + "loop" ("mode"|"start"|"end") END { + opcode = absl::StrCat("loop_", group(1)); + goto end_region; + } + "off" ("by"|"mode") END { + opcode = absl::StrCat("off_", group(1)); + goto end_region; + } + "bend" ("up"|"down") END { + opcode = absl::StrCat("bend_", group(1)); + goto end_region; + } + "filtype" END { + opcode = absl::StrCat("fil1_type"); + goto end_region; + } + "fil" (number) "type" END { + opcode = absl::StrCat("fil", group(1), "_type"); + goto end_region; + } + + "polyphony_group" END { + opcode = "group"; + goto end_region; + } + + "gain" ("_" any)? END { + opcode = absl::StrCat("volume", group(1)); + goto end_region; + } + "tune" ("_" any)? END { + opcode = absl::StrCat("pitch", group(1)); + goto end_region; + } + + "fil_" (any) END { + opcode = absl::StrCat("fil1_", group(1)); + goto end_region; + } + + "on_" ("hi"|"lo") "cc" (number) END { + opcode = absl::StrCat("start_", group(1), "cc", group(2)); + goto end_region; + } + + * { + goto end_region; + } + + */ + +end_region: + /* end */; + + } // scope == kOpcodeScopeRegion + + //-------------------------------------------------------------------------- + + #undef YYMAXNMATCH + + return opcode; +} + +Opcode Opcode::cleanUp(OpcodeScope scope) const +{ + return Opcode(cleanUpOpcodeName(opcode, scope), value); +} + +} // namespace sfz From 4063d0e35f0099b576df39082adacfa3150aa054 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Mon, 4 May 2020 19:14:04 +0200 Subject: [PATCH 2/7] Add test for opcode normalization --- tests/OpcodeT.cpp | 56 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/tests/OpcodeT.cpp b/tests/OpcodeT.cpp index c45357ff..d4f7959e 100644 --- a/tests/OpcodeT.cpp +++ b/tests/OpcodeT.cpp @@ -158,3 +158,59 @@ TEST_CASE("[Opcode] Derived names") REQUIRE(sfz::Opcode("noise_level_smoothcc55", "").getDerivedName(sfz::kOpcodeStepCcN) == "noise_level_stepcc55"); REQUIRE(sfz::Opcode("sample", "").getDerivedName(sfz::kOpcodeSmoothCcN, 66) == "sample_smoothcc66"); } + +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"); + + static const std::pair regionSpecific[] = { + // LFO SFZv1 + {"amplfo_depthcc1", "amplfo_depth_oncc1"}, + {"fillfo_freqcc2", "fillfo_freq_oncc2"}, + {"pitchlfo_fadecc3", "pitchlfo_fade_oncc3"}, + // EG SFZv1 + {"ampeg_delaycc4", "ampeg_delay_oncc4"}, + {"fileg_startcc5", "fileg_start_oncc5"}, + {"pitcheg_attackcc6", "pitcheg_attack_oncc6"}, + {"ampeg_holdcc7", "ampeg_hold_oncc7"}, + {"fileg_decaycc8", "fileg_decay_oncc8"}, + {"pitcheg_sustaincc9", "pitcheg_sustain_oncc9"}, + {"ampeg_releasecc10", "ampeg_release_oncc10"}, + // EQ SFZv1 + {"eq11_bwcc12", "eq11_bw_oncc12"}, + {"eq13_freqcc14", "eq13_freq_oncc14"}, + {"eq15_gaincc16", "eq15_gain_oncc16"}, + // LFO SFZv2 + {"lfo17_wave", "lfo17_wave1"}, + {"lfo18_offset", "lfo18_offset1"}, + {"lfo19_ratio", "lfo19_ratio1"}, + {"lfo20_scale", "lfo20_scale1"}, + // LinuxSampler aliases + {"loopmode", "loop_mode"}, + {"loopstart", "loop_start"}, + {"loopend", "loop_end"}, + {"offby", "off_by"}, + {"offmode", "off_mode"}, + {"bendup", "bend_up"}, + {"benddown", "bend_down"}, + {"filtype", "fil1_type"}, + {"fil21type", "fil21_type"}, + // ARIA aliases + {"polyphony_group", "group"}, + {"gain", "volume"}, + {"gain_foobar", "volume_foobar"}, + {"tune", "pitch"}, + {"tune_foobar", "pitch_foobar"}, + // SFZv2 aliases + {"on_hicc22", "start_hicc22"}, + {"on_locc23", "start_locc23"}, + }; + + for (auto pair : regionSpecific) { + absl::string_view input = pair.first; + absl::string_view expected = pair.second; + REQUIRE(sfz::Opcode(input, "").cleanUp(sfz::kOpcodeScopeRegion).opcode == expected); + REQUIRE(sfz::Opcode(input, "").cleanUp(sfz::kOpcodeScopeGeneric).opcode == input); + } +} From 19851085747edd40a961eeb8735da67e9680dd08 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Tue, 5 May 2020 03:29:07 +0200 Subject: [PATCH 3/7] Opcode normalizations for cutoff and resonance --- src/sfizz/OpcodeCleanup.cpp | 1548 +++++++++++++++++++---------------- src/sfizz/OpcodeCleanup.re | 18 +- tests/OpcodeT.cpp | 6 + 3 files changed, 866 insertions(+), 706 deletions(-) diff --git a/src/sfizz/OpcodeCleanup.cpp b/src/sfizz/OpcodeCleanup.cpp index e14b9017..b42c44e1 100644 --- a/src/sfizz/OpcodeCleanup.cpp +++ b/src/sfizz/OpcodeCleanup.cpp @@ -1,4 +1,4 @@ -/* Generated by re2c 1.3 on Mon May 4 19:13:10 2020 */ +/* Generated by re2c 1.3 on Tue May 5 03:27:40 2020 */ #line 1 "src/sfizz/OpcodeCleanup.re" /* -*- mode: c++; -*- */ // SPDX-License-Identifier: BSD-2-Clause @@ -177,190 +177,132 @@ end_generic: yyt1 = YYCURSOR; goto yy21; case 'b': goto yy22; - case 'e': + case 'c': yyt1 = YYCURSOR; goto yy23; - case 'f': + case 'e': yyt1 = YYCURSOR; goto yy24; - case 'g': + case 'f': yyt1 = YYCURSOR; goto yy25; - case 'l': + case 'g': yyt1 = YYCURSOR; goto yy26; - case 'o': goto yy27; + case 'l': + yyt1 = YYCURSOR; + goto yy27; + case 'o': goto yy28; case 'p': yyt1 = YYCURSOR; - goto yy28; + goto yy29; + case 'r': + yyt1 = YYCURSOR; + goto yy30; case 't': yyt1 = YYCURSOR; - goto yy29; + goto yy31; default: goto yy19; } yy19: ++YYCURSOR; yy20: -#line 141 "src/sfizz/OpcodeCleanup.re" +#line 149 "src/sfizz/OpcodeCleanup.re" { goto end_region; } -#line 209 "src/sfizz/OpcodeCleanup.cpp" +#line 215 "src/sfizz/OpcodeCleanup.cpp" yy21: yych = *(YYMARKER = ++YYCURSOR); switch (yych) { - case 'm': goto yy30; + case 'm': goto yy32; default: goto yy20; } yy22: yych = *(YYMARKER = ++YYCURSOR); switch (yych) { - case 'e': goto yy32; + case 'e': goto yy34; default: goto yy20; } yy23: yych = *(YYMARKER = ++YYCURSOR); switch (yych) { - case 'q': goto yy33; + case 'u': goto yy35; default: goto yy20; } yy24: yych = *(YYMARKER = ++YYCURSOR); switch (yych) { - case 'i': goto yy34; + case 'q': goto yy36; default: goto yy20; } yy25: yych = *(YYMARKER = ++YYCURSOR); switch (yych) { - case 'a': goto yy35; + case 'i': goto yy37; default: goto yy20; } yy26: yych = *(YYMARKER = ++YYCURSOR); switch (yych) { - case 'f': goto yy36; - case 'o': goto yy37; + case 'a': goto yy38; default: goto yy20; } yy27: yych = *(YYMARKER = ++YYCURSOR); switch (yych) { - case 'f': goto yy38; - case 'n': goto yy39; + case 'f': goto yy39; + case 'o': goto yy40; default: goto yy20; } yy28: yych = *(YYMARKER = ++YYCURSOR); switch (yych) { - case 'i': goto yy40; - case 'o': goto yy41; + case 'f': goto yy41; + case 'n': goto yy42; default: goto yy20; } yy29: yych = *(YYMARKER = ++YYCURSOR); switch (yych) { - case 'u': goto yy42; + case 'i': goto yy43; + case 'o': goto yy44; default: goto yy20; } yy30: - yych = *++YYCURSOR; + yych = *(YYMARKER = ++YYCURSOR); switch (yych) { - case 'p': goto yy43; - default: goto yy31; + case 'e': goto yy45; + default: goto yy20; } yy31: - YYCURSOR = YYMARKER; - goto yy20; + yych = *(YYMARKER = ++YYCURSOR); + switch (yych) { + case 'u': goto yy46; + default: goto yy20; + } yy32: yych = *++YYCURSOR; switch (yych) { - case 'n': goto yy44; - default: goto yy31; + case 'p': goto yy47; + default: goto yy33; } yy33: - 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 yy45; - default: goto yy31; - } + YYCURSOR = YYMARKER; + goto yy20; yy34: yych = *++YYCURSOR; switch (yych) { - case 'l': goto yy47; - default: goto yy31; + case 'n': goto yy48; + default: goto yy33; } yy35: yych = *++YYCURSOR; switch (yych) { - case 'i': goto yy48; - default: goto yy31; + case 't': goto yy49; + default: goto yy33; } yy36: - yych = *++YYCURSOR; - switch (yych) { - case 'o': goto yy49; - default: goto yy31; - } -yy37: - yych = *++YYCURSOR; - switch (yych) { - case 'o': goto yy50; - default: goto yy31; - } -yy38: - yych = *++YYCURSOR; - switch (yych) { - case 'f': goto yy51; - default: goto yy31; - } -yy39: - yych = *++YYCURSOR; - switch (yych) { - case '_': goto yy52; - default: goto yy31; - } -yy40: - yych = *++YYCURSOR; - switch (yych) { - case 't': goto yy53; - default: goto yy31; - } -yy41: - yych = *++YYCURSOR; - switch (yych) { - case 'l': goto yy54; - default: goto yy31; - } -yy42: - yych = *++YYCURSOR; - switch (yych) { - case 'n': goto yy55; - default: goto yy31; - } -yy43: - yych = *++YYCURSOR; - switch (yych) { - case 'e': goto yy56; - case 'l': goto yy57; - default: goto yy31; - } -yy44: - yych = *++YYCURSOR; - switch (yych) { - case 'd': goto yy58; - default: goto yy31; - } -yy45: yych = *++YYCURSOR; switch (yych) { case '0': @@ -372,11 +314,105 @@ yy45: case '6': case '7': case '8': - case '9': goto yy45; - case '_': goto yy59; - default: goto yy31; + case '9': goto yy50; + default: goto yy33; + } +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': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy50; + case '_': goto yy66; + default: goto yy33; + } +yy52: yych = *++YYCURSOR; switch (yych) { case '0': @@ -390,151 +426,126 @@ yy47: case '8': case '9': yyt1 = YYCURSOR; - goto yy60; - case '_': goto yy62; - case 'e': goto yy56; - case 'l': goto yy57; - case 't': goto yy63; - default: goto yy31; - } -yy48: - yych = *++YYCURSOR; - switch (yych) { - case 'n': goto yy64; - default: goto yy31; - } -yy49: - 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 yy65; - default: goto yy31; - } -yy50: - yych = *++YYCURSOR; - switch (yych) { - case 'p': goto yy67; - default: goto yy31; - } -yy51: - yych = *++YYCURSOR; - switch (yych) { - case 'b': - yyt1 = YYCURSOR; - goto yy68; - case 'm': - yyt1 = YYCURSOR; - goto yy69; - default: goto yy31; - } -yy52: - yych = *++YYCURSOR; - switch (yych) { - case 'h': goto yy70; - case 'l': goto yy71; - default: goto yy31; + goto yy67; + case '_': goto yy69; + case 'e': goto yy62; + case 'l': goto yy63; + case 't': goto yy70; + default: goto yy33; } yy53: yych = *++YYCURSOR; switch (yych) { - case 'c': goto yy72; - default: goto yy31; + case 'n': goto yy71; + default: goto yy33; } yy54: yych = *++YYCURSOR; switch (yych) { - case 'y': goto yy73; - default: goto yy31; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy72; + default: goto yy33; } yy55: yych = *++YYCURSOR; switch (yych) { - case 'e': goto yy74; - default: goto yy31; + case 'p': goto yy74; + default: goto yy33; } yy56: yych = *++YYCURSOR; switch (yych) { - case 'g': goto yy75; - default: goto yy31; + case 'b': + yyt1 = YYCURSOR; + goto yy75; + case 'm': + yyt1 = YYCURSOR; + goto yy76; + default: goto yy33; } yy57: yych = *++YYCURSOR; switch (yych) { - case 'f': goto yy76; - default: goto yy31; + case 'h': goto yy77; + case 'l': goto yy78; + default: goto yy33; } yy58: yych = *++YYCURSOR; switch (yych) { - case 'd': - yyt1 = YYCURSOR; - goto yy77; - case 'u': - yyt1 = YYCURSOR; - goto yy78; - default: goto yy31; + case 'c': goto yy79; + default: goto yy33; } yy59: yych = *++YYCURSOR; switch (yych) { - case 'b': - yyt2 = YYCURSOR; - goto yy79; - case 'f': - yyt2 = YYCURSOR; - goto yy80; - case 'g': - yyt2 = YYCURSOR; - goto yy81; - default: goto yy31; + case 'y': goto yy80; + default: goto yy33; } yy60: 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 yy60; - case 't': goto yy82; - default: goto yy31; + case 'o': goto yy81; + default: goto yy33; + } +yy61: + yych = *++YYCURSOR; + switch (yych) { + case 'e': goto yy82; + default: goto yy33; } yy62: yych = *++YYCURSOR; - yyt1 = YYCURSOR; - goto yy86; + switch (yych) { + case 'g': goto yy83; + default: goto yy33; + } yy63: yych = *++YYCURSOR; switch (yych) { - case 'y': goto yy87; - default: goto yy31; + case 'f': goto yy84; + default: goto yy33; } yy64: yych = *++YYCURSOR; switch (yych) { - case 0x00: - yyt2 = yyt3 = NULL; - goto yy88; - case '_': - yyt3 = YYCURSOR; - goto yy90; - default: goto yy31; + case 'd': + yyt1 = YYCURSOR; + goto yy85; + case 'u': + yyt1 = YYCURSOR; + goto yy86; + default: goto yy33; } yy65: + yych = *++YYCURSOR; + switch (yych) { + case 'f': goto yy87; + default: goto yy33; + } +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; + } +yy67: yych = *++YYCURSOR; switch (yych) { case '0': @@ -546,144 +557,193 @@ yy65: case '6': case '7': case '8': - case '9': goto yy65; - case '_': goto yy92; - default: goto yy31; - } -yy67: - yych = *++YYCURSOR; - switch (yych) { - case 'e': - yyt1 = YYCURSOR; - goto yy93; - case 'm': - yyt1 = YYCURSOR; - goto yy94; - case 's': - yyt1 = YYCURSOR; - goto yy95; - default: goto yy31; - } -yy68: - yych = *++YYCURSOR; - switch (yych) { - case 'y': goto yy96; - default: goto yy31; + case '9': goto yy67; + case 't': goto yy91; + default: goto yy33; } yy69: yych = *++YYCURSOR; - switch (yych) { - case 'o': goto yy97; - default: goto yy31; - } + yyt1 = YYCURSOR; + goto yy95; yy70: yych = *++YYCURSOR; switch (yych) { - case 'i': goto yy98; - default: goto yy31; + case 'y': goto yy96; + default: goto yy33; } yy71: yych = *++YYCURSOR; switch (yych) { - case 'o': goto yy98; - default: goto yy31; + case 0x00: + yyt2 = yyt3 = NULL; + goto yy97; + case '_': + yyt3 = YYCURSOR; + goto yy99; + default: goto yy33; } yy72: yych = *++YYCURSOR; switch (yych) { - case 'h': goto yy43; - default: goto yy31; - } -yy73: - yych = *++YYCURSOR; - switch (yych) { - case 'p': goto yy99; - default: goto yy31; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy72; + case '_': goto yy101; + default: goto yy33; } yy74: yych = *++YYCURSOR; switch (yych) { - case 0x00: - yyt2 = yyt3 = NULL; - goto yy100; - case '_': - yyt3 = YYCURSOR; + case 'e': + yyt1 = YYCURSOR; goto yy102; - default: goto yy31; + case 'm': + yyt1 = YYCURSOR; + goto yy103; + case 's': + yyt1 = YYCURSOR; + goto yy104; + default: goto yy33; } yy75: yych = *++YYCURSOR; switch (yych) { - case '_': goto yy104; - default: goto yy31; + case 'y': goto yy105; + default: goto yy33; } yy76: yych = *++YYCURSOR; switch (yych) { - case 'o': goto yy105; - default: goto yy31; + case 'o': goto yy106; + default: goto yy33; } yy77: yych = *++YYCURSOR; switch (yych) { - case 'o': goto yy106; - default: goto yy31; + case 'i': goto yy107; + default: goto yy33; } yy78: yych = *++YYCURSOR; switch (yych) { - case 'p': goto yy107; - default: goto yy31; + case 'o': goto yy107; + default: goto yy33; } yy79: yych = *++YYCURSOR; switch (yych) { - case 'w': goto yy108; - default: goto yy31; + case 'h': goto yy47; + default: goto yy33; } yy80: yych = *++YYCURSOR; switch (yych) { - case 'r': goto yy109; - default: goto yy31; + case 'p': goto yy108; + default: goto yy33; } yy81: yych = *++YYCURSOR; switch (yych) { - case 'a': goto yy110; - default: goto yy31; + case 'n': goto yy109; + default: goto yy33; } yy82: yych = *++YYCURSOR; switch (yych) { - case 'y': goto yy111; - default: goto yy31; + case 0x00: + yyt2 = yyt3 = NULL; + goto yy110; + case '_': + yyt3 = YYCURSOR; + goto yy112; + default: goto yy33; } yy83: + yych = *++YYCURSOR; + switch (yych) { + case '_': goto yy114; + default: goto yy33; + } +yy84: + yych = *++YYCURSOR; + switch (yych) { + case 'o': goto yy115; + default: goto yy33; + } +yy85: + yych = *++YYCURSOR; + switch (yych) { + case 'o': goto yy116; + default: goto yy33; + } +yy86: + yych = *++YYCURSOR; + switch (yych) { + case 'p': goto yy117; + default: goto yy33; + } +yy87: + yych = *++YYCURSOR; + switch (yych) { + case 'f': goto yy118; + default: goto yy33; + } +yy88: + yych = *++YYCURSOR; + switch (yych) { + case 'w': goto yy119; + default: goto yy33; + } +yy89: + yych = *++YYCURSOR; + switch (yych) { + case 'r': goto yy120; + default: goto yy33; + } +yy90: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy121; + default: goto yy33; + } +yy91: + yych = *++YYCURSOR; + switch (yych) { + case 'y': goto yy122; + default: goto yy33; + } +yy92: ++YYCURSOR; yynmatch = 2; yypmatch[2] = yyt1; yypmatch[0] = yyt1 - 4; yypmatch[1] = YYCURSOR; yypmatch[3] = YYCURSOR - 1; -#line 131 "src/sfizz/OpcodeCleanup.re" +#line 136 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat("fil1_", group(1)); goto end_region; } -#line 675 "src/sfizz/OpcodeCleanup.cpp" -yy85: +#line 735 "src/sfizz/OpcodeCleanup.cpp" +yy94: yych = *++YYCURSOR; -yy86: - if (yych <= 0x00) goto yy83; - goto yy85; -yy87: +yy95: + if (yych <= 0x00) goto yy92; + goto yy94; +yy96: yych = *++YYCURSOR; switch (yych) { - case 'p': goto yy112; - default: goto yy31; + case 'p': goto yy123; + default: goto yy33; } -yy88: +yy97: ++YYCURSOR; yynmatch = 2; yypmatch[0] = yyt1; @@ -695,72 +755,78 @@ yy88: opcode = absl::StrCat("volume", group(1)); goto end_region; } -#line 699 "src/sfizz/OpcodeCleanup.cpp" -yy90: +#line 759 "src/sfizz/OpcodeCleanup.cpp" +yy99: yych = *++YYCURSOR; if (yych <= 0x00) { yyt2 = YYCURSOR; - goto yy88; + goto yy97; } - goto yy90; -yy92: + goto yy99; +yy101: yych = *++YYCURSOR; switch (yych) { case 'o': yyt2 = YYCURSOR; - goto yy113; + goto yy124; case 'r': yyt2 = YYCURSOR; - goto yy114; + goto yy125; case 's': yyt2 = YYCURSOR; - goto yy115; + goto yy126; case 'w': yyt2 = YYCURSOR; - goto yy116; - default: goto yy31; + goto yy127; + default: goto yy33; } -yy93: +yy102: yych = *++YYCURSOR; switch (yych) { - case 'n': goto yy117; - default: goto yy31; + case 'n': goto yy128; + default: goto yy33; } -yy94: +yy103: yych = *++YYCURSOR; switch (yych) { - case 'o': goto yy118; - default: goto yy31; + case 'o': goto yy129; + default: goto yy33; } -yy95: +yy104: yych = *++YYCURSOR; switch (yych) { - case 't': goto yy119; - default: goto yy31; + case 't': goto yy130; + default: goto yy33; } -yy96: +yy105: yych = *++YYCURSOR; - if (yych <= 0x00) goto yy120; - goto yy31; -yy97: + if (yych <= 0x00) goto yy131; + goto yy33; +yy106: yych = *++YYCURSOR; switch (yych) { - case 'd': goto yy122; - default: goto yy31; + case 'd': goto yy133; + default: goto yy33; } -yy98: +yy107: yych = *++YYCURSOR; switch (yych) { - case 'c': goto yy123; - default: goto yy31; + case 'c': goto yy134; + default: goto yy33; } -yy99: +yy108: yych = *++YYCURSOR; switch (yych) { - case 'h': goto yy124; - default: goto yy31; + case 'h': goto yy135; + default: goto yy33; } -yy100: +yy109: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy136; + default: goto yy33; + } +yy110: ++YYCURSOR; yynmatch = 2; yypmatch[0] = yyt1; @@ -772,123 +838,134 @@ yy100: opcode = absl::StrCat("pitch", group(1)); goto end_region; } -#line 776 "src/sfizz/OpcodeCleanup.cpp" -yy102: +#line 842 "src/sfizz/OpcodeCleanup.cpp" +yy112: yych = *++YYCURSOR; if (yych <= 0x00) { yyt2 = YYCURSOR; - goto yy100; + goto yy110; } - goto yy102; -yy104: + goto yy112; +yy114: yych = *++YYCURSOR; switch (yych) { case 'a': yyt2 = YYCURSOR; - goto yy125; + goto yy137; case 'd': yyt2 = YYCURSOR; - goto yy126; + goto yy138; case 'h': yyt2 = YYCURSOR; - goto yy127; + goto yy139; case 'r': yyt2 = YYCURSOR; - goto yy128; + goto yy140; case 's': yyt2 = YYCURSOR; - goto yy129; - default: goto yy31; - } -yy105: - yych = *++YYCURSOR; - switch (yych) { - case '_': goto yy130; - default: goto yy31; - } -yy106: - yych = *++YYCURSOR; - switch (yych) { - case 'w': goto yy131; - default: goto yy31; - } -yy107: - yych = *++YYCURSOR; - if (yych <= 0x00) goto yy132; - goto yy31; -yy108: - yych = *++YYCURSOR; - switch (yych) { - case 'c': goto yy134; - default: goto yy31; - } -yy109: - yych = *++YYCURSOR; - switch (yych) { - case 'e': goto yy135; - default: goto yy31; - } -yy110: - yych = *++YYCURSOR; - switch (yych) { - case 'i': goto yy136; - default: goto yy31; - } -yy111: - yych = *++YYCURSOR; - switch (yych) { - case 'p': goto yy137; - default: goto yy31; - } -yy112: - yych = *++YYCURSOR; - switch (yych) { - case 'e': goto yy138; - default: goto yy31; - } -yy113: - yych = *++YYCURSOR; - switch (yych) { - case 'f': goto yy139; - default: goto yy31; - } -yy114: - yych = *++YYCURSOR; - switch (yych) { - case 'a': goto yy140; - default: goto yy31; + goto yy141; + default: goto yy33; } yy115: yych = *++YYCURSOR; switch (yych) { - case 'c': goto yy141; - default: goto yy31; + case '_': goto yy142; + default: goto yy33; } yy116: yych = *++YYCURSOR; switch (yych) { - case 'a': goto yy142; - default: goto yy31; + case 'w': goto yy143; + default: goto yy33; } yy117: yych = *++YYCURSOR; - switch (yych) { - case 'd': goto yy143; - default: goto yy31; - } + if (yych <= 0x00) goto yy144; + goto yy33; yy118: yych = *++YYCURSOR; switch (yych) { - case 'd': goto yy144; - default: goto yy31; + case 0x00: + yyt2 = yyt3 = NULL; + goto yy146; + case '_': + yyt3 = YYCURSOR; + goto yy148; + default: goto yy33; } yy119: yych = *++YYCURSOR; switch (yych) { - case 'a': goto yy145; - default: goto yy31; + case 'c': goto yy150; + default: goto yy33; } yy120: + yych = *++YYCURSOR; + switch (yych) { + case 'e': goto yy151; + default: goto yy33; + } +yy121: + yych = *++YYCURSOR; + switch (yych) { + case 'i': goto yy152; + default: goto yy33; + } +yy122: + yych = *++YYCURSOR; + switch (yych) { + case 'p': goto yy153; + default: goto yy33; + } +yy123: + yych = *++YYCURSOR; + switch (yych) { + case 'e': goto yy154; + default: goto yy33; + } +yy124: + yych = *++YYCURSOR; + switch (yych) { + case 'f': goto yy155; + default: goto yy33; + } +yy125: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy156; + default: goto yy33; + } +yy126: + yych = *++YYCURSOR; + switch (yych) { + case 'c': goto yy157; + default: goto yy33; + } +yy127: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy158; + default: goto yy33; + } +yy128: + yych = *++YYCURSOR; + switch (yych) { + case 'd': goto yy159; + default: goto yy33; + } +yy129: + yych = *++YYCURSOR; + switch (yych) { + case 'd': goto yy160; + default: goto yy33; + } +yy130: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy161; + default: goto yy33; + } +yy131: ++YYCURSOR; yynmatch = 2; yypmatch[2] = yyt1; @@ -900,74 +977,80 @@ yy120: opcode = absl::StrCat("off_", group(1)); goto end_region; } -#line 904 "src/sfizz/OpcodeCleanup.cpp" -yy122: +#line 981 "src/sfizz/OpcodeCleanup.cpp" +yy133: yych = *++YYCURSOR; switch (yych) { - case 'e': goto yy96; - default: goto yy31; + case 'e': goto yy105; + default: goto yy33; } -yy123: +yy134: yych = *++YYCURSOR; switch (yych) { - case 'c': goto yy146; - default: goto yy31; + case 'c': goto yy162; + default: goto yy33; } -yy124: +yy135: yych = *++YYCURSOR; switch (yych) { - case 'o': goto yy147; - default: goto yy31; + case 'o': goto yy163; + default: goto yy33; } -yy125: +yy136: yych = *++YYCURSOR; switch (yych) { - case 't': goto yy148; - default: goto yy31; + case 'n': goto yy164; + default: goto yy33; } -yy126: +yy137: yych = *++YYCURSOR; switch (yych) { - case 'e': goto yy149; - default: goto yy31; + case 't': goto yy165; + default: goto yy33; } -yy127: +yy138: yych = *++YYCURSOR; switch (yych) { - case 'o': goto yy150; - default: goto yy31; + case 'e': goto yy166; + default: goto yy33; } -yy128: +yy139: yych = *++YYCURSOR; switch (yych) { - case 'e': goto yy151; - default: goto yy31; + case 'o': goto yy167; + default: goto yy33; } -yy129: +yy140: yych = *++YYCURSOR; switch (yych) { - case 't': goto yy152; - case 'u': goto yy153; - default: goto yy31; + case 'e': goto yy168; + default: goto yy33; } -yy130: +yy141: + yych = *++YYCURSOR; + switch (yych) { + case 't': goto yy169; + case 'u': goto yy170; + default: goto yy33; + } +yy142: yych = *++YYCURSOR; switch (yych) { case 'd': yyt2 = YYCURSOR; - goto yy154; + goto yy171; case 'f': yyt2 = YYCURSOR; - goto yy155; - default: goto yy31; + goto yy172; + default: goto yy33; } -yy131: +yy143: yych = *++YYCURSOR; switch (yych) { - case 'n': goto yy107; - default: goto yy31; + case 'n': goto yy117; + default: goto yy33; } -yy132: +yy144: ++YYCURSOR; yynmatch = 2; yypmatch[2] = yyt1; @@ -979,76 +1062,96 @@ yy132: opcode = absl::StrCat("bend_", group(1)); goto end_region; } -#line 983 "src/sfizz/OpcodeCleanup.cpp" -yy134: - yych = *++YYCURSOR; - switch (yych) { - case 'c': goto yy156; - default: goto yy31; - } -yy135: - yych = *++YYCURSOR; - switch (yych) { - case 'q': goto yy108; - default: goto yy31; - } -yy136: - yych = *++YYCURSOR; - switch (yych) { - case 'n': goto yy108; - default: goto yy31; - } -yy137: - yych = *++YYCURSOR; - switch (yych) { - case 'e': goto yy157; - default: goto yy31; - } -yy138: - yych = *++YYCURSOR; - if (yych <= 0x00) goto yy158; - goto yy31; -yy139: - yych = *++YYCURSOR; - switch (yych) { - case 'f': goto yy160; - default: goto yy31; - } -yy140: - yych = *++YYCURSOR; - switch (yych) { - case 't': goto yy161; - default: goto yy31; - } -yy141: - yych = *++YYCURSOR; - switch (yych) { - case 'a': goto yy162; - default: goto yy31; - } -yy142: - yych = *++YYCURSOR; - switch (yych) { - case 'v': goto yy163; - default: goto yy31; - } -yy143: - yych = *++YYCURSOR; - if (yych <= 0x00) goto yy164; - goto yy31; -yy144: - yych = *++YYCURSOR; - switch (yych) { - case 'e': goto yy143; - default: goto yy31; - } -yy145: - yych = *++YYCURSOR; - switch (yych) { - case 'r': goto yy166; - default: goto yy31; - } +#line 1066 "src/sfizz/OpcodeCleanup.cpp" yy146: + ++YYCURSOR; + yynmatch = 2; + yypmatch[0] = yyt1; + yypmatch[2] = yyt3; + yypmatch[3] = yyt2; + 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: + 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; + } +yy156: + yych = *++YYCURSOR; + switch (yych) { + case 't': goto yy178; + default: goto yy33; + } +yy157: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy179; + default: goto yy33; + } +yy158: + yych = *++YYCURSOR; + switch (yych) { + case 'v': goto yy180; + default: goto yy33; + } +yy159: + yych = *++YYCURSOR; + if (yych <= 0x00) goto yy181; + goto yy33; +yy160: + yych = *++YYCURSOR; + switch (yych) { + case 'e': goto yy159; + default: goto yy33; + } +yy161: + yych = *++YYCURSOR; + switch (yych) { + case 'r': goto yy183; + default: goto yy33; + } +yy162: yych = *++YYCURSOR; switch (yych) { case '0': @@ -1062,66 +1165,72 @@ yy146: case '8': case '9': yyt1 = YYCURSOR; - goto yy167; - default: goto yy31; + goto yy184; + default: goto yy33; } -yy147: +yy163: yych = *++YYCURSOR; switch (yych) { - case 'n': goto yy169; - default: goto yy31; + case 'n': goto yy186; + default: goto yy33; } -yy148: +yy164: yych = *++YYCURSOR; switch (yych) { - case 't': goto yy170; - default: goto yy31; + case 'c': goto yy187; + default: goto yy33; } -yy149: +yy165: + yych = *++YYCURSOR; + switch (yych) { + case 't': goto yy188; + default: goto yy33; + } +yy166: yych = *++YYCURSOR; switch (yych) { case 'c': - case 'l': goto yy171; - default: goto yy31; + case 'l': goto yy189; + default: goto yy33; } -yy150: +yy167: yych = *++YYCURSOR; switch (yych) { - case 'l': goto yy172; - default: goto yy31; + case 'l': goto yy190; + default: goto yy33; } -yy151: +yy168: yych = *++YYCURSOR; switch (yych) { - case 'l': goto yy173; - default: goto yy31; + case 'l': goto yy191; + default: goto yy33; } -yy152: +yy169: yych = *++YYCURSOR; switch (yych) { - case 'a': goto yy174; - default: goto yy31; + case 'a': goto yy192; + default: goto yy33; } -yy153: +yy170: yych = *++YYCURSOR; switch (yych) { - case 's': goto yy175; - default: goto yy31; + case 's': goto yy193; + default: goto yy33; } -yy154: +yy171: yych = *++YYCURSOR; switch (yych) { - case 'e': goto yy176; - default: goto yy31; + case 'e': goto yy194; + default: goto yy33; } -yy155: +yy172: yych = *++YYCURSOR; switch (yych) { - case 'a': goto yy177; - case 'r': goto yy178; - default: goto yy31; + case 'a': goto yy195; + case 'r': goto yy196; + default: goto yy33; } -yy156: +yy173: yych = *++YYCURSOR; switch (yych) { case '0': @@ -1135,14 +1244,14 @@ yy156: case '8': case '9': yyt3 = YYCURSOR; - goto yy179; - default: goto yy31; + goto yy197; + default: goto yy33; } -yy157: +yy174: yych = *++YYCURSOR; - if (yych <= 0x00) goto yy181; - goto yy31; -yy158: + if (yych <= 0x00) goto yy199; + goto yy33; +yy175: ++YYCURSOR; yynmatch = 1; yypmatch[0] = YYCURSOR - 8; @@ -1152,32 +1261,32 @@ yy158: opcode = absl::StrCat("fil1_type"); goto end_region; } -#line 1156 "src/sfizz/OpcodeCleanup.cpp" -yy160: +#line 1265 "src/sfizz/OpcodeCleanup.cpp" +yy177: yych = *++YYCURSOR; switch (yych) { - case 's': goto yy183; - default: goto yy31; + case 's': goto yy201; + default: goto yy33; } -yy161: +yy178: yych = *++YYCURSOR; switch (yych) { - case 'i': goto yy184; - default: goto yy31; + case 'i': goto yy202; + default: goto yy33; } -yy162: +yy179: yych = *++YYCURSOR; switch (yych) { - case 'l': goto yy163; - default: goto yy31; + case 'l': goto yy180; + default: goto yy33; } -yy163: +yy180: yych = *++YYCURSOR; switch (yych) { - case 'e': goto yy185; - default: goto yy31; + case 'e': goto yy203; + default: goto yy33; } -yy164: +yy181: ++YYCURSOR; yynmatch = 2; yypmatch[2] = yyt1; @@ -1189,17 +1298,17 @@ yy164: opcode = absl::StrCat("loop_", group(1)); goto end_region; } -#line 1193 "src/sfizz/OpcodeCleanup.cpp" -yy166: +#line 1302 "src/sfizz/OpcodeCleanup.cpp" +yy183: yych = *++YYCURSOR; switch (yych) { - case 't': goto yy143; - default: goto yy31; + case 't': goto yy159; + default: goto yy33; } -yy167: +yy184: yych = *++YYCURSOR; switch (yych) { - case 0x00: goto yy186; + case 0x00: goto yy204; case '0': case '1': case '2': @@ -1209,73 +1318,79 @@ yy167: case '6': case '7': case '8': - case '9': goto yy167; - default: goto yy31; + case '9': goto yy184; + default: goto yy33; } -yy169: +yy186: yych = *++YYCURSOR; switch (yych) { - case 'y': goto yy188; - default: goto yy31; + case 'y': goto yy206; + default: goto yy33; } -yy170: +yy187: yych = *++YYCURSOR; switch (yych) { - case 'a': goto yy189; - default: goto yy31; + case 'e': goto yy207; + default: goto yy33; } -yy171: +yy188: yych = *++YYCURSOR; switch (yych) { - case 'a': goto yy190; - default: goto yy31; + case 'a': goto yy208; + default: goto yy33; } -yy172: +yy189: yych = *++YYCURSOR; switch (yych) { - case 'd': goto yy191; - default: goto yy31; + case 'a': goto yy209; + default: goto yy33; } -yy173: +yy190: yych = *++YYCURSOR; switch (yych) { - case 'e': goto yy192; - default: goto yy31; + case 'd': goto yy210; + default: goto yy33; } -yy174: +yy191: yych = *++YYCURSOR; switch (yych) { - case 'r': goto yy193; - default: goto yy31; + case 'e': goto yy211; + default: goto yy33; } -yy175: +yy192: yych = *++YYCURSOR; switch (yych) { - case 't': goto yy194; - default: goto yy31; + case 'r': goto yy212; + default: goto yy33; } -yy176: +yy193: yych = *++YYCURSOR; switch (yych) { - case 'p': goto yy195; - default: goto yy31; + case 't': goto yy213; + default: goto yy33; } -yy177: +yy194: yych = *++YYCURSOR; switch (yych) { - case 'd': goto yy196; - default: goto yy31; + case 'p': goto yy214; + default: goto yy33; } -yy178: +yy195: yych = *++YYCURSOR; switch (yych) { - case 'e': goto yy197; - default: goto yy31; + case 'd': goto yy215; + default: goto yy33; } -yy179: +yy196: yych = *++YYCURSOR; switch (yych) { - case 0x00: goto yy198; + case 'e': goto yy216; + default: goto yy33; + } +yy197: + yych = *++YYCURSOR; + switch (yych) { + case 0x00: goto yy217; case '0': case '1': case '2': @@ -1285,10 +1400,10 @@ yy179: case '6': case '7': case '8': - case '9': goto yy179; - default: goto yy31; + case '9': goto yy197; + default: goto yy33; } -yy181: +yy199: ++YYCURSOR; yynmatch = 2; yypmatch[2] = yyt1; @@ -1300,24 +1415,24 @@ yy181: opcode = absl::StrCat("fil", group(1), "_type"); goto end_region; } -#line 1304 "src/sfizz/OpcodeCleanup.cpp" -yy183: +#line 1419 "src/sfizz/OpcodeCleanup.cpp" +yy201: yych = *++YYCURSOR; switch (yych) { - case 'e': goto yy200; - default: goto yy31; + case 'e': goto yy219; + default: goto yy33; } -yy184: +yy202: yych = *++YYCURSOR; switch (yych) { - case 'o': goto yy185; - default: goto yy31; + case 'o': goto yy203; + default: goto yy33; } -yy185: +yy203: yych = *++YYCURSOR; - if (yych <= 0x00) goto yy201; - goto yy31; -yy186: + if (yych <= 0x00) goto yy220; + goto yy33; +yy204: ++YYCURSOR; yynmatch = 3; yypmatch[4] = yyt1; @@ -1326,73 +1441,84 @@ yy186: yypmatch[2] = yyt1 - 4; yypmatch[3] = yyt1 - 2; yypmatch[5] = YYCURSOR - 1; -#line 136 "src/sfizz/OpcodeCleanup.re" +#line 131 "src/sfizz/OpcodeCleanup.re" { opcode = absl::StrCat("start_", group(1), "cc", group(2)); goto end_region; } -#line 1335 "src/sfizz/OpcodeCleanup.cpp" -yy188: +#line 1450 "src/sfizz/OpcodeCleanup.cpp" +yy206: yych = *++YYCURSOR; switch (yych) { - case '_': goto yy203; - default: goto yy31; + case '_': goto yy222; + default: goto yy33; } -yy189: +yy207: yych = *++YYCURSOR; switch (yych) { - case 'c': goto yy204; - default: goto yy31; + case 0x00: + yyt2 = yyt3 = NULL; + goto yy223; + case '_': + yyt3 = YYCURSOR; + goto yy225; + default: goto yy33; } -yy190: +yy208: yych = *++YYCURSOR; switch (yych) { - case 'y': goto yy191; - default: goto yy31; + case 'c': goto yy227; + default: goto yy33; } -yy191: +yy209: yych = *++YYCURSOR; switch (yych) { - case 'c': goto yy205; - default: goto yy31; + case 'y': goto yy210; + default: goto yy33; } -yy192: +yy210: yych = *++YYCURSOR; switch (yych) { - case 'a': goto yy206; - default: goto yy31; + case 'c': goto yy228; + default: goto yy33; } -yy193: +yy211: yych = *++YYCURSOR; switch (yych) { - case 't': goto yy191; - default: goto yy31; + case 'a': goto yy229; + default: goto yy33; } -yy194: +yy212: yych = *++YYCURSOR; switch (yych) { - case 'a': goto yy207; - default: goto yy31; + case 't': goto yy210; + default: goto yy33; } -yy195: +yy213: yych = *++YYCURSOR; switch (yych) { - case 't': goto yy208; - default: goto yy31; + case 'a': goto yy230; + default: goto yy33; } -yy196: +yy214: yych = *++YYCURSOR; switch (yych) { - case 'e': goto yy209; - default: goto yy31; + case 't': goto yy231; + default: goto yy33; } -yy197: +yy215: yych = *++YYCURSOR; switch (yych) { - case 'q': goto yy209; - default: goto yy31; + case 'e': goto yy232; + default: goto yy33; } -yy198: +yy216: + yych = *++YYCURSOR; + switch (yych) { + case 'q': goto yy232; + default: goto yy33; + } +yy217: ++YYCURSOR; yynmatch = 4; yypmatch[2] = yyt1; @@ -1408,14 +1534,14 @@ yy198: opcode = absl::StrCat(group(1), "_", group(2), "_oncc", group(3)); goto end_region; } -#line 1412 "src/sfizz/OpcodeCleanup.cpp" -yy200: +#line 1538 "src/sfizz/OpcodeCleanup.cpp" +yy219: yych = *++YYCURSOR; switch (yych) { - case 't': goto yy185; - default: goto yy31; + case 't': goto yy203; + default: goto yy33; } -yy201: +yy220: ++YYCURSOR; yynmatch = 3; yypmatch[2] = yyt1; @@ -1429,56 +1555,76 @@ yy201: opcode = absl::StrCat(group(1), "_", group(2), "1"); goto end_region; } -#line 1433 "src/sfizz/OpcodeCleanup.cpp" -yy203: +#line 1559 "src/sfizz/OpcodeCleanup.cpp" +yy222: yych = *++YYCURSOR; switch (yych) { - case 'g': goto yy210; - default: goto yy31; + case 'g': goto yy233; + default: goto yy33; } -yy204: +yy223: + ++YYCURSOR; + yynmatch = 2; + yypmatch[0] = yyt1; + yypmatch[2] = yyt3; + yypmatch[3] = yyt2; + 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: + yych = *++YYCURSOR; + if (yych <= 0x00) { + yyt2 = YYCURSOR; + goto yy223; + } + goto yy225; +yy227: yych = *++YYCURSOR; switch (yych) { - case 'k': goto yy191; - default: goto yy31; + case 'k': goto yy210; + default: goto yy33; } -yy205: +yy228: yych = *++YYCURSOR; switch (yych) { - case 'c': goto yy211; - default: goto yy31; + case 'c': goto yy234; + default: goto yy33; } -yy206: +yy229: yych = *++YYCURSOR; switch (yych) { - case 's': goto yy212; - default: goto yy31; + case 's': goto yy235; + default: goto yy33; } -yy207: +yy230: yych = *++YYCURSOR; switch (yych) { - case 'i': goto yy213; - default: goto yy31; + case 'i': goto yy236; + default: goto yy33; } -yy208: +yy231: yych = *++YYCURSOR; switch (yych) { - case 'h': goto yy209; - default: goto yy31; + case 'h': goto yy232; + default: goto yy33; } -yy209: +yy232: yych = *++YYCURSOR; switch (yych) { - case 'c': goto yy214; - default: goto yy31; + case 'c': goto yy237; + default: goto yy33; } -yy210: +yy233: yych = *++YYCURSOR; switch (yych) { - case 'r': goto yy215; - default: goto yy31; + case 'r': goto yy238; + default: goto yy33; } -yy211: +yy234: yych = *++YYCURSOR; switch (yych) { case '0': @@ -1492,37 +1638,37 @@ yy211: case '8': case '9': yyt3 = YYCURSOR; - goto yy216; - default: goto yy31; + goto yy239; + default: goto yy33; } -yy212: +yy235: yych = *++YYCURSOR; switch (yych) { - case 'e': goto yy191; - default: goto yy31; + case 'e': goto yy210; + default: goto yy33; } -yy213: +yy236: yych = *++YYCURSOR; switch (yych) { - case 'n': goto yy191; - default: goto yy31; + case 'n': goto yy210; + default: goto yy33; } -yy214: +yy237: yych = *++YYCURSOR; switch (yych) { - case 'c': goto yy218; - default: goto yy31; + case 'c': goto yy241; + default: goto yy33; } -yy215: +yy238: yych = *++YYCURSOR; switch (yych) { - case 'o': goto yy219; - default: goto yy31; + case 'o': goto yy242; + default: goto yy33; } -yy216: +yy239: yych = *++YYCURSOR; switch (yych) { - case 0x00: goto yy220; + case 0x00: goto yy243; case '0': case '1': case '2': @@ -1532,10 +1678,10 @@ yy216: case '6': case '7': case '8': - case '9': goto yy216; - default: goto yy31; + case '9': goto yy239; + default: goto yy33; } -yy218: +yy241: yych = *++YYCURSOR; switch (yych) { case '0': @@ -1549,16 +1695,16 @@ yy218: case '8': case '9': yyt3 = YYCURSOR; - goto yy222; - default: goto yy31; + goto yy245; + default: goto yy33; } -yy219: +yy242: yych = *++YYCURSOR; switch (yych) { - case 'u': goto yy224; - default: goto yy31; + case 'u': goto yy247; + default: goto yy33; } -yy220: +yy243: ++YYCURSOR; yynmatch = 4; yypmatch[2] = yyt1; @@ -1574,11 +1720,11 @@ yy220: opcode = absl::StrCat(group(1), "_", group(2), "_oncc", group(3)); goto end_region; } -#line 1578 "src/sfizz/OpcodeCleanup.cpp" -yy222: +#line 1724 "src/sfizz/OpcodeCleanup.cpp" +yy245: yych = *++YYCURSOR; switch (yych) { - case 0x00: goto yy225; + case 0x00: goto yy248; case '0': case '1': case '2': @@ -1588,16 +1734,16 @@ yy222: case '6': case '7': case '8': - case '9': goto yy222; - default: goto yy31; + case '9': goto yy245; + default: goto yy33; } -yy224: +yy247: yych = *++YYCURSOR; switch (yych) { - case 'p': goto yy227; - default: goto yy31; + case 'p': goto yy250; + default: goto yy33; } -yy225: +yy248: ++YYCURSOR; yynmatch = 4; yypmatch[2] = yyt1; @@ -1613,10 +1759,10 @@ yy225: opcode = absl::StrCat(group(1), "_", group(2), "_oncc", group(3)); goto end_region; } -#line 1617 "src/sfizz/OpcodeCleanup.cpp" -yy227: +#line 1763 "src/sfizz/OpcodeCleanup.cpp" +yy250: yych = *++YYCURSOR; - if (yych >= 0x01) goto yy31; + if (yych >= 0x01) goto yy33; ++YYCURSOR; yynmatch = 1; yypmatch[0] = YYCURSOR - 16; @@ -1626,9 +1772,9 @@ yy227: opcode = "group"; goto end_region; } -#line 1630 "src/sfizz/OpcodeCleanup.cpp" +#line 1776 "src/sfizz/OpcodeCleanup.cpp" } -#line 145 "src/sfizz/OpcodeCleanup.re" +#line 153 "src/sfizz/OpcodeCleanup.re" end_region: diff --git a/src/sfizz/OpcodeCleanup.re b/src/sfizz/OpcodeCleanup.re index fec5f89b..73ca1f4a 100644 --- a/src/sfizz/OpcodeCleanup.re +++ b/src/sfizz/OpcodeCleanup.re @@ -128,16 +128,24 @@ end_generic: goto end_region; } - "fil_" (any) END { - opcode = absl::StrCat("fil1_", group(1)); - goto end_region; - } - "on_" ("hi"|"lo") "cc" (number) END { opcode = absl::StrCat("start_", group(1), "cc", group(2)); goto end_region; } + "fil_" (any) END { + opcode = absl::StrCat("fil1_", group(1)); + goto end_region; + } + "cutoff" ("_" any)? END { + opcode = absl::StrCat("cutoff1", group(1)); + goto end_region; + } + "resonance" ("_" any)? END { + opcode = absl::StrCat("resonance1", group(1)); + goto end_region; + } + * { goto end_region; } diff --git a/tests/OpcodeT.cpp b/tests/OpcodeT.cpp index d4f7959e..733a185c 100644 --- a/tests/OpcodeT.cpp +++ b/tests/OpcodeT.cpp @@ -205,6 +205,12 @@ TEST_CASE("[Opcode] Normalization") // SFZv2 aliases {"on_hicc22", "start_hicc22"}, {"on_locc23", "start_locc23"}, + // Filter SFZv1 + {"fil_foobar", "fil1_foobar"}, + {"cutoff", "cutoff1"}, + {"cutoff_foobar", "cutoff1_foobar"}, + {"resonance", "resonance1"}, + {"resonance_foobar", "resonance1_foobar"}, }; for (auto pair : regionSpecific) { From 3d508e9860e383b12468c92dd9d7c2f27ad2ff30 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Tue, 5 May 2020 03:33:56 +0200 Subject: [PATCH 4/7] Correctly align --- src/sfizz/OpcodeCleanup.re | 42 +++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/sfizz/OpcodeCleanup.re b/src/sfizz/OpcodeCleanup.re index 73ca1f4a..05305bff 100644 --- a/src/sfizz/OpcodeCleanup.re +++ b/src/sfizz/OpcodeCleanup.re @@ -117,34 +117,34 @@ end_generic: "polyphony_group" END { opcode = "group"; goto end_region; - } + } - "gain" ("_" any)? END { - opcode = absl::StrCat("volume", group(1)); - goto end_region; - } - "tune" ("_" any)? END { - opcode = absl::StrCat("pitch", group(1)); - goto end_region; - } + "gain" ("_" any)? END { + opcode = absl::StrCat("volume", group(1)); + goto end_region; + } + "tune" ("_" any)? END { + opcode = absl::StrCat("pitch", group(1)); + goto end_region; + } "on_" ("hi"|"lo") "cc" (number) END { opcode = absl::StrCat("start_", group(1), "cc", group(2)); goto end_region; } - "fil_" (any) END { - opcode = absl::StrCat("fil1_", group(1)); - goto end_region; - } - "cutoff" ("_" any)? END { - opcode = absl::StrCat("cutoff1", group(1)); - goto end_region; - } - "resonance" ("_" any)? END { - opcode = absl::StrCat("resonance1", group(1)); - goto end_region; - } + "fil_" (any) END { + opcode = absl::StrCat("fil1_", group(1)); + goto end_region; + } + "cutoff" ("_" any)? END { + opcode = absl::StrCat("cutoff1", group(1)); + goto end_region; + } + "resonance" ("_" any)? END { + opcode = absl::StrCat("resonance1", group(1)); + goto end_region; + } * { goto end_region; From b02236328da9c6864a92e157b718846bfaaf1d44 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Tue, 5 May 2020 03:47:16 +0200 Subject: [PATCH 5/7] Apply opcode cleanups in the synth --- src/sfizz/Region.cpp | 5 ++++- src/sfizz/Synth.cpp | 7 ++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/sfizz/Region.cpp b/src/sfizz/Region.cpp index 117a6d26..cd6eb044 100644 --- a/src/sfizz/Region.cpp +++ b/src/sfizz/Region.cpp @@ -31,8 +31,10 @@ bool extendIfNecessary(std::vector& vec, unsigned size, unsigned defaultCapac return true; } -bool sfz::Region::parseOpcode(const Opcode& opcode) +bool sfz::Region::parseOpcode(const Opcode& rawOpcode) { + const Opcode opcode = rawOpcode.cleanUp(kOpcodeScopeRegion); + switch (opcode.lettersOnlyHash) { // Sound source: sample playback case hash("sample"): @@ -66,6 +68,7 @@ bool sfz::Region::parseOpcode(const Opcode& opcode) setValueFromOpcode(opcode, offsetRandom, Default::offsetRange); break; case hash("offset_cc&"): + case hash("offset_oncc&"): if (opcode.parameters.back() > config::numCCs) return false; if (auto value = readOpcode(opcode.value, Default::offsetCCRange)) diff --git a/src/sfizz/Synth.cpp b/src/sfizz/Synth.cpp index 66871fcc..e9797e8a 100644 --- a/src/sfizz/Synth.cpp +++ b/src/sfizz/Synth.cpp @@ -236,7 +236,7 @@ void sfz::Synth::handleControlOpcodes(const std::vector& members) } } -void sfz::Synth::handleEffectOpcodes(const std::vector& members) +void sfz::Synth::handleEffectOpcodes(const std::vector& rawMembers) { absl::string_view busName = "main"; @@ -252,6 +252,11 @@ void sfz::Synth::handleEffectOpcodes(const std::vector& members) return *bus; }; + std::vector members; + members.reserve(rawMembers.size()); + for (const Opcode& opcode : rawMembers) + members.push_back(opcode.cleanUp(kOpcodeScopeEffect)); + for (const Opcode& opcode : members) { switch (opcode.lettersOnlyHash) { case hash("bus"): From 4460114b3bd550cc8865cb560488da2ed02e1695 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Tue, 5 May 2020 04:02:51 +0200 Subject: [PATCH 6/7] Simplify region opcode handling after normalizing --- src/sfizz/Region.cpp | 153 +++++++++++++++---------------------------- 1 file changed, 54 insertions(+), 99 deletions(-) diff --git a/src/sfizz/Region.cpp b/src/sfizz/Region.cpp index cd6eb044..965b9745 100644 --- a/src/sfizz/Region.cpp +++ b/src/sfizz/Region.cpp @@ -67,8 +67,7 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode) case hash("offset_random"): setValueFromOpcode(opcode, offsetRandom, Default::offsetRange); break; - case hash("offset_cc&"): - case hash("offset_oncc&"): + case hash("offset_oncc&"): // also offset_cc& if (opcode.parameters.back() > config::numCCs) return false; if (auto value = readOpcode(opcode.value, Default::offsetCCRange)) @@ -80,8 +79,7 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode) case hash("count"): setValueFromOpcode(opcode, sampleCount, Default::sampleCountRange); break; - case hash("loopmode"): // fallthrough - case hash("loop_mode"): + case hash("loop_mode"): // also loopmode switch (hash(opcode.value)) { case hash("no_loop"): loopMode = SfzLoopMode::no_loop; @@ -99,12 +97,10 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode) DBG("Unkown loop mode:" << std::string(opcode.value)); } break; - case hash("loopend"): // fallthrough - case hash("loop_end"): + case hash("loop_end"): // also loopend setRangeEndFromOpcode(opcode, loopRange, Default::loopRange); break; - case hash("loopstart"): // fallthrough - case hash("loop_start"): + case hash("loop_start"): // also loopstart setRangeStartFromOpcode(opcode, loopRange, Default::loopRange); break; @@ -124,15 +120,13 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode) break; // Instrument settings: voice lifecycle - case hash("group"): // fallthrough - case hash("polyphony_group"): + case hash("group"): // also polyphony_group setValueFromOpcode(opcode, group, Default::groupRange); break; - case hash("offby"): // fallthrough - case hash("off_by"): + case hash("off_by"): // also offby setValueFromOpcode(opcode, offBy, Default::groupRange); break; - case hash("off_mode"): + case hash("off_mode"): // also offmode switch (hash(opcode.value)) { case hash("fast"): offMode = SfzOffMode::fast; @@ -295,15 +289,13 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode) DBG("Unknown trigger mode: " << std::string(opcode.value)); } break; - case hash("on_locc&"): // fallthrough - case hash("start_locc&"): + case hash("start_locc&"): // also on_locc& if (opcode.parameters.back() >= config::numCCs) return false; if (auto value = readOpcode(opcode.value, Default::midi7Range)) ccTriggers[opcode.parameters.back()].setStart(normalizeCC(*value)); break; - case hash("on_hicc&"): // fallthrough - case hash("start_hicc&"): + case hash("start_hicc&"): // also on_hicc& if (opcode.parameters.back() >= config::numCCs) return false; if (auto value = readOpcode(opcode.value, Default::midi7Range)) @@ -311,30 +303,28 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode) break; // Performance parameters: amplifier - case hash("volume"): + case hash("volume"): // also gain setValueFromOpcode(opcode, volume, Default::volumeRange); break; - case hash("volume_curvecc&"): + case hash("volume_curvecc&"): // also gain_curvecc& if (opcode.parameters.back() >= config::numCCs) return false; if (auto value = readOpcode(opcode.value, Default::curveCCRange)) volumeCC[opcode.parameters.back()].curve = *value; break; - case hash("volume_stepcc&"): + case hash("volume_stepcc&"): // also gain_stepcc& if (opcode.parameters.back() >= config::numCCs) return false; if (auto value = readOpcode(opcode.value, Default::volumeStepRange)) volumeCC[opcode.parameters.back()].step = *value; break; - case hash("volume_smoothcc&"): + case hash("volume_smoothcc&"): // also gain_smoothcc& if (opcode.parameters.back() >= config::numCCs) return false; if (auto value = readOpcode(opcode.value, Default::smoothCCRange)) volumeCC[opcode.parameters.back()].smooth = *value; break; - case hash("gain_cc&"): - case hash("gain_oncc&"): // fallthrough - case hash("volume_oncc&"): + case hash("volume_oncc&"): // also gain_oncc& if (opcode.parameters.back() >= config::numCCs) return false; if (auto value = readOpcode(opcode.value, Default::volumeCCRange)) @@ -362,8 +352,7 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode) if (auto value = readOpcode(opcode.value, Default::smoothCCRange)) amplitudeCC[opcode.parameters.back()].smooth = *value; break; - case hash("amplitude_cc&"): // fallthrough - case hash("amplitude_oncc&"): + case hash("amplitude_oncc&"): // also amplitude_cc& if (opcode.parameters.back() >= config::numCCs) return false; if (auto value = readOpcode(opcode.value, Default::amplitudeRange)) @@ -391,8 +380,7 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode) if (auto value = readOpcode(opcode.value, Default::smoothCCRange)) panCC[opcode.parameters.back()].smooth = *value; break; - case hash("pan_cc&"): - case hash("pan_oncc&"): + case hash("pan_oncc&"): // also pan_cc& if (opcode.parameters.back() >= config::numCCs) return false; if (auto value = readOpcode(opcode.value, Default::panCCRange)) @@ -420,8 +408,7 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode) if (auto value = readOpcode(opcode.value, Default::smoothCCRange)) positionCC[opcode.parameters.back()].smooth = *value; break; - case hash("position_cc&"): // fallthrough - case hash("position_oncc&"): + case hash("position_oncc&"): // also position_cc& if (opcode.parameters.back() >= config::numCCs) return false; if (auto value = readOpcode(opcode.value, Default::positionCCRange)) @@ -570,8 +557,7 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode) break; // Performance parameters: filters - case hash("cutoff"): // fallthrough - case hash("cutoff&"): + case hash("cutoff&"): // also cutoff { const auto filterIndex = opcode.parameters.empty() ? 0 : (opcode.parameters.back() - 1); if (!extendIfNecessary(filters, filterIndex + 1, Default::numFilters)) @@ -579,8 +565,7 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode) setValueFromOpcode(opcode, filters[filterIndex].cutoff, Default::filterCutoffRange); } break; - case hash("resonance"): // fallthrough - case hash("resonance&"): + case hash("resonance&"): // also resonance { const auto filterIndex = opcode.parameters.empty() ? 0 : (opcode.parameters.back() - 1); if (!extendIfNecessary(filters, filterIndex + 1, Default::numFilters)) @@ -588,12 +573,9 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode) setValueFromOpcode(opcode, filters[filterIndex].resonance, Default::filterResonanceRange); } break; - case hash("cutoff_oncc&"): - case hash("cutoff_cc&"): - case hash("cutoff&_oncc&"): // fallthrough - case hash("cutoff&_cc&"): + case hash("cutoff&_oncc&"): // also cutoff_oncc&, cutoff_cc&, cutoff&_cc& { - const auto filterIndex = opcode.parameters.size() == 1 ? 0 : (opcode.parameters.front() - 1); + const auto filterIndex = opcode.parameters.front() - 1; if (!extendIfNecessary(filters, filterIndex + 1, Default::numFilters)) return false; @@ -604,12 +586,9 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode) ); } break; - case hash("resonance&_oncc&"): - case hash("resonance&_cc&"): - case hash("resonance_oncc&"): // fallthrough - case hash("resonance_cc&"): + case hash("resonance&_oncc&"): // also resonance_oncc&, resonance_cc&, resonance&_cc& { - const auto filterIndex = opcode.parameters.size() == 1 ? 0 : (opcode.parameters.front() - 1); + const auto filterIndex = opcode.parameters.front() - 1; if (!extendIfNecessary(filters, filterIndex + 1, Default::numFilters)) return false; @@ -620,60 +599,54 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode) ); } break; - case hash("fil_keytrack"): // fallthrough - case hash("fil&_keytrack"): + case hash("fil&_keytrack"): // also fil_keytrack { - const auto filterIndex = opcode.parameters.empty() ? 0 : (opcode.parameters.front() - 1); + const auto filterIndex = opcode.parameters.front() - 1; if (!extendIfNecessary(filters, filterIndex + 1, Default::numFilters)) return false; setValueFromOpcode(opcode, filters[filterIndex].keytrack, Default::filterKeytrackRange); } break; - case hash("fil_keycenter"): // fallthrough - case hash("fil&_keycenter"): + case hash("fil&_keycenter"): // also fil_keycenter { - const auto filterIndex = opcode.parameters.empty() ? 0 : (opcode.parameters.front() - 1); + const auto filterIndex = opcode.parameters.front() - 1; if (!extendIfNecessary(filters, filterIndex + 1, Default::numFilters)) return false; setValueFromOpcode(opcode, filters[filterIndex].keycenter, Default::keyRange); } break; - case hash("fil_veltrack"): // fallthrough - case hash("fil&_veltrack"): + case hash("fil&_veltrack"): // also fil_veltrack { - const auto filterIndex = opcode.parameters.empty() ? 0 : (opcode.parameters.front() - 1); + const auto filterIndex = opcode.parameters.front() - 1; if (!extendIfNecessary(filters, filterIndex + 1, Default::numFilters)) return false; setValueFromOpcode(opcode, filters[filterIndex].veltrack, Default::filterVeltrackRange); } break; - case hash("fil_random"): // fallthrough - case hash("fil&_random"): + case hash("fil&_random"): // also fil_random { - const auto filterIndex = opcode.parameters.empty() ? 0 : (opcode.parameters.front() - 1); + const auto filterIndex = opcode.parameters.front() - 1; if (!extendIfNecessary(filters, filterIndex + 1, Default::numFilters)) return false; setValueFromOpcode(opcode, filters[filterIndex].random, Default::filterRandomRange); } break; - case hash("fil_gain"): // fallthrough - case hash("fil&_gain"): + case hash("fil&_gain"): // also fil_gain { - const auto filterIndex = opcode.parameters.empty() ? 0 : (opcode.parameters.front() - 1); + const auto filterIndex = opcode.parameters.front() - 1; if (!extendIfNecessary(filters, filterIndex + 1, Default::numFilters)) return false; setValueFromOpcode(opcode, filters[filterIndex].gain, Default::filterGainRange); } break; - case hash("fil_gaincc&"): // fallthrough - case hash("fil&_gaincc&"): + case hash("fil&_gain_oncc&"): // also fil_gain_oncc& { - const auto filterIndex = opcode.parameters.size() == 1 ? 0 : (opcode.parameters.front() - 1); + const auto filterIndex = opcode.parameters.front() - 1; if (!extendIfNecessary(filters, filterIndex + 1, Default::numFilters)) return false; @@ -684,10 +657,9 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode) ); } break; - case hash("fil_type"): // fallthrough - case hash("fil&_type"): + case hash("fil&_type"): // also fil_type, filtype { - const auto filterIndex = opcode.parameters.empty() ? 0 : (opcode.parameters.front() - 1); + const auto filterIndex = opcode.parameters.front() - 1; if (!extendIfNecessary(filters, filterIndex + 1, Default::numFilters)) return false; @@ -713,8 +685,7 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode) setValueFromOpcode(opcode, equalizers[eqNumber - 1].bandwidth, Default::eqBandwidthRange); } break; - case hash("eq&_bw_oncc&"): // fallthrough - case hash("eq&_bwcc&"): + case hash("eq&_bw_oncc&"): // also eq&_bwcc& { const auto eqNumber = opcode.parameters.front(); if (eqNumber == 0) @@ -735,8 +706,7 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode) setValueFromOpcode(opcode, equalizers[eqNumber - 1].frequency, Default::eqFrequencyRange); } break; - case hash("eq&_freq_oncc&"): // fallthrough - case hash("eq&_freqcc&"): + case hash("eq&_freq_oncc&"): // also eq&_freqcc& { const auto eqNumber = opcode.parameters.front(); if (eqNumber == 0) @@ -770,8 +740,7 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode) setValueFromOpcode(opcode, equalizers[eqNumber - 1].gain, Default::eqGainRange); } break; - case hash("eq&_gain_oncc&"): // fallthrough - case hash("eq&_gaincc&"): + case hash("eq&_gain_oncc&"): // also eq&_gaincc& { const auto eqNumber = opcode.parameters.front(); if (eqNumber == 0) @@ -830,44 +799,37 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode) case hash("transpose"): setValueFromOpcode(opcode, transpose, Default::transposeRange); break; - case hash("tune"): // fallthrough - case hash("pitch"): + case hash("pitch"): // also tune setValueFromOpcode(opcode, tune, Default::tuneRange); break; - case hash("pitch_curvecc&"): // fallthrough - case hash("tune_curvecc&"): + case hash("pitch_curvecc&"): // also tune_curvecc& if (opcode.parameters.back() >= config::numCCs) return false; if (auto value = readOpcode(opcode.value, Default::curveCCRange)) tuneCC[opcode.parameters.back()].curve = *value; break; - case hash("pitch_stepcc&"): // fallthrough - case hash("tune_stepcc&"): + case hash("pitch_stepcc&"): // also tune_stepcc& if (opcode.parameters.back() >= config::numCCs) return false; if (auto value = readOpcode(opcode.value, Default::tuneStepRange)) tuneCC[opcode.parameters.back()].step = *value; break; - case hash("pitch_smoothcc&"): // fallthrough - case hash("tune_smoothcc&"): + case hash("pitch_smoothcc&"): // also tune_smoothcc& if (opcode.parameters.back() >= config::numCCs) return false; if (auto value = readOpcode(opcode.value, Default::smoothCCRange)) tuneCC[opcode.parameters.back()].smooth = *value; break; - case hash("tune_cc&"): - case hash("tune_oncc&"): - case hash("pitch_cc&"): - case hash("pitch_oncc&"): + case hash("pitch_oncc&"): // also pitch_cc&, tune_cc&, tune_oncc& if (opcode.parameters.back() >= config::numCCs) return false; if (auto value = readOpcode(opcode.value, Default::tuneCCRange)) tuneCC[opcode.parameters.back()].value = *value; break; - case hash("bend_up"): + case hash("bend_up"): // also bendup setValueFromOpcode(opcode, bendUp, Default::bendBoundRange); break; - case hash("bend_down"): + case hash("bend_down"): // also benddown setValueFromOpcode(opcode, bendDown, Default::bendBoundRange); break; case hash("bend_step"): @@ -926,32 +888,25 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode) return false; // Was not vel2... setValueFromOpcode(opcode, amplitudeEG.vel2sustain, Default::egOnCCPercentRange); break; - case hash("ampeg_attackcc&"): // fallthrough - case hash("ampeg_attack_oncc&"): + case hash("ampeg_attack_oncc&"): // also ampeg_attackcc& setCCPairFromOpcode(opcode, amplitudeEG.ccAttack, Default::egOnCCTimeRange); break; - case hash("ampeg_decaycc&"): // fallthrough - case hash("ampeg_decay_oncc&"): + case hash("ampeg_decay_oncc&"): // also ampeg_decaycc& setCCPairFromOpcode(opcode, amplitudeEG.ccDecay, Default::egOnCCTimeRange); break; - case hash("ampeg_delaycc&"): // fallthrough - case hash("ampeg_delay_oncc&"): + case hash("ampeg_delay_oncc&"): // also ampeg_delaycc& setCCPairFromOpcode(opcode, amplitudeEG.ccDelay, Default::egOnCCTimeRange); break; - case hash("ampeg_holdcc&"): // fallthrough - case hash("ampeg_hold_oncc&"): + case hash("ampeg_hold_oncc&"): // also ampeg_holdcc& setCCPairFromOpcode(opcode, amplitudeEG.ccHold, Default::egOnCCTimeRange); break; - case hash("ampeg_releasecc&"): // fallthrough - case hash("ampeg_release_oncc&"): + case hash("ampeg_release_oncc&"): // also ampeg_releasecc& setCCPairFromOpcode(opcode, amplitudeEG.ccRelease, Default::egOnCCTimeRange); break; - case hash("ampeg_startcc&"): // fallthrough - case hash("ampeg_start_oncc&"): + case hash("ampeg_start_oncc&"): // also ampeg_startcc& setCCPairFromOpcode(opcode, amplitudeEG.ccStart, Default::egOnCCPercentRange); break; - case hash("ampeg_sustaincc&"): // fallthrough - case hash("ampeg_sustain_oncc&"): + case hash("ampeg_sustain_oncc&"): // also ampeg_sustaincc& setCCPairFromOpcode(opcode, amplitudeEG.ccSustain, Default::egOnCCPercentRange); break; From 35b757b58225d86e7a8794e9f257f2c32052b9a9 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Tue, 5 May 2020 04:21:50 +0200 Subject: [PATCH 7/7] Remove fil_gaincc, not part of ARIA (verified) --- tests/RegionT.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/RegionT.cpp b/tests/RegionT.cpp index fa73bd51..bce542c1 100644 --- a/tests/RegionT.cpp +++ b/tests/RegionT.cpp @@ -1199,7 +1199,7 @@ TEST_CASE("[Region] Parsing opcodes") region.parseOpcode({ "resonance3_cc24", "10" }); REQUIRE(region.filters[2].resonanceCC.contains(24)); REQUIRE(region.filters[2].resonanceCC[24] == 10); - region.parseOpcode({ "fil2_gaincc12", "-50" }); + region.parseOpcode({ "fil2_gain_oncc12", "-50" }); REQUIRE(region.filters[1].gainCC.contains(12)); REQUIRE(region.filters[1].gainCC[12] == -50.0f);