gearmulator

Emulation of classic VA synths of the late 90s/2000s that are based on Motorola 56300 family DSPs
Log | Files | Refs | Submodules | README | LICENSE

commit 9fe9182dc4fcbb71218d400af0022bc864073d62
parent f8859a2997e8699048b5b1c855249055ea523931
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date:   Mon, 14 Feb 2022 00:25:15 +0100

finish json parsing + add compare debug code to validate results

Diffstat:
Msource/jucePlugin/CMakeLists.txt | 4++++
Msource/jucePlugin/VirusParameter.h | 3++-
Msource/jucePlugin/VirusParameterDescription.cpp | 170++++++++++++++++++++++++++++++++++++++++----------------------------------------
Asource/jucePlugin/VirusParameterDescriptions.cpp | 317+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asource/jucePlugin/VirusParameterDescriptions.h | 22++++++++++++++++++++++
Msource/jucePlugin/parameterDescriptions_C.json | 318++++++++++++++++++++++++++++++++++++++++---------------------------------------
6 files changed, 593 insertions(+), 241 deletions(-)

diff --git a/source/jucePlugin/CMakeLists.txt b/source/jucePlugin/CMakeLists.txt @@ -29,6 +29,7 @@ juce_add_plugin(jucePlugin ) target_sources(jucePlugin PRIVATE + parameterDescriptions_C.json PluginEditor.cpp PluginEditor.h PluginProcessor.cpp @@ -60,6 +61,8 @@ PRIVATE VirusParameterBinding.h VirusParameterDescription.cpp VirusParameterDescription.h + VirusParameterDescriptions.cpp + VirusParameterDescriptions.h version.h ) @@ -93,6 +96,7 @@ juce_add_binary_data(jucePlugin_BinaryData "assets/knobs/GenBlue_70x70_100.png" "assets/knobs/GenRed_70x70_100.png" "assets/knobs/multi_18x18_100.png" + "parameterDescriptions_C.json" ) target_compile_definitions(jucePlugin diff --git a/source/jucePlugin/VirusParameter.h b/source/jucePlugin/VirusParameter.h @@ -43,7 +43,8 @@ namespace Virus bool isDiscrete; bool isBool; bool isBipolar; - }; + std::string toText; + }; Parameter(Controller &, const Description desc, uint8_t partNum = 0x40); diff --git a/source/jucePlugin/VirusParameterDescription.cpp b/source/jucePlugin/VirusParameterDescription.cpp @@ -1164,7 +1164,7 @@ namespace Virus const std::initializer_list<Parameter::Description> g_paramsDescription = { - {Parameter::Page::A, Parameter::Class::PERFORMANCE_CONTROLLER, 0, "Bank Select", {0, 3 + 26}, numToBank, {}, false, true, false}, // The Virus TI contains 4 banks of RAM, followed by 26 banks of ROM + {Parameter::Page::A, Parameter::Class::PERFORMANCE_CONTROLLER, 0, "Version", {0, 12}, numToBank, {}, false, true, false}, {Parameter::Page::A, Parameter::Class::PERFORMANCE_CONTROLLER, 1, "Modulation Wheel", {0,127}, {},{}, false, false, false}, {Parameter::Page::A, Parameter::Class::PERFORMANCE_CONTROLLER, 2, "Breath Controller", {0,127}, {},{}, false, false, false}, {Parameter::Page::A, Parameter::Class::PERFORMANCE_CONTROLLER, 3, "Contr 3", {0,127}, {},{}, false, false, false}, @@ -1196,7 +1196,7 @@ namespace Virus {Parameter::Page::A, Parameter::Class::SOUNDBANK_A, 29, "Osc2 Filt Env Amt", {0,127}, paramTo7bitSigned, textTo7bitSigned, true, false, false, true}, {Parameter::Page::A, Parameter::Class::SOUNDBANK_A, 30, "FM Filt Env Amt", {0,127}, paramTo7bitSigned, textTo7bitSigned, true, false, false, true}, {Parameter::Page::A, Parameter::Class::SOUNDBANK_A, 31, "Osc2 Keyfollow", {0,127}, paramTo7bitSigned, textTo7bitSigned, true, false, false, true}, - {Parameter::Page::A, Parameter::Class::PERFORMANCE_CONTROLLER, 32, "Bank Select", {0, 3 + 26}, numToBank,{}, false, true, false}, + {Parameter::Page::A, Parameter::Class::PERFORMANCE_CONTROLLER, 32, "Bank Select", {0, 8}, numToBank,{}, false, true, false}, {Parameter::Page::A, Parameter::Class::SOUNDBANK_A, 33, "Osc Balance", {0,127}, paramTo7bitSigned, textTo7bitSigned, true, false, false, true}, {Parameter::Page::A, Parameter::Class::SOUNDBANK_A, 34, "Suboscillator Volume", {0,127}, {},{}, true, false, false}, {Parameter::Page::A, Parameter::Class::SOUNDBANK_A, 35, "Suboscillator Shape", {0,1}, [](float v, const Parameter::Description&) { return juce::roundToInt(v) == 0 ? "Square" : "Triangle"; },{}, true, true, true}, @@ -1443,90 +1443,90 @@ namespace Virus {Parameter::Page::C, Parameter::Class::GLOBAL, 127, "Master Volume", {0,127}, {},{}, false, false, false}, // UNDEFINED / UNUSED / STUBS - {Parameter::Page::A, Parameter::Class::UNDEFINED, 92, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::A, Parameter::Class::UNDEFINED, 95, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::A, Parameter::Class::UNDEFINED, 96, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::A, Parameter::Class::UNDEFINED, 111, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::A, Parameter::Class::UNDEFINED, 120, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::A, Parameter::Class::UNDEFINED, 121, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::A, Parameter::Class::UNDEFINED, 124, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::A, Parameter::Class::UNDEFINED, 125, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::A, Parameter::Class::UNDEFINED, 126, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::A, Parameter::Class::UNDEFINED, 127, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::B, Parameter::Class::UNDEFINED, 0, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::B, Parameter::Class::UNDEFINED, 14, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::B, Parameter::Class::UNDEFINED, 15, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::B, Parameter::Class::UNDEFINED, 22, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::B, Parameter::Class::UNDEFINED, 23, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::B, Parameter::Class::UNDEFINED, 24, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::B, Parameter::Class::UNDEFINED, 29, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::B, Parameter::Class::UNDEFINED, 37, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::B, Parameter::Class::UNDEFINED, 40, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::B, Parameter::Class::UNDEFINED, 53, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::B, Parameter::Class::UNDEFINED, 69, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::B, Parameter::Class::UNDEFINED, 83, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::B, Parameter::Class::UNDEFINED, 91, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::B, Parameter::Class::UNDEFINED, 111, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::B, Parameter::Class::UNDEFINED, 123, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::B, Parameter::Class::UNDEFINED, 124, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 0, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 1, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 2, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 3, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 4, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 15, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 16, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 17, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 18, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 19, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 20, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 21, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 23, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 24, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 25, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 26, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 27, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 28, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 29, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 30, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 76, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 79, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 80, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 81, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 82, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 83, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 84, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 88, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 89, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 100, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 101, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 102, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 103, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 104, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 119, {}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::A, Parameter::Class::UNDEFINED, 92, {"Undefined92"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::A, Parameter::Class::UNDEFINED, 95, {"Undefined95"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::A, Parameter::Class::UNDEFINED, 96, {"Undefined96"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::A, Parameter::Class::UNDEFINED, 111, {"Undefined111"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::A, Parameter::Class::UNDEFINED, 120, {"Undefined120"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::A, Parameter::Class::UNDEFINED, 121, {"Undefined121"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::A, Parameter::Class::UNDEFINED, 124, {"Undefined124"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::A, Parameter::Class::UNDEFINED, 125, {"Undefined125"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::A, Parameter::Class::UNDEFINED, 126, {"Undefined126"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::A, Parameter::Class::UNDEFINED, 127, {"Undefined127"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::B, Parameter::Class::UNDEFINED, 0, {"Undefined0"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::B, Parameter::Class::UNDEFINED, 14, {"Undefined14"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::B, Parameter::Class::UNDEFINED, 15, {"Undefined15"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::B, Parameter::Class::UNDEFINED, 22, {"Undefined22"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::B, Parameter::Class::UNDEFINED, 23, {"Undefined23"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::B, Parameter::Class::UNDEFINED, 24, {"Undefined24"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::B, Parameter::Class::UNDEFINED, 29, {"Undefined29"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::B, Parameter::Class::UNDEFINED, 37, {"Undefined37"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::B, Parameter::Class::UNDEFINED, 40, {"Undefined40"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::B, Parameter::Class::UNDEFINED, 53, {"Undefined53"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::B, Parameter::Class::UNDEFINED, 69, {"Undefined69"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::B, Parameter::Class::UNDEFINED, 83, {"Undefined83"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::B, Parameter::Class::UNDEFINED, 91, {"Undefined91"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::B, Parameter::Class::UNDEFINED, 111, {"Undefined111"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::B, Parameter::Class::UNDEFINED, 123, {"Undefined123"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::B, Parameter::Class::UNDEFINED, 124, {"Undefined124"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 0, {"Undefined0"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 1, {"Undefined1"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 2, {"Undefined2"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 3, {"Undefined3"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 4, {"Undefined4"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 15, {"Undefined15"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 16, {"Undefined16"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 17, {"Undefined17"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 18, {"Undefined18"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 19, {"Undefined19"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 20, {"Undefined20"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 21, {"Undefined21"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 23, {"Undefined23"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 24, {"Undefined24"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 25, {"Undefined25"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 26, {"Undefined26"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 27, {"Undefined27"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 28, {"Undefined28"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 29, {"Undefined29"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 30, {"Undefined30"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 76, {"Undefined76"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 79, {"Undefined79"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 80, {"Undefined80"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 81, {"Undefined81"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 82, {"Undefined82"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 83, {"Undefined83"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 84, {"Undefined84"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 88, {"Undefined88"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 89, {"Undefined89"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 100, {"Undefined100"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 101, {"Undefined101"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 102, {"Undefined102"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 103, {"Undefined103"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 104, {"Undefined104"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 119, {"Undefined119"}, {0,127}, {},{}, false, false, false}, // Text Chars / Unused - {Parameter::Page::B, Parameter::Class::UNDEFINED, 110, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::B, Parameter::Class::UNDEFINED, 111, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::B, Parameter::Class::UNDEFINED, 112, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::B, Parameter::Class::UNDEFINED, 113, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::B, Parameter::Class::UNDEFINED, 114, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::B, Parameter::Class::UNDEFINED, 115, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::B, Parameter::Class::UNDEFINED, 116, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::B, Parameter::Class::UNDEFINED, 117, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::B, Parameter::Class::UNDEFINED, 118, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::B, Parameter::Class::UNDEFINED, 119, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::B, Parameter::Class::UNDEFINED, 120, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::B, Parameter::Class::UNDEFINED, 121, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 5, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 6, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 7, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 8, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 9, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 10, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 11, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 12, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 13, {}, {0,127}, {},{}, false, false, false}, - {Parameter::Page::C, Parameter::Class::UNDEFINED, 14, {}, {0,127}, {},{}, false, false, false} + {Parameter::Page::B, Parameter::Class::UNDEFINED, 110, {"Undefined110"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::B, Parameter::Class::UNDEFINED, 111, {"Undefined111"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::B, Parameter::Class::UNDEFINED, 112, {"Undefined112"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::B, Parameter::Class::UNDEFINED, 113, {"Undefined113"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::B, Parameter::Class::UNDEFINED, 114, {"Undefined114"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::B, Parameter::Class::UNDEFINED, 115, {"Undefined115"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::B, Parameter::Class::UNDEFINED, 116, {"Undefined116"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::B, Parameter::Class::UNDEFINED, 117, {"Undefined117"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::B, Parameter::Class::UNDEFINED, 118, {"Undefined118"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::B, Parameter::Class::UNDEFINED, 119, {"Undefined119"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::B, Parameter::Class::UNDEFINED, 120, {"Undefined120"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::B, Parameter::Class::UNDEFINED, 121, {"Undefined121"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 5, {"Undefined5"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 6, {"Undefined6"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 7, {"Undefined7"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 8, {"Undefined8"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 9, {"Undefined9"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 10, {"Undefined10"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 11, {"Undefined11"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 12, {"Undefined12"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 13, {"Undefined13"}, {0,127}, {},{}, false, false, false}, + {Parameter::Page::C, Parameter::Class::UNDEFINED, 14, {"Undefined14"}, {0,127}, {},{}, false, false, false} // TODO: B51-52 shortname?!? B54-B55 (same name?!) }; } \ No newline at end of file diff --git a/source/jucePlugin/VirusParameterDescriptions.cpp b/source/jucePlugin/VirusParameterDescriptions.cpp @@ -0,0 +1,317 @@ +#include "VirusParameterDescriptions.h" + +#include <cassert> + +#include "VirusParameter.h" +#include "VirusParameterDescription.h" + +#include "dsp56kEmu/logging.h" + +namespace Virus +{ + ParameterDescriptions::ParameterDescriptions(const std::string& _jsonString) + { + const auto err = loadJson(_jsonString); + LOG(err); + } + + std::string removeComments(std::string _json) + { + auto removeBlock = [&](const char* _begin, const char* _end) + { + const auto pos = _json.find(_begin); + + if (pos == std::string::npos) + return false; + + const auto end = _json.find(_end, pos + 1); + + if (end != std::string::npos) + _json.erase(pos, end - pos - 1); + else + _json.erase(pos); + + return true; + }; + + while (removeBlock("//", "\n") || removeBlock("/*", "*/")) + { + } + + return _json; + } + + std::string ParameterDescriptions::loadJson(const std::string& _jsonString) + { + // juce' JSON parser doesn't like JSON5-style comments + const auto jsonString = removeComments(_jsonString); + + juce::var json; + + const auto error = juce::JSON::parse(juce::String(jsonString), json); + + if (error.failed()) + return std::string("Failed to parse JSON: ") + std::string(error.getErrorMessage().toUTF8()); + + const auto paramDescDefaults = json["parameterdescriptiondefaults"].getDynamicObject(); + const auto defaultProperties = paramDescDefaults ? paramDescDefaults->getProperties() : juce::NamedValueSet(); + const auto paramDescs = json["parameterdescriptions"]; + + const auto descsArray = paramDescs.getArray(); + + if (descsArray == nullptr) + return "Parameter descriptions are empty"; + + { + const auto valueLists = json["valuelists"]; + + auto* entries = valueLists.getDynamicObject(); + + if (!entries) + return "value lists are not defined"; + + auto entryProps = entries->getProperties(); + + for(int i=0; i<entryProps.size(); ++i) + { + const auto key = std::string(entryProps.getName(i).toString().toUTF8()); + const auto values = entryProps.getValueAt(i).getArray(); + + if(m_valueList.find(key) != m_valueList.end()) + return "value list " + key + " is defined twice"; + + if(!values || values->isEmpty()) + return std::string("value list ") + key + " is not a valid array of strings"; + + std::vector<std::string> stringList; + stringList.reserve(values->size()); + + for (auto&& value : *values) + stringList.push_back(static_cast<std::string>(value.toString().toUTF8())); + + m_valueList.insert(std::make_pair(key, stringList)); + } + } + + std::stringstream errors; + + const auto& descs = *descsArray; + + for (int i = 0; i < descs.size(); ++i) + { + const auto& desc = descs[i].getDynamicObject(); + const auto props = desc->getProperties(); + + if (props.isEmpty()) + { + errors << "Parameter desc " << i << " has no properties defined" << std::endl; + continue; + } + + const auto name = props["name"].toString(); + + if (name.isEmpty()) + { + errors << "Parameter desc " << i << " doesn't have a name" << std::endl; + continue; + } + + auto readProperty = [&](const char* _key) + { + auto result = props[_key]; + if (!result.isVoid()) + return result; + result = defaultProperties[_key]; + if (result.isVoid()) + errors << "Property " << _key << " not found for parameter description " << name << " and no default provided" << std::endl; + return result; + }; + + auto readPropertyString = [&](const char* _key) + { + const auto res = readProperty(_key); + + if(!res.isString()) + errors << "Property " << _key << " of parameter desc " << name << " is not of type string" << std::endl; + + return std::string(res.toString().toUTF8()); + }; + + auto readPropertyInt = [&](const char* _key) + { + const auto res = readProperty(_key); + + if (!res.isInt()) + errors << "Property " << _key << " of parameter desc " << name << " is not of type int " << std::endl; + + return static_cast<int>(res); + }; + + auto readPropertyBool = [&](const char* _key) + { + const auto res = readProperty(_key); + + if (res.isInt()) + return static_cast<int>(res) != 0; + if (res.isBool()) + return static_cast<bool>(res); + + errors << "Property " << _key << " of parameter desc " << name << " is not of type bool " << std::endl; + + return static_cast<bool>(res); + }; + + const auto minValue = readPropertyInt("min"); + const auto maxValue = readPropertyInt("max"); + + if (minValue < 0 || minValue > 127) + { + errors << name << ": min value for parameter desc " << name << " must be in range 0-127 but min is set to " << minValue << std::endl; + continue; + } + if(maxValue < 0 || maxValue > 127) + { + errors << name << ": max value for parameter desc " << name << " must be in range 0-127 but max is set to " << maxValue << std::endl; + continue; + } + if (maxValue < minValue) + { + errors << name << ": max value must be larger than min value but min is " << minValue << ", max is " << maxValue << std::endl; + continue; + } + + const auto valueList = readPropertyString("toText"); + + const auto it = m_valueList.find(valueList); + if(it == m_valueList.end()) + { + errors << name << ": Value list " << valueList << " not found" << std::endl; + continue; + } + + const auto& list = *it; + + if((maxValue - minValue + 1) > static_cast<int>(list.second.size())) + { + errors << name << ": value list " << valueList << " contains only " << list.second.size() << " entries but parameter range is " << minValue << "-" << maxValue << std::endl; + } + + Parameter::Description d; + + d.name = name; + + d.isPublic = readPropertyBool("isPublic"); + d.isDiscrete = readPropertyBool("isDiscrete"); + d.isBool = readPropertyBool("isBool"); + d.isBipolar = readPropertyBool("isBipolar"); + + d.toText = valueList; + d.index = readPropertyInt("index"); + + d.range.setStart(minValue); + d.range.setEnd(maxValue); + + { + d.classFlags = 0; + + const auto classFlags = readPropertyString("class"); + + std::vector<std::string> flags; + size_t off = 0; + + while (true) + { + const auto pos = classFlags.find('|', off); + + if(pos == std::string::npos) + { + flags.push_back(classFlags.substr(off)); + break; + } + + flags.push_back(classFlags.substr(off, pos - off)); + off = pos + 1; + } + + for (const auto & flag : flags) + { + if (flag == "Undefined") + d.classFlags |= Parameter::UNDEFINED; + else if (flag == "Global") + d.classFlags |= Parameter::GLOBAL; + else if (flag == "PerformanceController") + d.classFlags |= Parameter::PERFORMANCE_CONTROLLER; + else if (flag == "SoundbankA") + d.classFlags |= Parameter::SOUNDBANK_A; + else if (flag == "SoundbankB") + d.classFlags |= Parameter::SOUNDBANK_B; + else if (flag == "MultiOrSingle") + d.classFlags |= Parameter::MULTI_OR_SINGLE; + else if (flag == "Multi") + d.classFlags |= Parameter::MULTI_PARAM; + else if (flag == "NonPartSensitive") + d.classFlags |= Parameter::NON_PART_SENSITIVE; + else if (flag == "BankProgramChangeParamBankSelect") + d.classFlags |= Parameter::BANK_PROGRAM_CHANGE_PARAM_BANK_SELECT; + else if (flag == "VirusC") + d.classFlags |= Parameter::VIRUS_C; + else + errors << "Class " << flag << " is unknown" << std::endl; + } + } + { + const auto page = readPropertyString("page"); + + if (page.size() != 1) + { + errors << name << ": Page " << page << " is an invalid value" << std::endl; + continue; + } + + switch (page[0]) + { + case 'A': d.page = Parameter::A; break; + case 'B': d.page = Parameter::B; break; + case 'C': d.page = Parameter::C; break; + default: + errors << name << ": Page " << page << " is an invalid value" << std::endl; + break; + } + } + + m_descriptions.push_back(d); + } + + assert(m_descriptions.size() == g_paramsDescription.size()); + + // DEBUG compare json parsed result to what we currently have in + size_t i = 0; + for(auto it = g_paramsDescription.begin(); it != g_paramsDescription.end(); ++it, ++i) + { + const auto& a = *it; + const auto& b = m_descriptions[i]; + + assert(a.name == b.name); + assert(a.range == b.range); + assert(a.index == b.index); + assert(a.classFlags == b.classFlags); + + assert(a.isBool == b.isBool); + assert(a.isBipolar == b.isBipolar); + assert(a.isDiscrete == b.isDiscrete); + assert(a.isPublic == b.isPublic); + + if(a.valueToTextFunction) + { + const auto textA = std::string(a.valueToTextFunction(0.0f, a).toUTF8()); + const auto textB = m_valueList[b.toText][0]; + + if (textA != textB) + { + LOG("Text doesn't match, param " << a.name << ", expected " << textA << " but got " << textB); + } + } + } + return errors.str(); + } +} diff --git a/source/jucePlugin/VirusParameterDescriptions.h b/source/jucePlugin/VirusParameterDescriptions.h @@ -0,0 +1,22 @@ +#pragma once + +#include <map> +#include <string> +#include <vector> + +#include "VirusParameter.h" + +namespace Virus +{ + class ParameterDescriptions + { + public: + explicit ParameterDescriptions(const std::string& _jsonString); + + private: + std::string loadJson(const std::string& _jsonString); + + std::map<std::string, std::vector<std::string>> m_valueList; + std::vector<Parameter::Description> m_descriptions; + }; +} diff --git a/source/jucePlugin/parameterDescriptions_C.json b/source/jucePlugin/parameterDescriptions_C.json @@ -11,7 +11,7 @@ }, "parameterdescriptions": [ - {"page":"A", "class":"PerformanceController", "index":0, "name":"Version", "min":0, "max":20, "toText":"bank", "isPublic":false, "isDiscrete":true, "isBool":false}, + {"page":"A", "class":"PerformanceController", "index":0, "name":"Version", "min":0, "max":12, "toText":"version", "isPublic":false, "isDiscrete":true, "isBool":false}, {"page":"A", "class":"PerformanceController", "index":1, "name":"Modulation Wheel", "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, {"page":"A", "class":"PerformanceController", "index":2, "name":"Breath Controller", "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, {"page":"A", "class":"PerformanceController", "index":3, "name":"Contr 3", "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, @@ -21,45 +21,45 @@ {"page":"A", "class":"PerformanceController", "index":7, "name":"Channel Volume", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, {"page":"A", "class":"PerformanceController", "index":8, "name":"Balance", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, {"page":"A", "class":"PerformanceController", "index":9, "name":"Contr 9", "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"A", "class":"SoundbankA", "index":10, "name":"Panorama", "min":0, "max":127, "toText":"pan", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"A", "class":"SoundbankA", "index":10, "name":"Panorama", "min":0, "max":127, "toText":"pan", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, {"page":"A", "class":"PerformanceController", "index":11, "name":"Expression", "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, {"page":"A", "class":"PerformanceController", "index":12, "name":"Contr 12", "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, {"page":"A", "class":"PerformanceController", "index":13, "name":"Contr 13", "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, {"page":"A", "class":"PerformanceController", "index":14, "name":"Contr 14", "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, {"page":"A", "class":"PerformanceController", "index":15, "name":"Contr 15", "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, {"page":"A", "class":"PerformanceController", "index":16, "name":"Contr 16", "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"A", "class":"SoundbankA", "index":17, "name":"Osc1 Shape", "min":0, "max":127, "toText":"oscShape", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"A", "class":"SoundbankA", "index":17, "name":"Osc1 Shape", "min":0, "max":127, "toText":"oscShape", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, {"page":"A", "class":"SoundbankA", "index":18, "name":"Osc1 Pulsewidth", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, {"page":"A", "class":"SoundbankA", "index":19, "name":"Osc1 Wave Select", "min":0, "max":63, "toText":"oscWave", "isPublic":true, "isDiscrete":true, "isBool":false}, - {"page":"A", "class":"SoundbankA", "index":20, "name":"Osc1 Semitone", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, - {"page":"A", "class":"SoundbankA", "index":21, "name":"Osc1 Keyfollow", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, - {"page":"A", "class":"SoundbankA", "index":22, "name":"Osc2 Shape", "min":0, "max":127, "toText":"oscShape", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"A", "class":"SoundbankA", "index":20, "name":"Osc1 Semitone", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"A", "class":"SoundbankA", "index":21, "name":"Osc1 Keyfollow", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"A", "class":"SoundbankA", "index":22, "name":"Osc2 Shape", "min":0, "max":127, "toText":"oscShape", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, {"page":"A", "class":"SoundbankA", "index":23, "name":"Osc2 Pulsewidth", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, {"page":"A", "class":"SoundbankA", "index":24, "name":"Osc2 Wave Select", "min":0, "max":63, "toText":"oscWave", "isPublic":true, "isDiscrete":true, "isBool":false}, - {"page":"A", "class":"SoundbankA", "index":25, "name":"Osc2 Semitone", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"A", "class":"SoundbankA", "index":25, "name":"Osc2 Semitone", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, {"page":"A", "class":"SoundbankA", "index":26, "name":"Osc2 Detune", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, {"page":"A", "class":"SoundbankA", "index":27, "name":"Osc2 FM Amount", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, {"page":"A", "class":"SoundbankA", "index":28, "name":"Osc2 Sync", "min":0, "max":1, "isPublic":true, "isDiscrete":false, "isBool":true}, - {"page":"A", "class":"SoundbankA", "index":29, "name":"Osc2 Filt Env Amt", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, - {"page":"A", "class":"SoundbankA", "index":30, "name":"FM Filt Env Amt", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, - {"page":"A", "class":"SoundbankA", "index":31, "name":"Osc2 Keyfollow", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, - {"page":"A", "class":"PerformanceController", "index":32, "name":"Bank Select", "min":0, "max":29, "toText":"bank", "isPublic":false, "isDiscrete":true, "isBool":false}, - {"page":"A", "class":"SoundbankA", "index":33, "name":"Osc Balance", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"A", "class":"SoundbankA", "index":29, "name":"Osc2 Filt Env Amt", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"A", "class":"SoundbankA", "index":30, "name":"FM Filt Env Amt", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"A", "class":"SoundbankA", "index":31, "name":"Osc2 Keyfollow", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"A", "class":"PerformanceController", "index":32, "name":"Bank Select", "min":0, "max":8, "toText":"bank", "isPublic":false, "isDiscrete":true, "isBool":false}, + {"page":"A", "class":"SoundbankA", "index":33, "name":"Osc Balance", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, {"page":"A", "class":"SoundbankA", "index":34, "name":"Suboscillator Volume", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, - {"page":"A", "class":"SoundbankA", "index":35, "name":"Suboscillator Shape", "min":0, "max":1, "toText":"oscShape", "isDiscrete":true, "isBool":true, "isBipolar":true}, + {"page":"A", "class":"SoundbankA", "index":35, "name":"Suboscillator Shape", "min":0, "max":1, "toText":"suboscShape", "isDiscrete":true, "isBool":true, "isBipolar":false}, {"page":"A", "class":"SoundbankA", "index":36, "name":"Osc Mainvolume", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, {"page":"A", "class":"SoundbankA", "index":37, "name":"Noise Volume", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, {"page":"A", "class":"SoundbankA", "index":38, "name":"Ringmodulator Volume", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, - {"page":"A", "class":"SoundbankA|VirusC", "index":39, "name":"Noise Color", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"A", "class":"SoundbankA|VirusC", "index":39, "name":"Noise Color", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, {"page":"A", "class":"SoundbankA", "index":40, "name":"Cutoff", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, - {"page":"A", "class":"SoundbankA", "index":41, "name":"Cutoff2", "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"A", "class":"SoundbankA", "index":41, "name":"Cutoff2", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, {"page":"A", "class":"SoundbankA", "index":42, "name":"Filter1 Resonance", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, {"page":"A", "class":"SoundbankA", "index":43, "name":"Filter2 Resonance", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, {"page":"A", "class":"SoundbankA", "index":44, "name":"Filter1 Env Amt", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, {"page":"A", "class":"SoundbankA", "index":45, "name":"Filter2 Env Amt", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, - {"page":"A", "class":"SoundbankA", "index":46, "name":"Filter1 Keyfollow", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, - {"page":"A", "class":"SoundbankA", "index":47, "name":"Filter2 Keyfollow", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, - {"page":"A", "class":"SoundbankA", "index":48, "name":"Filter Balance", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"A", "class":"SoundbankA", "index":46, "name":"Filter1 Keyfollow", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"A", "class":"SoundbankA", "index":47, "name":"Filter2 Keyfollow", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"A", "class":"SoundbankA", "index":48, "name":"Filter Balance", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, {"page":"A", "class":"SoundbankA", "index":49, "name":"Saturation Curve", "min":0, "max":14, "toText":"satCurve", "isPublic":true, "isDiscrete":true, "isBool":false}, {"page":"A", "class":"SoundbankA", "index":51, "name":"Filter1 Mode", "min":0, "max":7, "toText":"filter1Mode", "isPublic":true, "isDiscrete":true, "isBool":false}, {"page":"A", "class":"SoundbankA", "index":52, "name":"Filter2 Mode", "min":0, "max":3, "toText":"filter2Mode", "isPublic":true, "isDiscrete":true, "isBool":false}, @@ -67,12 +67,12 @@ {"page":"A", "class":"SoundbankA", "index":54, "name":"Filter Env Attack", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, {"page":"A", "class":"SoundbankA", "index":55, "name":"Filter Env Decay", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, {"page":"A", "class":"SoundbankA", "index":56, "name":"Filter Env Sustain", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, - {"page":"A", "class":"SoundbankA", "index":57, "name":"Filter Env Sustain Time", "min":0, "max":127, "toText":"envSustainTime", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"A", "class":"SoundbankA", "index":57, "name":"Filter Env Sustain Time", "min":0, "max":127, "toText":"envSustainTime", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, {"page":"A", "class":"SoundbankA", "index":58, "name":"Filter Env Release", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, {"page":"A", "class":"SoundbankA", "index":59, "name":"Amp Env Attack", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, {"page":"A", "class":"SoundbankA", "index":60, "name":"Amp Env Decay", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, {"page":"A", "class":"SoundbankA", "index":61, "name":"Amp Env Sustain", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, - {"page":"A", "class":"SoundbankA", "index":62, "name":"Amp Env Sustain Time", "min":0, "max":127, "toText":"envSustainTime", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"A", "class":"SoundbankA", "index":62, "name":"Amp Env Sustain Time", "min":0, "max":127, "toText":"envSustainTime", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, {"page":"A", "class":"SoundbankA", "index":63, "name":"Amp Env Release", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, {"page":"A", "class":"PerformanceController", "index":64, "name":"Hold Pedal", "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, {"page":"A", "class":"PerformanceController", "index":65, "name":"Portamento Pedal", "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, @@ -81,40 +81,40 @@ {"page":"A", "class":"SoundbankA", "index":68, "name":"Lfo1 Shape", "min":0, "max":67, "toText":"lfoShape", "isPublic":true, "isDiscrete":true, "isBool":false}, {"page":"A", "class":"SoundbankA", "index":69, "name":"Lfo1 Env Mode", "min":0, "max":1, "isPublic":true, "isDiscrete":false, "isBool":true}, {"page":"A", "class":"SoundbankA", "index":70, "name":"Lfo1 Mode", "min":0, "max":1, "toText":"lfoMode", "isPublic":true, "isDiscrete":false, "isBool":true}, - {"page":"A", "class":"SoundbankA", "index":71, "name":"Lfo1 Symmetry", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"A", "class":"SoundbankA", "index":71, "name":"Lfo1 Symmetry", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, {"page":"A", "class":"SoundbankA", "index":72, "name":"Lfo1 Keyfollow", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, {"page":"A", "class":"SoundbankA", "index":73, "name":"Lfo1 Keytrigger", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, - {"page":"A", "class":"SoundbankA", "index":74, "name":"Osc1 Lfo1 Amount", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, - {"page":"A", "class":"SoundbankA", "index":75, "name":"Osc2 Lfo1 Amount", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, - {"page":"A", "class":"SoundbankA", "index":76, "name":"PW Lfo1 Amount", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, - {"page":"A", "class":"SoundbankA", "index":77, "name":"Reso Lfo1 Amount", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, - {"page":"A", "class":"SoundbankA", "index":78, "name":"FiltGain Lfo1 Amount", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"A", "class":"SoundbankA", "index":74, "name":"Osc1 Lfo1 Amount", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"A", "class":"SoundbankA", "index":75, "name":"Osc2 Lfo1 Amount", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"A", "class":"SoundbankA", "index":76, "name":"PW Lfo1 Amount", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"A", "class":"SoundbankA", "index":77, "name":"Reso Lfo1 Amount", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"A", "class":"SoundbankA", "index":78, "name":"FiltGain Lfo1 Amount", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, {"page":"A", "class":"SoundbankA", "index":79, "name":"Lfo2 Rate", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, {"page":"A", "class":"SoundbankA", "index":80, "name":"Lfo2 Shape", "min":0, "max":67, "toText":"lfoShape", "isPublic":true, "isDiscrete":true, "isBool":false}, {"page":"A", "class":"SoundbankA", "index":81, "name":"Lfo2 Env Mode", "min":0, "max":1, "isPublic":true, "isDiscrete":false, "isBool":true}, {"page":"A", "class":"SoundbankA", "index":82, "name":"Lfo2 Mode", "min":0, "max":1, "toText":"lfoMode", "isPublic":true, "isDiscrete":false, "isBool":true}, - {"page":"A", "class":"SoundbankA", "index":83, "name":"Lfo2 Symmetry", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"A", "class":"SoundbankA", "index":83, "name":"Lfo2 Symmetry", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, {"page":"A", "class":"SoundbankA", "index":84, "name":"Lfo2 Keyfollow", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, {"page":"A", "class":"SoundbankA", "index":85, "name":"Lfo2 Keytrigger", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, - {"page":"A", "class":"SoundbankA", "index":86, "name":"Shape Lfo2 Amount", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, - {"page":"A", "class":"SoundbankA", "index":87, "name":"FM Lfo2 Amount", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, - {"page":"A", "class":"SoundbankA", "index":88, "name":"Cutoff1 Lfo2 Amount", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, - {"page":"A", "class":"SoundbankA", "index":89, "name":"Cutoff2 Lfo2 Amount", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, - {"page":"A", "class":"SoundbankA", "index":90, "name":"Pan Lfo2 Amount", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"A", "class":"SoundbankA", "index":86, "name":"Shape Lfo2 Amount", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"A", "class":"SoundbankA", "index":87, "name":"FM Lfo2 Amount", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"A", "class":"SoundbankA", "index":88, "name":"Cutoff1 Lfo2 Amount", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"A", "class":"SoundbankA", "index":89, "name":"Cutoff2 Lfo2 Amount", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"A", "class":"SoundbankA", "index":90, "name":"Pan Lfo2 Amount", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, {"page":"A", "class":"SoundbankA", "index":91, "name":"Patch Volume", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, - {"page":"A", "class":"SoundbankA", "index":93, "name":"Transpose", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"A", "class":"SoundbankA", "index":93, "name":"Transpose", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, {"page":"A", "class":"SoundbankA", "index":94, "name":"Key Mode", "min":0, "max":5, "toText":"keyMode", "isPublic":true, "isDiscrete":true, "isBool":false}, {"page":"A", "class":"SoundbankA", "index":97, "name":"Unison Mode", "min":0, "max":15, "toText":"unisonMode", "isPublic":true, "isDiscrete":true, "isBool":false}, {"page":"A", "class":"SoundbankA", "index":98, "name":"Unison Detune", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, {"page":"A", "class":"SoundbankA", "index":99, "name":"Unison Pan Spread", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, - {"page":"A", "class":"SoundbankA", "index":100, "name":"Unison Lfo Phase", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"A", "class":"SoundbankA", "index":100, "name":"Unison Lfo Phase", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, {"page":"A", "class":"SoundbankA", "index":101, "name":"Input Mode", "min":0, "max":3, "toText":"inputMode", "isPublic":true, "isDiscrete":true, "isBool":false}, {"page":"A", "class":"SoundbankA", "index":102, "name":"Input Select", "min":0, "max":8, "toText":"inputSelect", "isPublic":true, "isDiscrete":true, "isBool":false}, {"page":"A", "class":"SoundbankA", "index":105, "name":"Chorus Mix", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, {"page":"A", "class":"SoundbankA", "index":106, "name":"Chorus Rate", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, {"page":"A", "class":"SoundbankA", "index":107, "name":"Chorus Depth", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, {"page":"A", "class":"SoundbankA", "index":108, "name":"Chorus Delay", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, - {"page":"A", "class":"SoundbankA", "index":109, "name":"Chorus Feedback", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"A", "class":"SoundbankA", "index":109, "name":"Chorus Feedback", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, {"page":"A", "class":"SoundbankA", "index":110, "name":"Chorus Lfo Shape", "min":0, "max":67, "toText":"lfoShape", "isPublic":true, "isDiscrete":true, "isBool":false}, {"page":"A", "class":"SoundbankA|MultiOrSingle", "index":112, "name":"Delay/Reverb Mode", "min":0, "max":26, "toText":"delayReverbMode", "isPublic":true, "isDiscrete":true, "isBool":false}, {"page":"A", "class":"SoundbankA|MultiOrSingle", "index":113, "name":"Effect Send", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, @@ -124,7 +124,7 @@ {"page":"A", "class":"SoundbankA|MultiOrSingle|NonPartSensitive", "index":117, "name":"Dly Depth / Rev Size", "min":0, "max":127, "toText":"reverbRoomSize", "isPublic":true, "isDiscrete":true, "isBool":false}, {"page":"A", "class":"SoundbankA|MultiOrSingle|NonPartSensitive", "index":118, "name":"Delay Lfo Shape", "min":0, "max":127, "toText":"delayLfoShape", "isPublic":true, "isDiscrete":true, "isBool":false}, // {"page":"A", "class":"SoundbankA|MultiOrSingle|NonPartSensitive", "index":118, "name":"Reverb Damping", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, - {"page":"A", "class":"SoundbankA|MultiOrSingle|NonPartSensitive", "index":119, "name":"Delay Color", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"A", "class":"SoundbankA|MultiOrSingle|NonPartSensitive", "index":119, "name":"Delay Color", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, {"page":"A", "class":"SoundbankA|MultiOrSingle|NonPartSensitive", "index":122, "name":"Keyb Local", "min":0, "max":1, "isPublic":false, "isDiscrete":false, "isBool":true}, {"page":"A", "class":"SoundbankA|MultiOrSingle|NonPartSensitive", "index":123, "name":"All Notes Off", "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, @@ -132,7 +132,7 @@ {"page":"B", "class":"SoundbankB", "index":2, "name":"Arp Pattern Selct", "min":0, "max":63, "toText":"unsignedOne", "isPublic":true, "isDiscrete":true, "isBool":false}, {"page":"B", "class":"SoundbankB", "index":3, "name":"Arp Octave Range", "min":0, "max":3, "toText":"unsignedOne", "isPublic":true, "isDiscrete":true, "isBool":false}, {"page":"B", "class":"SoundbankB", "index":4, "name":"Arp Hold Enable", "min":0, "max":1, "isPublic":true, "isDiscrete":false, "isBool":true}, - {"page":"B", "class":"SoundbankB", "index":5, "name":"Arp Note Length", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"B", "class":"SoundbankB", "index":5, "name":"Arp Note Length", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, {"page":"B", "class":"SoundbankB", "index":6, "name":"Arp Swing", "min":0, "max":127, "toText":"arpSwing", "isPublic":true, "isDiscrete":false, "isBool":false}, {"page":"B", "class":"SoundbankB", "index":7, "name":"Lfo3 Rate", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, {"page":"B", "class":"SoundbankB", "index":8, "name":"Lfo3 Shape", "min":0, "max":67, "toText":"lfoShape", "isPublic":true, "isDiscrete":true, "isBool":false}, @@ -148,8 +148,8 @@ {"page":"B", "class":"SoundbankB|MultiOrSingle|NonPartSensitive", "index":20, "name":"Delay Clock", "min":0, "max":16, "toText":"musicDivision", "isPublic":true, "isDiscrete":true, "isBool":false}, {"page":"B", "class":"SoundbankB", "index":21, "name":"Lfo3 Clock", "min":0, "max":21, "toText":"musicDivision", "isPublic":true, "isDiscrete":true, "isBool":false}, {"page":"B", "class":"SoundbankB", "index":25, "name":"Control Smooth Mode", "min":0, "max":3, "toText":"controlSmoothMode", "isPublic":true, "isDiscrete":true, "isBool":false}, - {"page":"B", "class":"SoundbankB", "index":26, "name":"Bender Range Up", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":true, "isBool":false}, - {"page":"B", "class":"SoundbankB", "index":27, "name":"Bender Range Down", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":true, "isBool":false}, + {"page":"B", "class":"SoundbankB", "index":26, "name":"Bender Range Up", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":true, "isBool":false, "isBipolar":"true"}, + {"page":"B", "class":"SoundbankB", "index":27, "name":"Bender Range Down", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":true, "isBool":false, "isBipolar":"true"}, {"page":"B", "class":"SoundbankB", "index":28, "name":"Bender Scale", "min":0, "max":1, "toText":"linExp", "isPublic":true, "isDiscrete":true, "isBool":false}, {"page":"B", "class":"SoundbankB", "index":30, "name":"Filter1 Env Polarity", "min":0, "max":1, "toText":"negPos", "isPublic":true, "isDiscrete":false, "isBool":true}, {"page":"B", "class":"SoundbankB", "index":31, "name":"Filter1 Env Polarity", "min":0, "max":1, "toText":"negPos", "isPublic":true, "isDiscrete":false, "isBool":true}, @@ -162,50 +162,50 @@ {"page":"B", "class":"SoundbankB", "index":39, "name":"Vocoder Mode", "min":0, "max":12, "toText":"vocoderMode", "isPublic":true, "isDiscrete":true, "isBool":false}, {"page":"B", "class":"SoundbankB|VirusC", "index":41, "name":"Osc3 Mode", "min":0, "max":67, "toText":"osc3Mode", "isPublic":true, "isDiscrete":true, "isBool":false}, {"page":"B", "class":"SoundbankB|VirusC", "index":42, "name":"Osc3 Volume", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, - {"page":"B", "class":"SoundbankB|VirusC", "index":43, "name":"Osc3 Semitone", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"B", "class":"SoundbankB|VirusC", "index":43, "name":"Osc3 Semitone", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, {"page":"B", "class":"SoundbankB|VirusC", "index":44, "name":"Osc3 Detune", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, {"page":"B", "class":"SoundbankB|VirusC", "index":45, "name":"LowEQ Frequency", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, {"page":"B", "class":"SoundbankB|VirusC", "index":46, "name":"HighEQ Frequency", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, - {"page":"B", "class":"SoundbankB", "index":47, "name":"Osc1 Shape Velocity", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, - {"page":"B", "class":"SoundbankB", "index":48, "name":"Osc2 Shape Velocity", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, - {"page":"B", "class":"SoundbankB", "index":49, "name":"PulseWidth Velocity", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, - {"page":"B", "class":"SoundbankB", "index":50, "name":"Fm Amount Velocity", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"B", "class":"SoundbankB", "index":47, "name":"Osc1 Shape Velocity", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"B", "class":"SoundbankB", "index":48, "name":"Osc2 Shape Velocity", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"B", "class":"SoundbankB", "index":49, "name":"PulseWidth Velocity", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"B", "class":"SoundbankB", "index":50, "name":"Fm Amount Velocity", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, {"page":"B", "class":"SoundbankB|VirusC", "index":51, "name":"Soft Knob1 ShortName", "min":0, "max":71, "toText":"softknobName", "isPublic":true, "isDiscrete":true, "isBool":false}, {"page":"B", "class":"SoundbankB|VirusC", "index":52, "name":"Soft Knob2 ShortName", "min":0, "max":71, "toText":"softknobName", "isPublic":true, "isDiscrete":true, "isBool":false}, - {"page":"B", "class":"SoundbankB", "index":54, "name":"Flt1 EnvAmt Velocity", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, - {"page":"B", "class":"SoundbankB", "index":55, "name":"Flt2 EnvAmt Velocity", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, - {"page":"B", "class":"SoundbankB", "index":56, "name":"Resonance1 Velocity", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, - {"page":"B", "class":"SoundbankB", "index":57, "name":"Resonance2 Velocity", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"B", "class":"SoundbankB", "index":54, "name":"Flt1 EnvAmt Velocity", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"B", "class":"SoundbankB", "index":55, "name":"Flt2 EnvAmt Velocity", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"B", "class":"SoundbankB", "index":56, "name":"Resonance1 Velocity", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"B", "class":"SoundbankB", "index":57, "name":"Resonance2 Velocity", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, {"page":"B", "class":"SoundbankB", "index":58, "name":"Second Output Balance", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, - {"page":"B", "class":"SoundbankB", "index":60, "name":"Amp Velocity", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, - {"page":"B", "class":"SoundbankB", "index":61, "name":"Panorama Velocity", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"B", "class":"SoundbankB", "index":60, "name":"Amp Velocity", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"B", "class":"SoundbankB", "index":61, "name":"Panorama Velocity", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, {"page":"B", "class":"SoundbankB", "index":62, "name":"Soft Knob-1 Single", "min":0, "max":117, "toText":"softknobDest", "isPublic":true, "isDiscrete":true, "isBool":false}, {"page":"B", "class":"SoundbankB", "index":63, "name":"Soft Knob-2 Single", "min":0, "max":117, "toText":"softknobDest", "isPublic":true, "isDiscrete":true, "isBool":false}, {"page":"B", "class":"SoundbankB", "index":64, "name":"Assign1 Source", "min":0, "max":27, "toText":"modmatrixSource", "isPublic":true, "isDiscrete":true, "isBool":false}, {"page":"B", "class":"SoundbankB", "index":65, "name":"Assign1 Destination", "min":0, "max":122, "toText":"modmatrixDest", "isPublic":true, "isDiscrete":true, "isBool":false}, - {"page":"B", "class":"SoundbankB", "index":66, "name":"Assign1 Amount", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"B", "class":"SoundbankB", "index":66, "name":"Assign1 Amount", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, {"page":"B", "class":"SoundbankB", "index":67, "name":"Assign2 Source", "min":0, "max":27, "toText":"modmatrixSource", "isPublic":true, "isDiscrete":true, "isBool":false}, {"page":"B", "class":"SoundbankB", "index":68, "name":"Assign2 Destination1", "min":0, "max":122, "toText":"modmatrixDest", "isPublic":true, "isDiscrete":true, "isBool":false}, - {"page":"B", "class":"SoundbankB", "index":69, "name":"Assign2 Amount1", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"B", "class":"SoundbankB", "index":69, "name":"Assign2 Amount1", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, {"page":"B", "class":"SoundbankB", "index":70, "name":"Assign2 Destination2", "min":0, "max":122, "toText":"modmatrixDest", "isPublic":true, "isDiscrete":true, "isBool":false}, - {"page":"B", "class":"SoundbankB", "index":71, "name":"Assign2 Amount2", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"B", "class":"SoundbankB", "index":71, "name":"Assign2 Amount2", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, {"page":"B", "class":"SoundbankB", "index":72, "name":"Assign3 Source", "min":0, "max":27, "toText":"modmatrixSource", "isPublic":true, "isDiscrete":true, "isBool":false}, {"page":"B", "class":"SoundbankB", "index":73, "name":"Assign3 Destination1", "min":0, "max":122, "toText":"modmatrixDest", "isPublic":true, "isDiscrete":true, "isBool":false}, - {"page":"B", "class":"SoundbankB", "index":74, "name":"Assign3 Amount1", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"B", "class":"SoundbankB", "index":74, "name":"Assign3 Amount1", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, {"page":"B", "class":"SoundbankB", "index":75, "name":"Assign3 Destination2", "min":0, "max":122, "toText":"modmatrixDest", "isPublic":true, "isDiscrete":true, "isBool":false}, - {"page":"B", "class":"SoundbankB", "index":76, "name":"Assign3 Amount2", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"B", "class":"SoundbankB", "index":76, "name":"Assign3 Amount2", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, {"page":"B", "class":"SoundbankB", "index":77, "name":"Assign3 Destination3", "min":0, "max":122, "toText":"modmatrixDest", "isPublic":true, "isDiscrete":true, "isBool":false}, - {"page":"B", "class":"SoundbankB", "index":78, "name":"Assign3 Amount3", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"B", "class":"SoundbankB", "index":78, "name":"Assign3 Amount3", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, {"page":"B", "class":"SoundbankB", "index":79, "name":"LFO1 Assign Dest", "min":0, "max":122, "toText":"modmatrixDest", "isPublic":true, "isDiscrete":true, "isBool":false}, - {"page":"B", "class":"SoundbankB", "index":80, "name":"LFO1 Assign Amount", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"B", "class":"SoundbankB", "index":80, "name":"LFO1 Assign Amount", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, {"page":"B", "class":"SoundbankB", "index":81, "name":"LFO2 Assign Dest", "min":0, "max":122, "toText":"modmatrixDest", "isPublic":true, "isDiscrete":true, "isBool":false}, - {"page":"B", "class":"SoundbankB", "index":82, "name":"LFO2 Assign Amount", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"B", "class":"SoundbankB", "index":82, "name":"LFO2 Assign Amount", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, {"page":"B", "class":"SoundbankB|VirusC", "index":84, "name":"Phaser Mode", "min":0, "max":6, "toText":"phaserMode", "isPublic":true, "isDiscrete":true, "isBool":false}, {"page":"B", "class":"SoundbankB|VirusC", "index":85, "name":"Phaser Mix", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, {"page":"B", "class":"SoundbankB|VirusC", "index":86, "name":"Phaser Rate", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, {"page":"B", "class":"SoundbankB|VirusC", "index":87, "name":"Phaser Depth", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, {"page":"B", "class":"SoundbankB|VirusC", "index":88, "name":"Phaser Frequency", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, - {"page":"B", "class":"SoundbankB|VirusC", "index":89, "name":"Phaser Feedback", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"B", "class":"SoundbankB|VirusC", "index":89, "name":"Phaser Feedback", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, {"page":"B", "class":"SoundbankB|VirusC", "index":90, "name":"Phaser Spread", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, {"page":"B", "class":"SoundbankB|VirusC", "index":92, "name":"MidEQ Gain", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, {"page":"B", "class":"SoundbankB|VirusC", "index":93, "name":"MidEQ Frequency", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, @@ -219,13 +219,13 @@ {"page":"B", "class":"SoundbankB|VirusC", "index":101, "name":"Distortion Intensity", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false}, {"page":"B", "class":"SoundbankB|VirusC", "index":103, "name":"Assign 4 Source", "min":0, "max":27, "toText":"modmatrixSource", "isPublic":true, "isDiscrete":true, "isBool":false}, {"page":"B", "class":"SoundbankB|VirusC", "index":104, "name":"Assign 4 Destination", "min":0, "max":122, "toText":"modmatrixDest", "isPublic":true, "isDiscrete":true, "isBool":false}, - {"page":"B", "class":"SoundbankB|VirusC", "index":105, "name":"Assign 4 Amount", "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"B", "class":"SoundbankB|VirusC", "index":105, "name":"Assign 4 Amount", "min":0, "max":127, "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, {"page":"B", "class":"SoundbankB|VirusC", "index":106, "name":"Assign 5 Source", "min":0, "max":27, "toText":"modmatrixSource", "isPublic":true, "isDiscrete":true, "isBool":false}, {"page":"B", "class":"SoundbankB|VirusC", "index":107, "name":"Assign 5 Destination", "min":0, "max":122, "toText":"modmatrixDest", "isPublic":true, "isDiscrete":true, "isBool":false}, - {"page":"B", "class":"SoundbankB|VirusC", "index":108, "name":"Assign 5 Amount", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"B", "class":"SoundbankB|VirusC", "index":108, "name":"Assign 5 Amount", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, {"page":"B", "class":"SoundbankB|VirusC", "index":109, "name":"Assign 6 Source", "min":0, "max":27, "toText":"modmatrixSource", "isPublic":true, "isDiscrete":true, "isBool":false}, {"page":"B", "class":"SoundbankB|VirusC", "index":110, "name":"Assign 6 Destination", "min":0, "max":122, "toText":"modmatrixDest", "isPublic":true, "isDiscrete":true, "isBool":false}, - {"page":"B", "class":"SoundbankB|VirusC", "index":111, "name":"Assign 6 Amount", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, + {"page":"B", "class":"SoundbankB|VirusC", "index":111, "name":"Assign 6 Amount", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false, "isBipolar":true}, {"page":"B", "class":"SoundbankB|VirusC", "index":122, "name":"Filter Select", "min":0, "max":2, "toText":"filterSelect", "isPublic":true, "isDiscrete":true, "isBool":false}, {"page":"B", "class":"SoundbankB", "index":123, "name":"Category1", "min":0, "max":16, "toText":"category", "isPublic":true, "isDiscrete":true, "isBool":false}, {"page":"B", "class":"SoundbankB", "index":124, "name":"Category2", "min":0, "max":16, "toText":"category", "isPublic":true, "isDiscrete":true, "isBool":false}, @@ -239,7 +239,7 @@ {"page":"C", "class":"Multi", "index":36, "name":"Part High Key", "min":0, "max":127, "isPublic":false, "isDiscrete":true, "isBool":false}, {"page":"C", "class":"Multi", "index":37, "name":"Part Transpose", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, {"page":"C", "class":"Multi", "index":38, "name":"Part Detune", "min":0, "max":127, "toText":"signed", "isPublic":false, "isDiscrete":false, "isBool":false, "isBipolar":true}, - {"page":"C", "class":"Multi", "index":39, "name":"Part Volume", "min":0, "max":127, "toText":"signed,textTo7bitSigned", "isPublic":true, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Multi", "index":39, "name":"Part Volume", "min":0, "max":127, "toText":"signed", "isPublic":true, "isDiscrete":false, "isBool":false}, {"page":"C", "class":"Multi", "index":40, "name":"Part Midi Volume Init", "min":0, "max":127, "isPublic":false, "isDiscrete":true, "isBool":false}, {"page":"C", "class":"Multi", "index":41, "name":"Part Output Select", "min":0, "max":14, "toText":"outputSelect", "isPublic":false, "isDiscrete":true, "isBool":false}, {"page":"C", "class":"Global", "index":45, "name":"Second Output Select", "min":0, "max":15, "isPublic":false, "isDiscrete":true, "isBool":false}, @@ -291,94 +291,94 @@ {"page":"C", "class":"Global", "index":127, "name":"Master Volume", "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, // UNDEFINED / UNUSED / STUBS - {"page":"A", "class":"Undefined", "index":92, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"A", "class":"Undefined", "index":95, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"A", "class":"Undefined", "index":96, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"A", "class":"Undefined", "index":111, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"A", "class":"Undefined", "index":120, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"A", "class":"Undefined", "index":121, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"A", "class":"Undefined", "index":124, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"A", "class":"Undefined", "index":125, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"A", "class":"Undefined", "index":126, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"A", "class":"Undefined", "index":127, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"A", "class":"Undefined", "name":"Undefined92", "index":92 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"A", "class":"Undefined", "name":"Undefined95", "index":95 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"A", "class":"Undefined", "name":"Undefined96", "index":96 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"A", "class":"Undefined", "name":"Undefined111", "index":111, "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"A", "class":"Undefined", "name":"Undefined120", "index":120, "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"A", "class":"Undefined", "name":"Undefined121", "index":121, "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"A", "class":"Undefined", "name":"Undefined124", "index":124, "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"A", "class":"Undefined", "name":"Undefined125", "index":125, "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"A", "class":"Undefined", "name":"Undefined126", "index":126, "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"A", "class":"Undefined", "name":"Undefined127", "index":127, "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"B", "class":"Undefined", "index":0, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"B", "class":"Undefined", "index":14, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"B", "class":"Undefined", "index":15, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"B", "class":"Undefined", "index":22, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"B", "class":"Undefined", "index":23, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"B", "class":"Undefined", "index":24, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"B", "class":"Undefined", "index":29, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"B", "class":"Undefined", "index":37, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"B", "class":"Undefined", "index":40, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"B", "class":"Undefined", "index":53, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"B", "class":"Undefined", "index":69, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"B", "class":"Undefined", "index":83, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"B", "class":"Undefined", "index":91, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"B", "class":"Undefined", "index":111, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"B", "class":"Undefined", "index":123, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"B", "class":"Undefined", "index":124, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":0, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - - {"page":"C", "class":"Undefined", "index":1, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":2, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":3, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":4, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":15, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":16, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":17, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":18, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":19, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":20, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":21, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":23, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":24, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":25, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":26, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":27, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":28, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":29, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":30, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":76, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":79, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":80, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":81, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":82, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":83, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":84, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":88, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":89, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":100, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":101, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":102, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":103, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":104, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":119, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"B", "class":"Undefined", "name":"Undefined0" , "index":0 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"B", "class":"Undefined", "name":"Undefined14" , "index":14 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"B", "class":"Undefined", "name":"Undefined15" , "index":15 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"B", "class":"Undefined", "name":"Undefined22" , "index":22 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"B", "class":"Undefined", "name":"Undefined23" , "index":23 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"B", "class":"Undefined", "name":"Undefined24" , "index":24 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"B", "class":"Undefined", "name":"Undefined29" , "index":29 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"B", "class":"Undefined", "name":"Undefined37" , "index":37 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"B", "class":"Undefined", "name":"Undefined40" , "index":40 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"B", "class":"Undefined", "name":"Undefined53" , "index":53 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"B", "class":"Undefined", "name":"Undefined69" , "index":69 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"B", "class":"Undefined", "name":"Undefined83" , "index":83 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"B", "class":"Undefined", "name":"Undefined91" , "index":91 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"B", "class":"Undefined", "name":"Undefined111", "index":111, "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"B", "class":"Undefined", "name":"Undefined123", "index":123, "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"B", "class":"Undefined", "name":"Undefined124", "index":124, "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + + {"page":"C", "class":"Undefined", "name":"Undefined0" , "index":0 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined1" , "index":1 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined2" , "index":2 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined3" , "index":3 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined4" , "index":4 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined15" , "index":15 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined16" , "index":16 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined17" , "index":17 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined18" , "index":18 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined19" , "index":19 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined20" , "index":20 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined21" , "index":21 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined23" , "index":23 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined24" , "index":24 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined25" , "index":25 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined26" , "index":26 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined27" , "index":27 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined28" , "index":28 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined29" , "index":29 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined30" , "index":30 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined76" , "index":76 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined79" , "index":79 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined80" , "index":80 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined81" , "index":81 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined82" , "index":82 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined83" , "index":83 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined84" , "index":84 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined88" , "index":88 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined89" , "index":89 , "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined100", "index":100, "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined101", "index":101, "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined102", "index":102, "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined103", "index":103, "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined104", "index":104, "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined119", "index":119, "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, // Text Chars / Unused - {"page":"B", "class":"Undefined", "index":110, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"B", "class":"Undefined", "index":111, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"B", "class":"Undefined", "index":112, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"B", "class":"Undefined", "index":113, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"B", "class":"Undefined", "index":114, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"B", "class":"Undefined", "index":115, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"B", "class":"Undefined", "index":116, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"B", "class":"Undefined", "index":117, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"B", "class":"Undefined", "index":118, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"B", "class":"Undefined", "index":119, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"B", "class":"Undefined", "index":120, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"B", "class":"Undefined", "index":121, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"B", "class":"Undefined", "name":"Undefined110", "index":110, "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"B", "class":"Undefined", "name":"Undefined111", "index":111, "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"B", "class":"Undefined", "name":"Undefined112", "index":112, "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"B", "class":"Undefined", "name":"Undefined113", "index":113, "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"B", "class":"Undefined", "name":"Undefined114", "index":114, "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"B", "class":"Undefined", "name":"Undefined115", "index":115, "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"B", "class":"Undefined", "name":"Undefined116", "index":116, "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"B", "class":"Undefined", "name":"Undefined117", "index":117, "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"B", "class":"Undefined", "name":"Undefined118", "index":118, "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"B", "class":"Undefined", "name":"Undefined119", "index":119, "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"B", "class":"Undefined", "name":"Undefined120", "index":120, "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"B", "class":"Undefined", "name":"Undefined121", "index":121, "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":5, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":6, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":7, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":8, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":9, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":10, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":11, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":12, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":13, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false}, - {"page":"C", "class":"Undefined", "index":14, "min":0, "max":127, "isPublic":false, "isDiscrete":false, "isBool":false} + {"page":"C", "class":"Undefined", "name":"Undefined5", "index":5, "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined6", "index":6, "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined7", "index":7, "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined8", "index":8, "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined9", "index":9, "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined10", "index":10, "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined11", "index":11, "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined12", "index":12, "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined13", "index":13, "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false}, + {"page":"C", "class":"Undefined", "name":"Undefined14", "index":14, "min":0, "max":127, "toText":"unsignedZero", "isPublic":false, "isDiscrete":false, "isBool":false} ], "valuelists": { @@ -424,6 +424,10 @@ "+40", "+41", "+42", "+43", "+44", "+45", "+46", "+47", "+48", "+49", "+50", "+51", "+52", "+53", "+54", "+55", "+56", "+57", "+58", "+59", "+60", "+61", "+62", "Right" ], + "version": + [ + "A", "A", "A", "A", "A", "B", "C", "TI", "TI", "TI", "TI", "TI", "TI2" + ], "bank": [ "Edit", "RAM A", "RAM B", "ROM C", "ROM D", "ROM E", "ROM F", "ROM G", "ROM H" @@ -439,6 +443,10 @@ "+40", "+41", "+42", "+43", "+44", "+45", "+46", "+47", "+48", "+49", "+50", "+51", "+52", "+53", "+54", "+55", "+56", "+57", "+58", "+59", "+60", "+61", "+62", "Pulse" ], + "suboscShape": + [ + "Square", "Triangle" + ], "oscWave": [ "Sine", "Triangle", "Wave 2", "Wave 3", "Wave 4", "Wave 5", "Wave 6", "Wave 7", "Wave 8", "Wave 9", "Wave 10", "Wave 11", "Wave 12", "Wave 13", "Wave 14", "Wave 15", "Wave 16", "Wave 17", "Wave 18", "Wave 19", @@ -543,14 +551,14 @@ ], "bpm": [ - "63", "64", "65", "66", "67", "68", "69", "70", "71", "72", "73", "74", "75", "76", "77", "78", - "79", "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", "90", "91", "92", "93", "94", - "95", "96", "97", "98", "99", "100", "101", "102", "103", "104", "105", "106", "107", "108", "109", "110", - "111", "112", "113", "114", "115", "116", "117", "118", "119", "120", "121", "122", "123", "124", "125", "126", - "127", "128", "129", "130", "131", "132", "133", "134", "135", "136", "137", "138", "139", "140", "141", "142", - "143", "144", "145", "146", "147", "148", "149", "150", "151", "152", "153", "154", "155", "156", "157", "158", - "159", "160", "161", "162", "163", "164", "165", "166", "167", "168", "169", "170", "171", "172", "173", "174", - "175", "176", "177", "178", "179", "180", "181", "182", "183", "184", "185", "186", "187", "188", "189", "190" + "63 BPM", "64 BPM", "65 BPM", "66 BPM", "67 BPM", "68 BPM", "69 BPM", "70 BPM", "71 BPM", "72 BPM", "73 BPM", "74 BPM", "75 BPM", "76 BPM", "77 BPM", "78 BPM", + "79 BPM", "80 BPM", "81 BPM", "82 BPM", "83 BPM", "84 BPM", "85 BPM", "86 BPM", "87 BPM", "88 BPM", "89 BPM", "90 BPM", "91 BPM", "92 BPM", "93 BPM", "94 BPM", + "95 BPM", "96 BPM", "97 BPM", "98 BPM", "99 BPM", "100 BPM", "101 BPM", "102 BPM", "103 BPM", "104 BPM", "105 BPM", "106 BPM", "107 BPM", "108 BPM", "109 BPM", "110 BPM", + "111 BPM", "112 BPM", "113 BPM", "114 BPM", "115 BPM", "116 BPM", "117 BPM", "118 BPM", "119 BPM", "120 BPM", "121 BPM", "122 BPM", "123 BPM", "124 BPM", "125 BPM", "126 BPM", + "127 BPM", "128 BPM", "129 BPM", "130 BPM", "131 BPM", "132 BPM", "133 BPM", "134 BPM", "135 BPM", "136 BPM", "137 BPM", "138 BPM", "139 BPM", "140 BPM", "141 BPM", "142 BPM", + "143 BPM", "144 BPM", "145 BPM", "146 BPM", "147 BPM", "148 BPM", "149 BPM", "150 BPM", "151 BPM", "152 BPM", "153 BPM", "154 BPM", "155 BPM", "156 BPM", "157 BPM", "158 BPM", + "159 BPM", "160 BPM", "161 BPM", "162 BPM", "163 BPM", "164 BPM", "165 BPM", "166 BPM", "167 BPM", "168 BPM", "169 BPM", "170 BPM", "171 BPM", "172 BPM", "173 BPM", "174 BPM", + "175 BPM", "176 BPM", "177 BPM", "178 BPM", "179 BPM", "180 BPM", "181 BPM", "182 BPM", "183 BPM", "184 BPM", "185 BPM", "186 BPM", "187 BPM", "188 BPM", "189 BPM", "190" ], "arpSwing": [