diff --git a/include/com/IdLookup.h b/include/com/IdLookup.h index 79d395b6..447684f7 100644 --- a/include/com/IdLookup.h +++ b/include/com/IdLookup.h @@ -72,9 +72,9 @@ namespace plug } - constexpr effects lookupEffectById(std::uint8_t id) + constexpr effects lookupEffectById(std::uint8_t id, std::uint8_t idmsb = 0) { - switch (id) + switch ((idmsb << 8) | id) { case 0x00: return effects::EMPTY; @@ -152,8 +152,25 @@ namespace plug return effects::FENDER_63_SPRING_REVERB; case 0x0b: return effects::FENDER_65_SPRING_REVERB; + /* Mustang I V2 */ + case 0x103: + return effects::RANGER_BOOST; + case 0xba: + return effects::GREENBOX; + case 0x110: + return effects::ORANGEBOX; + case 0x111: + return effects::BLACKBOX; + case 0x10f: + return effects::BIG_FUZZ; + case 0xf4: + return effects::WAH_MOD; + case 0xf5: + return effects::TOUCH_WAH_MOD; + case 0x101f: + return effects::DIATONIC_PITCH_SHIFTER; default: - throw std::invalid_argument{"Invalid effect id: " + std::to_string(id)}; + throw std::invalid_argument{"Invalid effect id: " + std::to_string(idmsb << 8 | id)}; } } diff --git a/include/com/Packet.h b/include/com/Packet.h index 092630c9..b60973da 100644 --- a/include/com/Packet.h +++ b/include/com/Packet.h @@ -137,6 +137,9 @@ namespace plug::com void setModel(std::uint8_t model); std::uint8_t getModel() const; + void setModelMSB(std::uint8_t modelmsb); + std::uint8_t getModelMSB() const; + void setUnknown(std::uint8_t value0, std::uint8_t value1, std::uint8_t value2); }; diff --git a/include/effects_enum.h b/include/effects_enum.h index ecec92ec..06de8ac6 100644 --- a/include/effects_enum.h +++ b/include/effects_enum.h @@ -69,6 +69,7 @@ namespace plug enum class effects { EMPTY, + /* Gain/Stomp Box */ OVERDRIVE, WAH, TOUCH_WAH, @@ -77,6 +78,7 @@ namespace plug SIMPLE_COMP, COMPRESSOR, + /* Modulation */ SINE_CHORUS, TRIANGLE_CHORUS, SINE_FLANGER, @@ -89,6 +91,7 @@ namespace plug PHASER, PITCH_SHIFTER, + /* Delay */ MONO_DELAY, MONO_ECHO_FILTER, STEREO_ECHO_FILTER, @@ -99,6 +102,7 @@ namespace plug TAPE_DELAY, STEREO_TAPE_DELAY, + /* Reverb */ SMALL_HALL_REVERB, LARGE_HALL_REVERB, SMALL_ROOM_REVERB, @@ -108,7 +112,18 @@ namespace plug AMBIENT_REVERB, ARENA_REVERB, FENDER_63_SPRING_REVERB, - FENDER_65_SPRING_REVERB + FENDER_65_SPRING_REVERB, + + /* Mustang I V2 Effect */ + RANGER_BOOST, + GREENBOX, + ORANGEBOX, + BLACKBOX, + BIG_FUZZ, + /* Mustang I V2 Modulation */ + WAH_MOD, + TOUCH_WAH_MOD, + DIATONIC_PITCH_SHIFTER }; // list of all cabinets diff --git a/src/com/Packet.cpp b/src/com/Packet.cpp index 28edb527..012fb9ac 100644 --- a/src/com/Packet.cpp +++ b/src/com/Packet.cpp @@ -292,6 +292,16 @@ namespace plug::com return bytes[0]; } + void EffectPayload::setModelMSB(std::uint8_t modelmsb) + { + bytes[1] = modelmsb; + } + + std::uint8_t EffectPayload::getModelMSB() const + { + return bytes[1]; + } + void EffectPayload::setUnknown(std::uint8_t value0, std::uint8_t value1, std::uint8_t value2) { bytes[3] = value0; diff --git a/src/com/PacketSerializer.cpp b/src/com/PacketSerializer.cpp index 8bfffa40..b8118afd 100644 --- a/src/com/PacketSerializer.cpp +++ b/src/com/PacketSerializer.cpp @@ -88,6 +88,11 @@ namespace plug::com case effects::FUZZ_TOUCH_WAH: case effects::SIMPLE_COMP: case effects::COMPRESSOR: + case effects::RANGER_BOOST: + case effects::GREENBOX: + case effects::ORANGEBOX: + case effects::BLACKBOX: + case effects::BIG_FUZZ: return DSP::effect0; case effects::SINE_CHORUS: @@ -101,6 +106,9 @@ namespace plug::com case effects::STEP_FILTER: case effects::PHASER: case effects::PITCH_SHIFTER: + case effects::WAH_MOD: + case effects::TOUCH_WAH_MOD: + case effects::DIATONIC_PITCH_SHIFTER: return DSP::effect1; case effects::MONO_DELAY: @@ -171,7 +179,7 @@ namespace plug::com { const auto payload = p.getPayload(); return fx_pedal_settings{FxSlot{payload.getSlot()}, - lookupEffectById(payload.getModel()), + lookupEffectById(payload.getModel(), payload.getModelMSB()), payload.getKnob1(), payload.getKnob2(), payload.getKnob3(), @@ -555,6 +563,48 @@ namespace plug::com payload.setModel(0x0b); break; + // Mustang I V2 + case effects::RANGER_BOOST: + payload.setModel(0x03); + payload.setModelMSB(0x01); + break; + + case effects::GREENBOX: + payload.setModel(0xba); + break; + + case effects::ORANGEBOX: + payload.setModel(0x10); + payload.setModelMSB(0x01); + break; + + case effects::BLACKBOX: + payload.setModel(0x11); + payload.setModelMSB(0x01); + break; + + case effects::BIG_FUZZ: + payload.setModel(0x0f); + payload.setModelMSB(0x01); + break; + + case effects::WAH_MOD: + payload.setModel(0xf4); + payload.setUnknown(0x01, 0x08, 0x01); + break; + + case effects::TOUCH_WAH_MOD: + payload.setModel(0xf5); + payload.setUnknown(0x01, 0x08, 0x01); + break; + + case effects::DIATONIC_PITCH_SHIFTER: + payload.setModel(0x1f); + payload.setModelMSB(0x10); + payload.setUnknown(0x00, 0x08, 0x01); + break; + + default: break; } diff --git a/src/ui/defaulteffects.cpp b/src/ui/defaulteffects.cpp index 0693363d..db01ef32 100644 --- a/src/ui/defaulteffects.cpp +++ b/src/ui/defaulteffects.cpp @@ -25,6 +25,8 @@ #include #include +#include + namespace plug { namespace @@ -79,6 +81,9 @@ namespace plug } + static QMap mapLbls; + + DefaultEffects::DefaultEffects(QWidget* parent) : QDialog(parent), ui(std::make_unique()) @@ -88,6 +93,123 @@ namespace plug connect(ui->comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(choose_fx(int))); connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(get_settings())); connect(ui->pushButton_2, SIGNAL(clicked()), this, SLOT(save_default_effects())); + + // Up to discussion, prepare map with default effects description to greatly + // reduce duplicate code + mapLbls["Level"] = UIText{ + tr("&Level"), + tr("Default effect's \"Level\" dial"), + tr("Allows you to set \"Level\" parameter of this effect"), + tr("Default effect's \"Level\" box"), + tr("Allows you to precisely set \"Level\" parameter of this effect")}; + mapLbls["Gain"] = UIText{ + tr("&Gain"), + tr("Default effect's \"Gain\" dial"), + tr("Allows you to set \"Gain\" parameter of this effect"), + tr("Default effect's \"Gain\" box"), + tr("Allows you to precisely set \"Gain\" parameter of this effect")}; + mapLbls["Low"] = UIText{ + tr("L&ow"), + tr("Default effect's \"Low tones\" dial"), + tr("Allows you to set \"Low tones\" parameter of this effect"), + tr("Default effect's \"Low tones\" box"), + tr("Allows you to precisely set \"Low tones\" parameter of this effect")}; + mapLbls["Brightness"] = UIText{ + tr("&Brightness"), + tr("Default effect's \"Brightness\" dial"), + tr("Allows you to set \"Brightness\" parameter of this effect"), + tr("Default effect's \"Brightness\" box"), + tr("Allows you to precisely set \"Brightness\" parameter of this effect")}; + mapLbls["Disabled"] = UIText{ + tr(""), + tr("Disabled dial"), + tr("This dial is disabled in this effect"), + tr("Disabled box"), + tr("This box is disabled in this effect")}; + mapLbls["Tone"] = UIText{ + tr("&Tone"), + tr("Default effect's \"Tone\" dial"), + tr("Allows you to set \"Tone\" parameter of this effect"), + tr("Default effect's \"Tone\" box"), + tr("Allows you to precisely set \"Tone\" parameter of this effect")}; + mapLbls["Blend"] = UIText{ + tr("&Blend"), + tr("Default effect's \"Blend\" dial"), + tr("Allows you to set \"Blend\" parameter of this effect"), + tr("Default effect's \"Blend\" box"), + tr("Allows you to precisely set \"Blend\" parameter of this effect")}; + mapLbls["Distortion"] = UIText{ + tr("&Distortion"), + tr("Default effect's \"Distortion\" dial"), + tr("Allows you to set \"Distortion\" parameter of this effect"), + tr("Default effect's \"Distortion\" box"), + tr("Allows you to precisely set \"Distortion\" parameter of this effect")}; + mapLbls["High"] = UIText{ + tr("&High"), + tr("Default effect's \"High tones\" dial"), + tr("Allows you to set \"High tones\" parameter of this effect"), + tr("Default effect's \"High tones\" box"), + tr("Allows you to precisely set \"High tones\" parameter of this effect")}; + mapLbls["Sustain"] = UIText{ + tr("&Sustain"), + tr("Default effect's \"Sustain\" dial"), + tr("Allows you to set \"Sustain\" parameter of this effect"), + tr("Default effect's \"Sustain\" box"), + tr("Allows you to precisely set \"Sustain\" parameter of this effect")}; + mapLbls["Pitch"] = UIText{ + tr("&Pitch"), + tr("Default effect's \"Pitch\" dial"), + tr("Allows you to set \"Pitch\" parameter of this effect"), + tr("Default effect's \"Pitch\" box"), + tr("Allows you to precisely set \"Pitch\" parameter of this effect")}; + mapLbls["Mix"] = UIText{ + tr("&Mix"), + tr("Default effect's \"Mix\" dial"), + tr("Allows you to set \"Mix\" parameter of this effect"), + tr("Default effect's \"Mix\" box"), + tr("Allows you to precisely set \"Mix\" parameter of this effect")}; + mapLbls["Key"] = UIText{ + tr("&Key"), + tr("Default effect's \"Key\" dial"), + tr("Allows you to set \"Key\" parameter of this effect"), + tr("Default effect's \"Key\" box"), + tr("Allows you to precisely set \"Key\" parameter of this effect")}; + mapLbls["Scale"] = UIText{ + tr("S&cale"), + tr("Default effect's \"Scale\" dial"), + tr("Allows you to set \"Scale\" parameter of this effect"), + tr("Default effect's \"Scale\" box"), + tr("Allows you to precisely set \"Scale\" parameter of this effect")}; + mapLbls["Freq"] = UIText{ + tr("&Frequency"), + tr("Default effect's \"Frequency\" dial"), + tr("Allows you to set \"Frequency\" parameter of this effect"), + tr("Default effect's \"Frequency\" box"), + tr("Allows you to precisely set \"Frequency\" parameter of this effect")}; + mapLbls["MinFreq"] = UIText{ + tr("Mi&n Freq"), + tr("Default effect's \"Minimum Frequency\" dial"), + tr("Allows you to set \"Minimum Frequency\" parameter of this effect"), + tr("Default effect's \"Minimum Frequency\" box"), + tr("Allows you to precisely set \"Minimum Frequency\" parameter of this effect")}; + mapLbls["MaxFreq"] = UIText{ + tr("Ma&x Freq"), + tr("Default effect's \"Maximum Frequency\" dial"), + tr("Allows you to set \"Maximum Frequency\" parameter of this effect"), + tr("Default effect's \"Maximum Frequency\" box"), + tr("Allows you to precisely set \"Maximum Frequency\" parameter of this effect")}; + mapLbls["HighQ"] = UIText{ + tr("Band Pass &Q"), + tr("Default effect's \"High Q\" dial"), + tr("Allows you to set \"High Q\" parameter of this effect"), + tr("Default effect's \"High Q\" box"), + tr("Allows you to precisely set \"High Q\" parameter of this effect")}; + mapLbls["Sensitivity"] = UIText{ + tr("&Sensivity"), + tr("Default effect's \"Sensivity\" dial"), + tr("Allows you to set \"Sensivity\" parameter of this effect"), + tr("Default effect's \"Sensivity\" box"), + tr("Allows you to precisely set \"Sensivity\" parameter of this effect")}; } void DefaultEffects::choose_fx(int value) @@ -209,6 +331,222 @@ namespace plug ui->spinBox_6->setDisabled(false); break; + case effects::RANGER_BOOST: + ui->dial->setMaximum(255); + ui->spinBox->setMaximum(255); + ui->dial_2->setMaximum(255); + ui->spinBox_2->setMaximum(255); + ui->dial_3->setMaximum(255); + ui->spinBox_3->setMaximum(255); + ui->dial_4->setMaximum(255); + ui->spinBox_4->setMaximum(255); + ui->dial_5->setValue(0); + ui->spinBox_5->setValue(0); + ui->dial_6->setValue(0); + ui->spinBox_6->setValue(0); + ui->dial->setDisabled(false); + ui->dial_2->setDisabled(false); + ui->dial_3->setDisabled(false); + ui->dial_4->setDisabled(false); + ui->dial_5->setDisabled(true); + ui->dial_6->setDisabled(true); + ui->spinBox->setDisabled(false); + ui->spinBox_2->setDisabled(false); + ui->spinBox_3->setDisabled(false); + ui->spinBox_4->setDisabled(false); + ui->spinBox_5->setDisabled(true); + ui->spinBox_6->setDisabled(true); + break; + + case effects::GREENBOX: + ui->dial->setMaximum(255); + ui->spinBox->setMaximum(255); + ui->dial_2->setMaximum(255); + ui->spinBox_2->setMaximum(255); + ui->dial_3->setMaximum(255); + ui->spinBox_3->setMaximum(255); + ui->dial_4->setMaximum(255); + ui->spinBox_4->setMaximum(255); + ui->dial_5->setValue(0); + ui->spinBox_5->setValue(0); + ui->dial_6->setValue(0); + ui->spinBox_6->setValue(0); + ui->dial->setDisabled(false); + ui->dial_2->setDisabled(false); + ui->dial_3->setDisabled(false); + ui->dial_4->setDisabled(false); + ui->dial_5->setDisabled(true); + ui->dial_6->setDisabled(true); + ui->spinBox->setDisabled(false); + ui->spinBox_2->setDisabled(false); + ui->spinBox_3->setDisabled(false); + ui->spinBox_4->setDisabled(false); + ui->spinBox_5->setDisabled(true); + ui->spinBox_6->setDisabled(true); + break; + + case effects::ORANGEBOX: + ui->dial->setMaximum(255); + ui->spinBox->setMaximum(255); + ui->dial_2->setMaximum(255); + ui->spinBox_2->setMaximum(255); + ui->dial_3->setMaximum(255); + ui->spinBox_3->setMaximum(255); + ui->dial_4->setValue(0); + ui->spinBox_4->setValue(0); + ui->dial_5->setValue(0); + ui->spinBox_5->setValue(0); + ui->dial_6->setValue(0); + ui->spinBox_6->setValue(0); + ui->dial->setDisabled(false); + ui->dial_2->setDisabled(false); + ui->dial_3->setDisabled(false); + ui->dial_4->setDisabled(true); + ui->dial_5->setDisabled(true); + ui->dial_6->setDisabled(true); + ui->spinBox->setDisabled(false); + ui->spinBox_2->setDisabled(false); + ui->spinBox_3->setDisabled(false); + ui->spinBox_4->setDisabled(true); + ui->spinBox_5->setDisabled(true); + ui->spinBox_6->setDisabled(true); + break; + + case effects::BLACKBOX: + ui->dial->setMaximum(255); + ui->spinBox->setMaximum(255); + ui->dial_2->setMaximum(255); + ui->spinBox_2->setMaximum(255); + ui->dial_3->setMaximum(255); + ui->spinBox_3->setMaximum(255); + ui->dial_4->setValue(0); + ui->spinBox_4->setValue(0); + ui->dial_5->setValue(0); + ui->spinBox_5->setValue(0); + ui->dial_6->setValue(0); + ui->spinBox_6->setValue(0); + ui->dial->setDisabled(false); + ui->dial_2->setDisabled(false); + ui->dial_3->setDisabled(false); + ui->dial_4->setDisabled(true); + ui->dial_5->setDisabled(true); + ui->dial_6->setDisabled(true); + ui->spinBox->setDisabled(false); + ui->spinBox_2->setDisabled(false); + ui->spinBox_3->setDisabled(false); + ui->spinBox_4->setDisabled(true); + ui->spinBox_5->setDisabled(true); + ui->spinBox_6->setDisabled(true); + break; + + case effects::BIG_FUZZ: + ui->dial->setMaximum(255); + ui->spinBox->setMaximum(255); + ui->dial_2->setMaximum(255); + ui->spinBox_2->setMaximum(255); + ui->dial_3->setMaximum(255); + ui->spinBox_3->setMaximum(255); + ui->dial_4->setValue(0); + ui->spinBox_4->setValue(0); + ui->dial_5->setValue(0); + ui->spinBox_5->setValue(0); + ui->dial_6->setValue(0); + ui->spinBox_6->setValue(0); + ui->dial->setDisabled(false); + ui->dial_2->setDisabled(false); + ui->dial_3->setDisabled(false); + ui->dial_4->setDisabled(true); + ui->dial_5->setDisabled(true); + ui->dial_6->setDisabled(true); + ui->spinBox->setDisabled(false); + ui->spinBox_2->setDisabled(false); + ui->spinBox_3->setDisabled(false); + ui->spinBox_4->setDisabled(true); + ui->spinBox_5->setDisabled(true); + ui->spinBox_6->setDisabled(true); + break; + + case effects::WAH_MOD: + ui->dial->setMaximum(255); + ui->spinBox->setMaximum(255); + ui->dial_2->setMaximum(255); + ui->spinBox_2->setMaximum(255); + ui->dial_3->setMaximum(255); + ui->spinBox_3->setMaximum(255); + ui->dial_4->setMaximum(255); + ui->spinBox_4->setMaximum(255); + ui->dial_5->setMaximum(1); + ui->spinBox_5->setMaximum(1); + ui->dial_6->setValue(0); + ui->spinBox_6->setValue(0); + ui->dial->setDisabled(false); + ui->dial_2->setDisabled(false); + ui->dial_3->setDisabled(false); + ui->dial_4->setDisabled(false); + ui->dial_5->setDisabled(false); + ui->dial_6->setDisabled(true); + ui->spinBox->setDisabled(false); + ui->spinBox_2->setDisabled(false); + ui->spinBox_3->setDisabled(false); + ui->spinBox_4->setDisabled(false); + ui->spinBox_5->setDisabled(false); + ui->spinBox_6->setDisabled(true); + break; + + case effects::TOUCH_WAH_MOD: + ui->dial->setMaximum(255); + ui->spinBox->setMaximum(255); + ui->dial_2->setMaximum(255); + ui->spinBox_2->setMaximum(255); + ui->dial_3->setMaximum(255); + ui->spinBox_3->setMaximum(255); + ui->dial_4->setMaximum(255); + ui->spinBox_4->setMaximum(255); + ui->dial_5->setMaximum(1); + ui->spinBox_5->setMaximum(1); + ui->dial_6->setValue(0); + ui->spinBox_6->setValue(0); + ui->dial->setDisabled(false); + ui->dial_2->setDisabled(false); + ui->dial_3->setDisabled(false); + ui->dial_4->setDisabled(false); + ui->dial_5->setDisabled(false); + ui->dial_6->setDisabled(true); + ui->spinBox->setDisabled(false); + ui->spinBox_2->setDisabled(false); + ui->spinBox_3->setDisabled(false); + ui->spinBox_4->setDisabled(false); + ui->spinBox_5->setDisabled(false); + ui->spinBox_6->setDisabled(true); + break; + + case effects::DIATONIC_PITCH_SHIFTER: + ui->dial->setMaximum(255); + ui->spinBox->setMaximum(255); + ui->dial_2->setMaximum(21); + ui->spinBox_2->setMaximum(21); // 22 - 1 + ui->dial_3->setMaximum(11); + ui->spinBox_3->setMaximum(11); + ui->dial_4->setMaximum(8); + ui->spinBox_4->setMaximum(8); + ui->dial_5->setMaximum(255); + ui->spinBox_5->setMaximum(255); + ui->dial_6->setValue(0); + ui->spinBox_6->setValue(0); + ui->dial->setDisabled(false); + ui->dial_2->setDisabled(false); + ui->dial_3->setDisabled(false); + ui->dial_4->setDisabled(false); + ui->dial_5->setDisabled(false); + ui->dial_6->setDisabled(true); + ui->spinBox->setDisabled(false); + ui->spinBox_2->setDisabled(false); + ui->spinBox_3->setDisabled(false); + ui->spinBox_4->setDisabled(false); + ui->spinBox_5->setDisabled(false); + ui->spinBox_6->setDisabled(true); + break; + default: ui->dial->setMaximum(255); ui->spinBox->setMaximum(255); @@ -547,6 +885,79 @@ namespace plug tr("Disabled box"), tr("This box is disabled in this effect")}); break; + /* Mustang I V2 */ + case effects::RANGER_BOOST: + setTexts(ui.get(), + mapLbls["Level"], + mapLbls["Gain"], + mapLbls["Low"], + mapLbls["Brightness"], + mapLbls["Disabled"], + mapLbls["Disabled"]); + break; + case effects::GREENBOX: + setTexts(ui.get(), + mapLbls["Level"], + mapLbls["Tone"], + mapLbls["Gain"], + mapLbls["Blend"], + mapLbls["Disabled"], + mapLbls["Disabled"]); + break; + case effects::ORANGEBOX: + setTexts(ui.get(), + mapLbls["Level"], + mapLbls["Distortion"], + mapLbls["Tone"], + mapLbls["Disabled"], + mapLbls["Disabled"], + mapLbls["Disabled"]); + break; + case effects::BLACKBOX: + setTexts(ui.get(), + mapLbls["Level"], + mapLbls["Distortion"], + mapLbls["High"], // AKA Filter + mapLbls["Disabled"], + mapLbls["Disabled"], + mapLbls["Disabled"]); + break; + case effects::BIG_FUZZ: + setTexts(ui.get(), + mapLbls["Level"], + mapLbls["Tone"], + mapLbls["Sustain"], + mapLbls["Disabled"], + mapLbls["Disabled"], + mapLbls["Disabled"]); + break; + case effects::WAH_MOD: + setTexts(ui.get(), + mapLbls["Mix"], + mapLbls["Freq"], + mapLbls["MaxFreq"], // Heel freq + mapLbls["MinFreq"], // Toe freq + mapLbls["HighQ"], + mapLbls["Disabled"]); + break; + case effects::TOUCH_WAH_MOD: + setTexts(ui.get(), + mapLbls["Mix"], + mapLbls["Sensitivity"], + mapLbls["MinFreq"], + mapLbls["MaxFreq"], + mapLbls["HighQ"], + mapLbls["Disabled"]); + break; + case effects::DIATONIC_PITCH_SHIFTER: + setTexts(ui.get(), + mapLbls["Mix"], + mapLbls["Pitch"], + mapLbls["Key"], + mapLbls["Scale"], + mapLbls["Tone"], + mapLbls["Disabled"]); + break; case effects::SINE_CHORUS: case effects::TRIANGLE_CHORUS: setTexts(ui.get(), diff --git a/src/ui/defaulteffects.ui b/src/ui/defaulteffects.ui index f62bfe5d..8b477247 100644 --- a/src/ui/defaulteffects.ui +++ b/src/ui/defaulteffects.ui @@ -86,6 +86,31 @@ [1] Compressor + + + [1] Ranger Boost + + + + + [1] Green Box + + + + + [1] Orange Box + + + + + [1] Black Box + + + + + [1] Big Fuzz + + [2] Sine Chorus @@ -141,6 +166,16 @@ [2] Pitch Schifter + + + [2] Wah + + + + + [2] Touch Wah + + [3] Mono Delay diff --git a/src/ui/effect.cpp b/src/ui/effect.cpp index 502f9486..e0598527 100644 --- a/src/ui/effect.cpp +++ b/src/ui/effect.cpp @@ -79,6 +79,7 @@ namespace plug } + static QMap mapLbls; Effect::Effect(QWidget* parent, FxSlot fxSlot) : QMainWindow(parent), @@ -137,6 +138,139 @@ namespace plug QShortcut* default_fx = new QShortcut(QKeySequence(QString("Ctrl+F%1").arg(slotArg)), this, nullptr, nullptr, Qt::ApplicationShortcut); connect(default_fx, SIGNAL(activated()), this, SLOT(load_default_fx())); + + mapLbls["Level"] = UIText{ + tr("&Level"), + tr("Effect's %1 \"Level\" dial").arg(slot.id() + 1), + tr("Allows you to set \"Level\" parameter of this effect"), + tr("Effect's %1 \"Level\" box").arg(slot.id() + 1), + tr("Allows you to precisely set \"Level\" parameter of this effect")}; + mapLbls["Gain"] = UIText{ + tr("&Gain"), + tr("Effect's %1 \"Gain\" dial").arg(slot.id() + 1), + tr("Allows you to set \"Gain\" parameter of this effect"), + tr("Effect's %1 \"Gain\" box").arg(slot.id() + 1), + tr("Allows you to precisely set \"Gain\" parameter of this effect")}; + mapLbls["Low"] = UIText{ + tr("L&ow"), + tr("Effect's %1 \"Low tones\" dial").arg(slot.id() + 1), + tr("Allows you to set \"Low tones\" parameter of this effect"), + tr("Effect's %1 \"Low tones\" box").arg(slot.id() + 1), + tr("Allows you to precisely set \"Low tones\" parameter of this effect")}; + mapLbls["Brightness"] = UIText{ + tr("&Brightness"), + tr("Effect's %1 \"Brightness\" dial").arg(slot.id() + 1), + tr("Allows you to set \"Brightness\" parameter of this effect"), + tr("Effect's %1 \"Brightness\" box").arg(slot.id() + 1), + tr("Allows you to precisely set \"Brightness\" parameter of this effect")}; + mapLbls["Disabled"] = UIText{ + tr(""), + tr("Disabled dial"), + tr("This dial is disabled in this effect"), + tr("Disabled box"), + tr("This box is disabled in this effect")}; + mapLbls["Tone"] = UIText{ + tr("&Tone"), + tr("Effect's %1 \"Tone\" dial").arg(slot.id() + 1), + tr("Allows you to set \"Tone\" parameter of this effect"), + tr("Effect's %1 \"Tone\" box").arg(slot.id() + 1), + tr("Allows you to precisely set \"Tone\" parameter of this effect")}; + mapLbls["Blend"] = UIText{ + tr("&Blend"), + tr("Effect's %1 \"Blend\" dial").arg(slot.id() + 1), + tr("Allows you to set \"Blend\" parameter of this effect"), + tr("Effect's %1 \"Blend\" box").arg(slot.id() + 1), + tr("Allows you to precisely set \"Blend\" parameter of this effect")}; + mapLbls["Distortion"] = UIText{ + tr("&Distortion"), + tr("Effect's %1 \"Distortion\" dial").arg(slot.id() + 1), + tr("Allows you to set \"Distortion\" parameter of this effect"), + tr("Effect's %1 \"Distortion\" box").arg(slot.id() + 1), + tr("Allows you to precisely set \"Distortion\" parameter of this effect")}; + mapLbls["High"] = UIText{ + tr("&High"), + tr("Effect's %1 \"High tones\" dial").arg(slot.id() + 1), + tr("Allows you to set \"High tones\" parameter of this effect"), + tr("Effect's %1 \"High tones\" box").arg(slot.id() + 1), + tr("Allows you to precisely set \"High tones\" parameter of this effect")}; + mapLbls["Sustain"] = UIText{ + tr("&Sustain"), + tr("Effect's %1 \"Sustain tones\" dial").arg(slot.id() + 1), + tr("Allows you to set \"Sustain tones\" parameter of this effect"), + tr("Effect's %1 \"Sustain tones\" box").arg(slot.id() + 1), + tr("Allows you to precisely set \"Sustain tones\" parameter of this effect")}; + mapLbls["Mix"] = UIText{ + tr("&Mix"), + tr("Effect's %1 \"Mix\" dial").arg(slot.id() + 1), + tr("Allows you to set \"Mix\" parameter of this effect"), + tr("Effect's %1 \"Mix\" box").arg(slot.id() + 1), + tr("Allows you to precisely set \"Mix\" parameter of this effect")}; + mapLbls["Sensitivity"] = UIText{ + tr("&Sensivity"), + tr("Effect's %1 \"Sensivity\" dial").arg(slot.id() + 1), + tr("Allows you to set \"Sensivity\" parameter of this effect"), + tr("Effect's %1 \"Sensivity\" box").arg(slot.id() + 1), + tr("Allows you to precisely set \"Sensivity\" parameter of this effect")}; + mapLbls["Frequency"] = UIText{ + tr("&Frequency"), + tr("Effect's %1 \"Frequency\" dial").arg(slot.id() + 1), + tr("Allows you to set \"Frequency\" parameter of this effect"), + tr("Effect's %1 \"Frequency\" box").arg(slot.id() + 1), + tr("Allows you to precisely set \"Frequency\" parameter of this effect")}; + mapLbls["HeelFreq"] = UIText{ + tr("&Heel Freq"), + tr("Effect's %1 \"Heel Frequency\" dial").arg(slot.id() + 1), + tr("Allows you to set \"Heel Frequency\" parameter of this effect"), + tr("Effect's %1 \"Heel Frequency\" box").arg(slot.id() + 1), + tr("Allows you to precisely set \"Heel Frequency\" parameter of this effect")}; + mapLbls["ToeFreq"] = UIText{ + tr("&Toe Freq"), + tr("Effect's %1 \"Toe Frequency\" dial").arg(slot.id() + 1), + tr("Allows you to set \"Toe Frequency\" parameter of this effect"), + tr("Effect's %1 \"Toe Frequency\" box").arg(slot.id() + 1), + tr("Allows you to precisely set \"Toe Frequency\" parameter of this effect")}; + mapLbls["HighQ"] = UIText{ + tr("High &Q"), + tr("Effect's %1 \"High Q\" dial").arg(slot.id() + 1), + tr("Allows you to set \"High Q\" parameter of this effect"), + tr("Effect's %1 \"High Q\" box").arg(slot.id() + 1), + tr("Allows you to precisely set \"High Q\" parameter of this effect")}; + mapLbls["MinFreq"] = UIText{ + tr("Mi&n Freq"), + tr("Effect's %1 \"Minimum Frequency\" dial").arg(slot.id() + 1), + tr("Allows you to set \"Minimum Frequency\" parameter of this effect"), + tr("Effect's %1 \"Minimum Frequency\" box").arg(slot.id() + 1), + tr("Allows you to precisely set \"Minimum Frequency\" parameter of this effect")}; + mapLbls["MaxFreq"] = UIText{ + tr("Ma&x Freq"), + tr("Effect's %1 \"Maximum Frequency\" dial").arg(slot.id() + 1), + tr("Allows you to set \"Maximum Frequency\" parameter of this effect"), + tr("Effect's %1 \"Maximum Frequency\" box").arg(slot.id() + 1), + tr("Allows you to precisely set \"Maximum Frequency\" parameter of this effect")}; + mapLbls["Pitch"] = UIText{ + tr("&Pitch"), + tr("Effect's %1 \"Pitch\" dial").arg(slot.id() + 1), + tr("Allows you to set \"Pitch\" parameter of this effect"), + tr("Effect's %1 \"Pitch\" box").arg(slot.id() + 1), + tr("Allows you to precisely set \"Pitch\" parameter of this effect")}; + mapLbls["Key"] = UIText{ + tr("&Key"), + tr("Effect's %1 \"Key\" dial").arg(slot.id() + 1), + tr("Allows you to set \"Key\" parameter of this effect"), + tr("Effect's %1 \"Key\" box").arg(slot.id() + 1), + tr("Allows you to precisely set \"Key\" parameter of this effect")}; + mapLbls["Scale"] = UIText{ + tr("&Scale"), + tr("Effect's %1 \"Scale\" dial").arg(slot.id() + 1), + tr("Allows you to set \"Scale\" parameter of this effect"), + tr("Effect's %1 \"Scale\" box").arg(slot.id() + 1), + tr("Allows you to precisely set \"Scale\" parameter of this effect")}; + mapLbls["Tone"] = UIText{ + tr("&Tone"), + tr("Effect's %1 \"Tone\" dial").arg(slot.id() + 1), + tr("Allows you to set \"Tone\" parameter of this effect"), + tr("Effect's %1 \"Tone\" box").arg(slot.id() + 1), + tr("Allows you to precisely set \"Tone\" parameter of this effect")}; } Effect::~Effect() @@ -333,6 +467,222 @@ namespace plug ui->spinBox_6->setDisabled(false); break; + case effects::RANGER_BOOST: + ui->dial->setMaximum(255); + ui->spinBox->setMaximum(255); + ui->dial_2->setMaximum(255); + ui->spinBox_2->setMaximum(255); + ui->dial_3->setMaximum(255); + ui->spinBox_3->setMaximum(255); + ui->dial_4->setMaximum(255); + ui->spinBox_4->setMaximum(255); + ui->dial_5->setValue(0); + ui->spinBox_5->setValue(0); + ui->dial_6->setValue(0); + ui->spinBox_6->setValue(0); + ui->dial->setDisabled(false); + ui->dial_2->setDisabled(false); + ui->dial_3->setDisabled(false); + ui->dial_4->setDisabled(false); + ui->dial_5->setDisabled(true); + ui->dial_6->setDisabled(true); + ui->spinBox->setDisabled(false); + ui->spinBox_2->setDisabled(false); + ui->spinBox_3->setDisabled(false); + ui->spinBox_4->setDisabled(false); + ui->spinBox_5->setDisabled(true); + ui->spinBox_6->setDisabled(true); + break; + + case effects::GREENBOX: + ui->dial->setMaximum(255); + ui->spinBox->setMaximum(255); + ui->dial_2->setMaximum(255); + ui->spinBox_2->setMaximum(255); + ui->dial_3->setMaximum(255); + ui->spinBox_3->setMaximum(255); + ui->dial_4->setMaximum(255); + ui->spinBox_4->setMaximum(255); + ui->dial_5->setValue(0); + ui->spinBox_5->setValue(0); + ui->dial_6->setValue(0); + ui->spinBox_6->setValue(0); + ui->dial->setDisabled(false); + ui->dial_2->setDisabled(false); + ui->dial_3->setDisabled(false); + ui->dial_4->setDisabled(false); + ui->dial_5->setDisabled(true); + ui->dial_6->setDisabled(true); + ui->spinBox->setDisabled(false); + ui->spinBox_2->setDisabled(false); + ui->spinBox_3->setDisabled(false); + ui->spinBox_4->setDisabled(false); + ui->spinBox_5->setDisabled(true); + ui->spinBox_6->setDisabled(true); + break; + + case effects::ORANGEBOX: + ui->dial->setMaximum(255); + ui->spinBox->setMaximum(255); + ui->dial_2->setMaximum(255); + ui->spinBox_2->setMaximum(255); + ui->dial_3->setMaximum(255); + ui->spinBox_3->setMaximum(255); + ui->dial_4->setValue(0); + ui->spinBox_4->setValue(0); + ui->dial_5->setValue(0); + ui->spinBox_5->setValue(0); + ui->dial_6->setValue(0); + ui->spinBox_6->setValue(0); + ui->dial->setDisabled(false); + ui->dial_2->setDisabled(false); + ui->dial_3->setDisabled(false); + ui->dial_4->setDisabled(true); + ui->dial_5->setDisabled(true); + ui->dial_6->setDisabled(true); + ui->spinBox->setDisabled(false); + ui->spinBox_2->setDisabled(false); + ui->spinBox_3->setDisabled(false); + ui->spinBox_4->setDisabled(true); + ui->spinBox_5->setDisabled(true); + ui->spinBox_6->setDisabled(true); + break; + + case effects::BLACKBOX: + ui->dial->setMaximum(255); + ui->spinBox->setMaximum(255); + ui->dial_2->setMaximum(255); + ui->spinBox_2->setMaximum(255); + ui->dial_3->setMaximum(255); + ui->spinBox_3->setMaximum(255); + ui->dial_4->setValue(0); + ui->spinBox_4->setValue(0); + ui->dial_5->setValue(0); + ui->spinBox_5->setValue(0); + ui->dial_6->setValue(0); + ui->spinBox_6->setValue(0); + ui->dial->setDisabled(false); + ui->dial_2->setDisabled(false); + ui->dial_3->setDisabled(false); + ui->dial_4->setDisabled(true); + ui->dial_5->setDisabled(true); + ui->dial_6->setDisabled(true); + ui->spinBox->setDisabled(false); + ui->spinBox_2->setDisabled(false); + ui->spinBox_3->setDisabled(false); + ui->spinBox_4->setDisabled(true); + ui->spinBox_5->setDisabled(true); + ui->spinBox_6->setDisabled(true); + break; + + case effects::BIG_FUZZ: + ui->dial->setMaximum(255); + ui->spinBox->setMaximum(255); + ui->dial_2->setMaximum(255); + ui->spinBox_2->setMaximum(255); + ui->dial_3->setMaximum(255); + ui->spinBox_3->setMaximum(255); + ui->dial_4->setValue(0); + ui->spinBox_4->setValue(0); + ui->dial_5->setValue(0); + ui->spinBox_5->setValue(0); + ui->dial_6->setValue(0); + ui->spinBox_6->setValue(0); + ui->dial->setDisabled(false); + ui->dial_2->setDisabled(false); + ui->dial_3->setDisabled(false); + ui->dial_4->setDisabled(true); + ui->dial_5->setDisabled(true); + ui->dial_6->setDisabled(true); + ui->spinBox->setDisabled(false); + ui->spinBox_2->setDisabled(false); + ui->spinBox_3->setDisabled(false); + ui->spinBox_4->setDisabled(true); + ui->spinBox_5->setDisabled(true); + ui->spinBox_6->setDisabled(true); + break; + + case effects::WAH_MOD: + ui->dial->setMaximum(255); + ui->spinBox->setMaximum(255); + ui->dial_2->setMaximum(255); + ui->spinBox_2->setMaximum(255); + ui->dial_3->setMaximum(255); + ui->spinBox_3->setMaximum(255); + ui->dial_4->setMaximum(255); + ui->spinBox_4->setMaximum(255); + ui->dial_5->setMaximum(1); + ui->spinBox_5->setMaximum(1); + ui->dial_6->setValue(0); + ui->spinBox_6->setValue(0); + ui->dial->setDisabled(false); + ui->dial_2->setDisabled(false); + ui->dial_3->setDisabled(false); + ui->dial_4->setDisabled(false); + ui->dial_5->setDisabled(false); + ui->dial_6->setDisabled(true); + ui->spinBox->setDisabled(false); + ui->spinBox_2->setDisabled(false); + ui->spinBox_3->setDisabled(false); + ui->spinBox_4->setDisabled(false); + ui->spinBox_5->setDisabled(false); + ui->spinBox_6->setDisabled(true); + break; + + case effects::TOUCH_WAH_MOD: + ui->dial->setMaximum(255); + ui->spinBox->setMaximum(255); + ui->dial_2->setMaximum(255); + ui->spinBox_2->setMaximum(255); + ui->dial_3->setMaximum(255); + ui->spinBox_3->setMaximum(255); + ui->dial_4->setMaximum(255); + ui->spinBox_4->setMaximum(255); + ui->dial_5->setMaximum(1); + ui->spinBox_5->setMaximum(1); + ui->dial_6->setValue(0); + ui->spinBox_6->setValue(0); + ui->dial->setDisabled(false); + ui->dial_2->setDisabled(false); + ui->dial_3->setDisabled(false); + ui->dial_4->setDisabled(false); + ui->dial_5->setDisabled(false); + ui->dial_6->setDisabled(true); + ui->spinBox->setDisabled(false); + ui->spinBox_2->setDisabled(false); + ui->spinBox_3->setDisabled(false); + ui->spinBox_4->setDisabled(false); + ui->spinBox_5->setDisabled(false); + ui->spinBox_6->setDisabled(true); + break; + + case effects::DIATONIC_PITCH_SHIFTER: + ui->dial->setMaximum(255); + ui->spinBox->setMaximum(255); + ui->dial_2->setMaximum(21); + ui->spinBox_2->setMaximum(21); // 22 - 1 + ui->dial_3->setMaximum(11); + ui->spinBox_3->setMaximum(11); + ui->dial_4->setMaximum(8); + ui->spinBox_4->setMaximum(8); + ui->dial_5->setMaximum(255); + ui->spinBox_5->setMaximum(255); + ui->dial_6->setValue(0); + ui->spinBox_6->setValue(0); + ui->dial->setDisabled(false); + ui->dial_2->setDisabled(false); + ui->dial_3->setDisabled(false); + ui->dial_4->setDisabled(false); + ui->dial_5->setDisabled(false); + ui->dial_6->setDisabled(true); + ui->spinBox->setDisabled(false); + ui->spinBox_2->setDisabled(false); + ui->spinBox_3->setDisabled(false); + ui->spinBox_4->setDisabled(false); + ui->spinBox_5->setDisabled(false); + ui->spinBox_6->setDisabled(true); + break; + default: ui->dial->setMaximum(255); ui->spinBox->setMaximum(255); @@ -391,6 +741,26 @@ namespace plug setTitleTexts(slot.id(), "Compressor"); break; + case effects::RANGER_BOOST: + setTitleTexts(slot.id(), "Ranger Boost"); + break; + + case effects::GREENBOX: + setTitleTexts(slot.id(), "Greenbox"); + break; + + case effects::ORANGEBOX: + setTitleTexts(slot.id(), "Orangebox"); + break; + + case effects::BLACKBOX: + setTitleTexts(slot.id(), "Blackbox"); + break; + + case effects::BIG_FUZZ: + setTitleTexts(slot.id(), "Big Fuzz"); + break; + case effects::SINE_CHORUS: setTitleTexts(slot.id(), "Sine Chorus"); break; @@ -435,6 +805,18 @@ namespace plug setTitleTexts(slot.id(), "Pitch Shifter"); break; + case effects::WAH_MOD: + setTitleTexts(slot.id(), "Wah"); + break; + + case effects::TOUCH_WAH_MOD: + setTitleTexts(slot.id(), "Touch Wah"); + break; + + case effects::DIATONIC_PITCH_SHIFTER: + setTitleTexts(slot.id(), "Diatonic Pitch Shifter"); + break; + case effects::MONO_DELAY: setTitleTexts(slot.id(), "Mono Delay"); break; @@ -827,6 +1209,79 @@ namespace plug tr("Disabled box"), tr("This box is disabled in this effect")}); break; + // Mustang I V2 + case effects::RANGER_BOOST: + setTexts(ui.get(), + mapLbls["Level"], + mapLbls["Gain"], + mapLbls["Low"], + mapLbls["Brightness"], + mapLbls["Disabled"], + mapLbls["Disabled"]); + break; + case effects::GREENBOX: + setTexts(ui.get(), + mapLbls["Level"], + mapLbls["Gain"], + mapLbls["Tone"], + mapLbls["Blend"], + mapLbls["Disabled"], + mapLbls["Disabled"]); + break; + case effects::ORANGEBOX: + setTexts(ui.get(), + mapLbls["Level"], + mapLbls["Distortion"], + mapLbls["Tone"], + mapLbls["Disabled"], + mapLbls["Disabled"], + mapLbls["Disabled"]); + break; + case effects::BLACKBOX: + setTexts(ui.get(), + mapLbls["Level"], + mapLbls["Distortion"], + mapLbls["High"], // AKA Filter + mapLbls["Disabled"], + mapLbls["Disabled"], + mapLbls["Disabled"]); + break; + case effects::BIG_FUZZ: + setTexts(ui.get(), + mapLbls["Level"], + mapLbls["Tone"], + mapLbls["Sustain"], + mapLbls["Disabled"], + mapLbls["Disabled"], + mapLbls["Disabled"]); + break; + case effects::WAH_MOD: + setTexts(ui.get(), + mapLbls["Mix"], + mapLbls["Frequency"], + mapLbls["HeelFreq"], + mapLbls["ToeFreq"], + mapLbls["HighQ"], + mapLbls["Disabled"]); + break; + case effects::TOUCH_WAH_MOD: + setTexts(ui.get(), + mapLbls["Mix"], + mapLbls["Sensitivity"], + mapLbls["MinFreq"], + mapLbls["MaxFreq"], + mapLbls["HighQ"], + mapLbls["Disabled"]); + break; + case effects::DIATONIC_PITCH_SHIFTER: + setTexts(ui.get(), + mapLbls["Mix"], + mapLbls["Pitch"], + mapLbls["Key"], + mapLbls["Scale"], + mapLbls["Tone"], + mapLbls["Disabled"]); + break; case effects::SINE_CHORUS: case effects::TRIANGLE_CHORUS: setTexts(ui.get(), @@ -1547,6 +2002,30 @@ namespace plug { switch (static_cast(value)) { + case effects::RANGER_BOOST: + setDialValues(0x64, 0xba, 0x01, 0x9b, 0x00, 0x00); + break; + case effects::GREENBOX: + setDialValues(0x81, 0xb1, 0x8c, 0xff, 0x00, 0x00); + break; + case effects::ORANGEBOX: + setDialValues(0x81, 0x81, 0x81, 0x00, 0x00, 0x00); + break; + case effects::BLACKBOX: + setDialValues(0x81, 0x81, 0x56, 0x00, 0x00, 0x00); + break; + case effects::BIG_FUZZ: + setDialValues(0xac, 0xac, 0x73, 0x00, 0x00, 0x00); + break; + case effects::WAH_MOD: + setDialValues(0xff, 0x81, 0x01, 0xff, 0x00, 0x00); + break; + case effects::TOUCH_WAH_MOD: + setDialValues(0xed, 0x81, 0x07, 0xff, 0x00, 0x00); + break; + case effects::DIATONIC_PITCH_SHIFTER: + setDialValues(0x56, 0x09, 0x04, 0x05, 0xc8, 0x00); + break; case effects::EMPTY: break; case effects::OVERDRIVE: diff --git a/src/ui/effect.ui b/src/ui/effect.ui index e1bc4a78..c5f96d5d 100644 --- a/src/ui/effect.ui +++ b/src/ui/effect.ui @@ -228,6 +228,46 @@ [4] '65 Fender Spring Reverb + + + [1] Ranger Boost + + + + + [1] Green Box + + + + + [1] Orange Box + + + + + [1] Black Box + + + + + [1] Big Fuzz + + + + + [2] Wah + + + + + [2] Touch Wah + + + + + [2] Diatonic Pitch Shifter + + diff --git a/src/ui/loadfromfile.cpp b/src/ui/loadfromfile.cpp index c74f7c70..0bbe0496 100644 --- a/src/ui/loadfromfile.cpp +++ b/src/ui/loadfromfile.cpp @@ -118,6 +118,26 @@ namespace plug case 0x6d: amp.amp_num = amps::METAL_2000; break; + + case 0xf1: + amp.amp_num = amps::STUDIO_PREAMP; + break; + + case 0xf6: + amp.amp_num = amps::FENDER_57_TWIN; + break; + + case 0xf9: + amp.amp_num = amps::FENDER_60_THRIFT; + break; + + case 0xfc: + amp.amp_num = amps::BRITISH_COLOUR; + break; + + case 0xff: + amp.amp_num = amps::BRITISH_WATTS; + break; } } else if (xml.name().toString() == "Param") @@ -361,6 +381,38 @@ namespace plug case 0x0b: effect.effect_num = effects::FENDER_65_SPRING_REVERB; break; + + case 0x103: + effect.effect_num = effects::RANGER_BOOST; + break; + + case 0xba: + effect.effect_num = effects::GREENBOX; + break; + + case 0x110: + effect.effect_num = effects::ORANGEBOX; + break; + + case 0x111: + effect.effect_num = effects::BLACKBOX; + break; + + case 0x10f: + effect.effect_num = effects::BIG_FUZZ; + break; + + case 0xf4: + effect.effect_num = effects::WAH_MOD; + break; + + case 0xf5: + effect.effect_num = effects::TOUCH_WAH_MOD; + break; + + case 0x11f: + effect.effect_num = effects::DIATONIC_PITCH_SHIFTER; + break; } } else if (xml.name().toString() == "Param") diff --git a/src/ui/mainwindow.cpp b/src/ui/mainwindow.cpp index 056c0634..f1617719 100644 --- a/src/ui/mainwindow.cpp +++ b/src/ui/mainwindow.cpp @@ -54,11 +54,13 @@ namespace plug { return 0; } - if ((value >= effects::OVERDRIVE) && (value <= effects::COMPRESSOR)) + if (((value >= effects::OVERDRIVE) && (value <= effects::COMPRESSOR)) || + ((value >= effects::RANGER_BOOST) && (value <= effects::BIG_FUZZ))) // had to add this, because the effects are appended into the effects enum { return 1; } - if ((value >= effects::SINE_CHORUS) && (value <= effects::PITCH_SHIFTER)) + if (((value >= effects::SINE_CHORUS) && (value <= effects::PITCH_SHIFTER)) || + ((value >= effects::WAH_MOD) && (value <= effects::DIATONIC_PITCH_SHIFTER))) { return 2; } diff --git a/src/ui/savetofile.cpp b/src/ui/savetofile.cpp index ffd50c9f..67642068 100644 --- a/src/ui/savetofile.cpp +++ b/src/ui/savetofile.cpp @@ -532,6 +532,30 @@ namespace plug case effects::FENDER_65_SPRING_REVERB: model = 0x0b; break; + case effects::RANGER_BOOST: + model = 0x103; + break; + case effects::GREENBOX: + model = 0xba; + break; + case effects::ORANGEBOX: + model = 0x110; + break; + case effects::BLACKBOX: + model = 0x111; + break; + case effects::BIG_FUZZ: + model = 0x10f; + break; + case effects::WAH_MOD: + model = 0xf4; + break; + case effects::TOUCH_WAH_MOD: + model = 0xf5; + break; + case effects::DIATONIC_PITCH_SHIFTER: + model = 0x11f; + break; } xml->writeStartElement("Module"); diff --git a/test/IdLookupTest.cpp b/test/IdLookupTest.cpp index 1c15b5d1..b1d06d3c 100644 --- a/test/IdLookupTest.cpp +++ b/test/IdLookupTest.cpp @@ -97,6 +97,16 @@ namespace plug::test EXPECT_EQ(lookupEffectById(0x4d), effects::ARENA_REVERB); EXPECT_EQ(lookupEffectById(0x21), effects::FENDER_63_SPRING_REVERB); EXPECT_EQ(lookupEffectById(0x0b), effects::FENDER_65_SPRING_REVERB); + + /* Mustang I V2 */ + EXPECT_EQ(lookupEffectById(0x03, 0x1), effects::RANGER_BOOST); + EXPECT_EQ(lookupEffectById(0xba), effects::GREENBOX); + EXPECT_EQ(lookupEffectById(0x10, 0x1), effects::ORANGEBOX); + EXPECT_EQ(lookupEffectById(0x11, 0x1), effects::BLACKBOX); + EXPECT_EQ(lookupEffectById(0x0f, 0x1), effects::BIG_FUZZ); + EXPECT_EQ(lookupEffectById(0xf4), effects::WAH_MOD); + EXPECT_EQ(lookupEffectById(0xf5), effects::TOUCH_WAH_MOD); + EXPECT_EQ(lookupEffectById(0x1f, 0x10), effects::DIATONIC_PITCH_SHIFTER); } TEST_F(IdLookupTest, lookupEffectByIdThrowsOnInvalidId)