NeuralAmpModelerPlugin

Plugin for Neural Amp Modeler
Log | Files | Refs | Submodules | README | LICENSE

commit 69589426ca52b62e186640fa793b87e88c740f9d
parent d0d5a389413eb1be0229e5181bef7bac211e0aaf
Author: Oli Larkin <olilarkin@googlemail.com>
Date:   Tue,  2 May 2023 06:01:21 +0200

Clean up UI for new design (#227)

* Remove the need for inactive spec/lambdas

Using OnParamChangeUI & IControl::SetDisabled()

* Remove unused Tolex resources

* Replace doubled-up knobs with NamKnobControl

Also fix some AttachControl() bugs

* Update iPlug2 submodule

* Add NamSwitchControl and tweak layout

Sliding bitmap switch

* Adjust GREYED_ALPHA for disabled controls

* Disable normalization control when .nam doesn't have loudness

Removed bad control tag, ITextControl for Normalization label and non-thread-safe UI access
Diffstat:
MNeuralAmpModeler/NeuralAmpModeler.cpp | 273+++++++++++++++++++++++++++++++++++--------------------------------------------
MNeuralAmpModeler/NeuralAmpModeler.h | 23+++++------------------
MNeuralAmpModeler/config.h | 4++--
MNeuralAmpModeler/config/NeuralAmpModeler-ios.xcconfig | 2+-
MNeuralAmpModeler/config/NeuralAmpModeler-mac.xcconfig | 2+-
MNeuralAmpModeler/config/NeuralAmpModeler-win.props | 2+-
MNeuralAmpModeler/resources/img/SkinEHeritage_Toggle.png | 0
MNeuralAmpModeler/resources/img/SkinEHeritage_Toggle@2x.png | 0
ANeuralAmpModeler/resources/img/SkinEHeritage_ToggleHandle.png | 0
ANeuralAmpModeler/resources/img/SkinEHeritage_ToggleHandle@2x.png | 0
DNeuralAmpModeler/resources/img/tolex.jpeg | 0
DNeuralAmpModeler/resources/img/tolex@2x.jpeg | 0
MNeuralAmpModeler/resources/main.rc | 4++--
13 files changed, 133 insertions(+), 177 deletions(-)

diff --git a/NeuralAmpModeler/NeuralAmpModeler.cpp b/NeuralAmpModeler/NeuralAmpModeler.cpp @@ -63,8 +63,66 @@ public: void OnMsgFromDelegate(int msgTag, int dataSize, const void* pData) { SetStr(reinterpret_cast<const char*>(pData)); } }; +class NamKnobControl : public IVKnobControl + , public IBitmapBase +{ +public: + NamKnobControl(const IRECT& bounds, int paramIdx, const char* label, const IVStyle& style, IBitmap bitmap) + : IVKnobControl(bounds, paramIdx, label, style) + , IBitmapBase(bitmap) + { + } + + void DrawWidget(IGraphics& g) override + { + float widgetRadius = GetRadius(); + const float cx = mWidgetBounds.MW(), cy = mWidgetBounds.MH(); + IRECT knobHandleBounds = mWidgetBounds.GetCentredInside((widgetRadius - mTrackToHandleDistance) * 2.f ); + const float angle = mAngle1 + (static_cast<float>(GetValue()) * (mAngle2 - mAngle1)); + g.FillEllipse(GetColor(mMouseIsOver ? kX3 : kX1), knobHandleBounds, &mBlend); + DrawIndicatorTrack(g, angle, cx, cy, widgetRadius); + g.DrawRotatedBitmap(mBitmap, mRECT.MW(), mRECT.MH(), angle); + } +}; + +class NamSwitchControl : public IVSlideSwitchControl + , public IBitmapBase +{ +public: + NamSwitchControl(const IRECT& bounds, int paramIdx, const char* label, const IVStyle& style, IBitmap bitmap, IBitmap handleBitmap) + : IVSlideSwitchControl({bounds.L, bounds.T, bitmap}, paramIdx, label, style.WithRoundness(5.f).WithShowLabel(false).WithShowValue(false)) + , IBitmapBase(bitmap) + , mHandleBitmap(handleBitmap) + { + } + + void DrawWidget(IGraphics& g) override + { + // OL: arg, pixels :-( + if (GetValue() > 0.5f) + g.FillRoundRect(GetColor(kFG), mRECT.GetPadded(-2.7f).GetTranslated(0.0, 1.f), 9.f, &mBlend); + else + g.FillRoundRect(COLOR_BLACK, mRECT.GetPadded(-2.7f).GetTranslated(0.0, 1.f), 9.f, &mBlend); + + DrawTrack(g, mWidgetBounds); + DrawHandle(g, mHandleBounds); + } + + void DrawTrack(IGraphics& g, const IRECT& filledArea) override + { + g.DrawBitmap(mBitmap, mRECT, 0, &mBlend); + } + + void DrawHandle(IGraphics& g, const IRECT& filledArea) override + { + g.DrawBitmap(mHandleBitmap, filledArea.GetTranslated(2.0, 3.0), 0, &mBlend); + } +private: + IBitmap mHandleBitmap; +}; + // Styles -const IVColorSpec activeColorSpec{ +const IVColorSpec colorSpec{ DEFAULT_BGCOLOR, // Background PluginColors::NAM_THEMECOLOR, // Foreground PluginColors::NAM_THEMECOLOR.WithOpacity(0.3f), // Pressed @@ -73,23 +131,13 @@ const IVColorSpec activeColorSpec{ DEFAULT_SHCOLOR, // Shadow PluginColors::NAM_THEMECOLOR, // Extra 1 COLOR_RED, // Extra 2 --> color for clipping in meters - DEFAULT_X3COLOR // Extra 3 -}; -const IVColorSpec inactiveColorSpec{ - DEFAULT_BGCOLOR, // Background - PluginColors::NAM_THEMEFONTCOLOR.WithOpacity(0.3f), // Foreground - PluginColors::NAM_THEMECOLOR.WithOpacity(0.3f), // Pressed - PluginColors::NAM_0, // Frame - PluginColors::NAM_0, // Highlight - DEFAULT_SHCOLOR.WithOpacity(0.5f), // Shadow - PluginColors::NAM_THEMECOLOR.WithOpacity(0.5f), // Extra 1 - COLOR_RED.WithOpacity(0.5f), // Extra 2 - DEFAULT_X3COLOR.WithOpacity(0.5f) // Extra 3 + PluginColors::NAM_THEMECOLOR.WithContrast(0.1f), // Extra 3 }; + const IVStyle style = IVStyle{true, // Show label true, // Show value - activeColorSpec, + colorSpec, {DEFAULT_TEXT_SIZE + 3.f, EVAlign::Middle, PluginColors::NAM_THEMEFONTCOLOR}, // Knob label text5 {DEFAULT_TEXT_SIZE + 3.f, EVAlign::Bottom, PluginColors::NAM_THEMEFONTCOLOR}, // Knob value text DEFAULT_HIDE_CURSOR, @@ -101,7 +149,6 @@ const IVStyle style = DEFAULT_SHADOW_OFFSET, DEFAULT_WIDGET_FRAC, DEFAULT_WIDGET_ANGLE}; -const IVStyle styleInactive = style.WithColors(inactiveColorSpec); NeuralAmpModeler::NeuralAmpModeler(const InstanceInfo& info) : Plugin(info, MakeConfig(kNumParams, kNumPresets)) @@ -114,8 +161,6 @@ NeuralAmpModeler::NeuralAmpModeler(const InstanceInfo& info) , mStagedIR(nullptr) , mFlagRemoveNAM(false) , mFlagRemoveIR(false) -, mFlagSetDisableNormalization(false) -, mSetDisableNormalization(false) , mDefaultNAMString("Select model...") , mDefaultIRString("Select IR...") , mToneBass() @@ -159,7 +204,8 @@ NeuralAmpModeler::NeuralAmpModeler(const InstanceInfo& info) auto closeButtonSVG = pGraphics->LoadSVG(CLOSE_BUTTON_FN); auto rightArrowSVG = pGraphics->LoadSVG(RIGHT_ARROW_FN); auto leftArrowSVG = pGraphics->LoadSVG(LEFT_ARROW_FN); - const IBitmap switchBitmap = pGraphics->LoadBitmap((TOGGLE_FN), 2, true); + const IBitmap switchBitmap = pGraphics->LoadBitmap((TOGGLE_FN), true); + const IBitmap switchHandleBitmap = pGraphics->LoadBitmap((TOGGLE_HANDLE_FN), true); const IBitmap knobRotateBitmap = pGraphics->LoadBitmap(KNOB_FN); pGraphics->LoadFont("Roboto-Regular", ROBOTO_FN); const IRECT b = pGraphics->GetBounds(); @@ -193,21 +239,19 @@ NeuralAmpModeler::NeuralAmpModeler(const InstanceInfo& info) const float ngAreaHeight = toggleHeight; const float ngAreaHalfWidth = 0.5f * noiseGateArea.W(); const IRECT ngToggleArea = noiseGateArea.GetFromBottom(ngAreaHeight) - .GetTranslated(0.0f, ngAreaHeight + singleKnobPad - 14.f) - .GetMidHPadded(ngAreaHalfWidth); - + .GetTranslated(-10.f, ngAreaHeight + singleKnobPad - 14.f); // Area for EQ toggle const float eqAreaHeight = toggleHeight; const float eqAreaHalfWidth = 0.5f * middleKnobArea.W(); const IRECT eqToggleArea = middleKnobArea.GetFromBottom(eqAreaHeight) - .GetTranslated(0.0f, eqAreaHeight + singleKnobPad - 14.f) + .GetTranslated(-10.f, eqAreaHeight + singleKnobPad - 14.f) .GetMidHPadded(eqAreaHalfWidth); // Area for output normalization toggle const float outNormAreaHeight = toggleHeight; const float outNormAreaHalfWidth = 0.5f * outputKnobArea.W(); const IRECT outNormToggleArea = outputKnobArea.GetFromBottom(outNormAreaHeight) - .GetTranslated(0.0f, outNormAreaHeight + singleKnobPad) + .GetTranslated(-10.f, outNormAreaHeight + singleKnobPad - 14.f) .GetMidHPadded(outNormAreaHalfWidth); // Areas for model and IR @@ -229,17 +273,6 @@ NeuralAmpModeler::NeuralAmpModeler(const InstanceInfo& info) .GetMidVPadded(meterHalfHeight) .GetTranslated(allKnobsPad + 18.f, 0.0f); - // auto tolexPNG = pGraphics->LoadBitmap(TOLEX_FN); - // pGraphics->AttachControl(new IBitmapControl(pGraphics->GetBounds(), - // tolexPNG, kNoParameter))->SetBlend(IBlend(EBlend::Default, 0.5)); - // The background inside the outermost border - // pGraphics->AttachControl( - // new IVPanelControl(mainArea, "", style.WithColor(kFG, PluginColors::NAM_1))); // .WithContrast(-0.75) - // pGraphics->AttachControl( - // new IVLabelControl(titleLabel, "Neural Amp Modeler", - // style.WithDrawFrame(false).WithValueText({30, EAlign::Center, - // PluginColors::NAM_THEMEFONTCOLOR}))); - auto themeBG = pGraphics->LoadBitmap(EH_SKIN_FN); pGraphics->AttachControl(new IBitmapControl(pGraphics->GetBounds(), themeBG, kNoParameter)) ->SetBlend(IBlend(EBlend::Default, 1.0)); @@ -349,94 +382,17 @@ NeuralAmpModeler::NeuralAmpModeler(const InstanceInfo& info) style.WithDrawFrame(false).WithValueText(style.valueText.WithSize(16.f).WithVAlign(EVAlign::Middle))), kCtrlTagIRName); - // NG toggle - // underlaying background in theme color for ON state - pGraphics->AttachControl( - new IVPanelControl(ngToggleArea.GetPadded(-12.f).GetTranslated(2.f, 10.0f), "", - style.WithDrawFrame(false).WithColor(kFG, PluginColors::NAM_THEMECOLOR.WithOpacity(0.9f)))); - IBSwitchControl* noiseGateSlider = - new IBSwitchControl(ngToggleArea.GetFromTop(60.f).GetPadded(-20.f), switchBitmap, kNoiseGateActive); - pGraphics->AttachControl(noiseGateSlider); - // Tone stack toggle - pGraphics->AttachControl( - new IVPanelControl(eqToggleArea.GetPadded(-12.f).GetTranslated(2.f, 10.0f), "", - style.WithDrawFrame(false).WithColor(kFG, PluginColors::NAM_THEMECOLOR.WithOpacity(0.9f)))); - IBSwitchControl* toneStackSlider = - new IBSwitchControl(eqToggleArea.GetFromTop(60.f).GetPadded(-20.f), switchBitmap, kEQActive); - pGraphics->AttachControl(toneStackSlider); - - // Normalisation toggle - pGraphics->AttachControl( - new IVPanelControl(outNormToggleArea.GetPadded(-12.f).GetTranslated(2.0f, -4.0f), "", style.WithDrawFrame(false)), - kOutNormPanel); - IBSwitchControl* outputNormSlider = - new IBSwitchControl(outNormToggleArea.GetFromTop(32.f).GetPadded(-20.f), switchBitmap, kOutNorm); - pGraphics->AttachControl(outputNormSlider, kOutNorm); - pGraphics->AttachControl(new ITextControl(outNormToggleArea.GetFromTop(70.f), "Normalize", style.labelText)); + pGraphics->AttachControl(new NamSwitchControl(ngToggleArea.GetFromTop(60.f).GetPadded(-20.f), kNoiseGateActive, "", style, switchBitmap, switchHandleBitmap)); + pGraphics->AttachControl(new NamSwitchControl(eqToggleArea.GetFromTop(60.f).GetPadded(-20.f), kEQActive, "", style, switchBitmap, switchHandleBitmap)); + pGraphics->AttachControl(new NamSwitchControl(outNormToggleArea.GetFromTop(32.f).GetPadded(-20.f), kOutNorm, "", style, switchBitmap, switchHandleBitmap), kCtrlTagOutNorm); // The knobs - // Input - pGraphics->AttachControl(new IVKnobControl(inputKnobArea, kInputLevel, "", style)); - pGraphics->AttachControl( - new IBKnobRotaterControl(inputKnobArea, knobRotateBitmap, kInputLevel), kNoTag, "kInputLevel"); - // Noise gate - const bool noiseGateIsActive = this->GetParam(kNoiseGateActive)->Value(); - const IVStyle noiseGateInitialStyle = noiseGateIsActive ? style : styleInactive; - IVKnobControl* noiseGateControl = new IVKnobControl(noiseGateArea, kNoiseGateThreshold, "", noiseGateInitialStyle); - pGraphics->AttachControl(noiseGateControl); - pGraphics->AttachControl( - new IBKnobRotaterControl(noiseGateArea, knobRotateBitmap, kNoiseGateThreshold), kNoTag, "kNoiseGateThreshold"); - // Tone stack - const bool toneStackIsActive = this->GetParam(kEQActive)->Value(); - const IVStyle toneStackInitialStyle = toneStackIsActive ? style : styleInactive; - IVKnobControl* bassControl = new IVKnobControl(bassKnobArea, kToneBass, "", toneStackInitialStyle); - IVKnobControl* middleControl = new IVKnobControl(middleKnobArea, kToneMid, "", toneStackInitialStyle); - IVKnobControl* trebleControl = new IVKnobControl(trebleKnobArea, kToneTreble, "", toneStackInitialStyle); - pGraphics->AttachControl(bassControl); - pGraphics->AttachControl(middleControl); - pGraphics->AttachControl(trebleControl); - pGraphics->AttachControl(new IBKnobRotaterControl(bassKnobArea, knobRotateBitmap, kToneBass), kNoTag, "kToneBass"); - pGraphics->AttachControl(new IBKnobRotaterControl(middleKnobArea, knobRotateBitmap, kToneMid), kNoTag, "kToneMid"); - pGraphics->AttachControl( - new IBKnobRotaterControl(trebleKnobArea, knobRotateBitmap, kToneTreble), kNoTag, "kToneTreble"); - // Output - pGraphics->AttachControl(new IVKnobControl(outputKnobArea, kOutputLevel, "", style)); - pGraphics->AttachControl( - new IBKnobRotaterControl(outputKnobArea, knobRotateBitmap, kOutputLevel), kNoTag, "kOutputLevel"); - - // Extend the noise gate action function to set the style of its knob - auto setNoiseGateKnobStyles = [&, pGraphics, noiseGateControl](IControl* pCaller) { - const bool noiseGateActive = pCaller->GetValue() > 0; - const IVStyle noiseGateStyle = noiseGateActive ? style : styleInactive; - noiseGateControl->SetStyle(noiseGateStyle); - noiseGateControl->SetDirty(false); - }; - auto defaultNoiseGateSliderAction = noiseGateSlider->GetActionFunction(); - // hacky attempt to fix IBSwitchControl action function - auto noiseGateAction = [/* defaultNoiseGateSliderAction, */ setNoiseGateKnobStyles](IControl* pCaller) { - // defaultNoiseGateSliderAction(pCaller); - setNoiseGateKnobStyles(pCaller); - }; - noiseGateSlider->SetActionFunction(noiseGateAction); - // Extend the slider action function to set the style of its knobs - auto setToneStackKnobStyles = [&, pGraphics, bassControl, middleControl, trebleControl](IControl* pCaller) { - const bool toneStackActive = pCaller->GetValue() > 0; - const IVStyle toneStackStyle = toneStackActive ? style : styleInactive; - bassControl->SetStyle(toneStackStyle); - middleControl->SetStyle(toneStackStyle); - trebleControl->SetStyle(toneStackStyle); - - bassControl->SetDirty(false); - middleControl->SetDirty(false); - trebleControl->SetDirty(false); - }; - auto defaultToneStackSliderAction = toneStackSlider->GetActionFunction(); - // hacky attempt to fix IBSwitchControl action function - auto toneStackAction = [/* defaultToneStackSliderAction, */ setToneStackKnobStyles](IControl* pCaller) { - // defaultToneStackSliderAction(pCaller); - setToneStackKnobStyles(pCaller); - }; - toneStackSlider->SetActionFunction(toneStackAction); + pGraphics->AttachControl(new NamKnobControl(inputKnobArea, kInputLevel, "", style, knobRotateBitmap)); + pGraphics->AttachControl(new NamKnobControl(noiseGateArea, kNoiseGateThreshold, "", style, knobRotateBitmap)); + pGraphics->AttachControl(new NamKnobControl(bassKnobArea, kToneBass, "", style, knobRotateBitmap)); + pGraphics->AttachControl(new NamKnobControl(middleKnobArea, kToneMid, "", style, knobRotateBitmap)); + pGraphics->AttachControl(new NamKnobControl(trebleKnobArea, kToneTreble, "", style, knobRotateBitmap)); + pGraphics->AttachControl(new NamKnobControl(outputKnobArea, kOutputLevel, "", style, knobRotateBitmap)); // The meters const float meterMin = -90.0f; @@ -626,6 +582,27 @@ void NeuralAmpModeler::ProcessBlock(iplug::sample** inputs, iplug::sample** outp this->_UpdateMeters(this->mInputPointers, outputs, numFrames, numChannelsInternal, numChannelsExternalOut); } +void NeuralAmpModeler::OnReset() +{ + const auto sampleRate = this->GetSampleRate(); + this->mInputSender.Reset(sampleRate); + this->mOutputSender.Reset(sampleRate); +} + +void NeuralAmpModeler::OnIdle() +{ + this->mInputSender.TransmitData(*this); + this->mOutputSender.TransmitData(*this); + + if (this->mNewNAMLoadedInDSP) + { + if (GetUI()) + this->GetUI()->GetControlWithTag(kCtrlTagOutNorm)->SetDisabled(!this->mNAM->HasLoudness()); + + this->mNewNAMLoadedInDSP = false; + } +} + bool NeuralAmpModeler::SerializeState(IByteChunk& chunk) const { // Model directory (don't serialize the model itself; we'll just load it again @@ -658,7 +635,29 @@ void NeuralAmpModeler::OnUIOpen() if (this->mIRPath.GetLength()) this->_SetIRMsg(this->mIRPath); if (this->mNAM != nullptr) - this->_SetOutputNormalizationDisableState(!this->mNAM->HasLoudness()); + this->GetUI()->GetControlWithTag(kCtrlTagOutNorm)->SetDisabled(!this->mNAM->HasLoudness()); +} + +void NeuralAmpModeler::OnParamChangeUI(int paramIdx, EParamSource source) +{ + if (auto pGraphics = GetUI()) + { + bool active = GetParam(paramIdx)->Bool(); + + switch (paramIdx) + { + case kNoiseGateActive: + pGraphics->GetControlWithParamIdx(kNoiseGateThreshold)->SetDisabled(!active); + break; + case kEQActive: + pGraphics->GetControlWithParamIdx(kToneBass)->SetDisabled(!active); + pGraphics->GetControlWithParamIdx(kToneMid)->SetDisabled(!active); + pGraphics->GetControlWithParamIdx(kToneTreble)->SetDisabled(!active); + break; + default: + break; + } + } } // Private methods ============================================================ @@ -685,8 +684,7 @@ void NeuralAmpModeler::_ApplyDSPStaging() // Move from staged to active DSP this->mNAM = std::move(this->mStagedNAM); this->mStagedNAM = nullptr; - this->mFlagSetDisableNormalization = true; - this->mSetDisableNormalization = !mNAM->HasLoudness(); + this->mNewNAMLoadedInDSP = true; } if (this->mStagedIR != nullptr) { @@ -708,11 +706,6 @@ void NeuralAmpModeler::_ApplyDSPStaging() this->_UnsetIRMsg(); this->mFlagRemoveIR = false; } - if (this->mFlagSetDisableNormalization) - { - if (this->_SetOutputNormalizationDisableState(this->mSetDisableNormalization)) - this->mFlagSetDisableNormalization = false; - } } void NeuralAmpModeler::_DeallocateIOPointers() @@ -923,30 +916,6 @@ void NeuralAmpModeler::_SetIRMsg(const WDL_String& irPath) SendControlMsgFromDelegate(kCtrlTagIRName, 0, int(strlen(ss.str().c_str())), ss.str().c_str()); } -bool NeuralAmpModeler::_SetOutputNormalizationDisableState(const bool disable) -{ - bool success = false; - auto ui = this->GetUI(); - if (ui != nullptr) - { - auto c = ui->GetControlWithTag(kOutNorm); - if (c != nullptr) - { - c->SetDisabled(disable); - success = c->IsDisabled() == disable; - } - // also hide the themecolored panel behind the toggle for the ON-stae - auto p = ui->GetControlWithTag(kOutNormPanel); - if (p != nullptr) - { - const IVStyle normtoggleStyle = - c->IsDisabled() ? style.WithColor(kFG, PluginColors::NAM_0).WithColor(kFR, PluginColors::NAM_0) : style; - p->As<IVectorBase>()->SetStyle(normtoggleStyle); - } - } - return success; -} - void NeuralAmpModeler::_UnsetModelMsg() { this->_UnsetMsg(kCtrlTagModelName, this->mDefaultNAMString); diff --git a/NeuralAmpModeler/NeuralAmpModeler.h b/NeuralAmpModeler/NeuralAmpModeler.h @@ -26,7 +26,6 @@ enum EParams kNoiseGateActive, kEQActive, kOutNorm, - kOutNormPanel, kNumParams }; @@ -39,6 +38,7 @@ enum ECtrlTags kCtrlTagInputMeter, kCtrlTagOutputMeter, kCtrlTagAboutBox, + kCtrlTagOutNorm, kNumCtrlTags }; @@ -49,23 +49,15 @@ public: ~NeuralAmpModeler(); void ProcessBlock(iplug::sample** inputs, iplug::sample** outputs, int nFrames) override; - void OnReset() override - { - const auto sampleRate = this->GetSampleRate(); - this->mInputSender.Reset(sampleRate); - this->mOutputSender.Reset(sampleRate); - } - void OnIdle() override - { - this->mInputSender.TransmitData(*this); - this->mOutputSender.TransmitData(*this); - } + void OnReset() override; + void OnIdle() override; bool SerializeState(iplug::IByteChunk& chunk) const override; int UnserializeState(const iplug::IByteChunk& chunk, int startPos) override; void OnUIOpen() override; bool OnHostRequestingSupportedViewConfiguration(int width, int height) override { return true; } + void OnParamChangeUI(int paramIdx, iplug::EParamSource source) override; private: // Allocates mInputPointers and mOutputPointers void _AllocateIOPointers(const size_t nChans); @@ -109,8 +101,6 @@ private: // Disable Normalization toggle when no loudness data in model metadata // Sometimes the UI isn't initialized, so we have to try again later. // - // Returns whether it was successful - bool _SetOutputNormalizationDisableState(const bool disable); void _UnsetModelMsg(); void _UnsetIRMsg(); void _UnsetMsg(const int tag, const WDL_String& msg); @@ -148,10 +138,7 @@ private: bool mFlagRemoveIR; const WDL_String mDefaultNAMString; const WDL_String mDefaultIRString; - - // Try to set the diable state of output normalization - bool mFlagSetDisableNormalization; - bool mSetDisableNormalization; // True = Disable + std::atomic<bool> mNewNAMLoadedInDSP = false; // Tone stack modules recursive_linear_filter::LowShelf mToneBass; diff --git a/NeuralAmpModeler/config.h b/NeuralAmpModeler/config.h @@ -57,8 +57,6 @@ #define FILE_FN "SkinEHeritage_File.svg" #define FOLDER_FN "folder.svg" #define CLOSE_BUTTON_FN "SkinEHeritage_Close-button.svg" -#define TOLEX_FN "tolex.jpeg" -#define TOLEX2X_FN "tolex@2x.jpeg" #define LEFT_ARROW_FN "SkinEHeritage_ArrowLeft.svg" #define RIGHT_ARROW_FN "SkinEHeritage_ArrowRight.svg" #define EH_SKIN_FN "SkinEHeritage_BG.jpeg" @@ -67,3 +65,5 @@ #define KNOB2X_FN "SkinEHeritage_Knob@2x.png" #define TOGGLE_FN "SkinEHeritage_Toggle.png" #define TOGGLE2X_FN "SkinEHeritage_Toggle@2x.png" +#define TOGGLE_HANDLE_FN "SkinEHeritage_ToggleHandle.png" +#define TOGGLE_HANDLE2X_FN "SkinEHeritage_ToggleHandle@2x.png" diff --git a/NeuralAmpModeler/config/NeuralAmpModeler-ios.xcconfig b/NeuralAmpModeler/config/NeuralAmpModeler-ios.xcconfig @@ -22,7 +22,7 @@ EXTRA_LNK_FLAGS = -framework Metal -framework MetalKit -framework Accelerate//$( //------------------------------ // PREPROCESSOR MACROS -EXTRA_ALL_DEFS = OBJC_PREFIX=vNeuralAmpModeler IGRAPHICS_NANOVG IGRAPHICS_METAL SAMPLE_TYPE_FLOAT +EXTRA_ALL_DEFS = OBJC_PREFIX=vNeuralAmpModeler IGRAPHICS_NANOVG IGRAPHICS_METAL SAMPLE_TYPE_FLOAT GRAYED_ALPHA=0.5f //EXTRA_DEBUG_DEFS = //EXTRA_RELEASE_DEFS = //EXTRA_TRACER_DEFS = diff --git a/NeuralAmpModeler/config/NeuralAmpModeler-mac.xcconfig b/NeuralAmpModeler/config/NeuralAmpModeler-mac.xcconfig @@ -24,7 +24,7 @@ EXTRA_LNK_FLAGS = -framework Accelerate -framework Metal -framework MetalKit // //------------------------------ // PREPROCESSOR MACROS -EXTRA_ALL_DEFS = OBJC_PREFIX=vNeuralAmpModeler SWELL_APP_PREFIX=Swell_vNeuralAmpModeler IGRAPHICS_NANOVG IGRAPHICS_METAL +EXTRA_ALL_DEFS = OBJC_PREFIX=vNeuralAmpModeler SWELL_APP_PREFIX=Swell_vNeuralAmpModeler IGRAPHICS_NANOVG IGRAPHICS_METAL GRAYED_ALPHA=0.5f //EXTRA_DEBUG_DEFS = //EXTRA_RELEASE_DEFS = //EXTRA_TRACER_DEFS = diff --git a/NeuralAmpModeler/config/NeuralAmpModeler-win.props b/NeuralAmpModeler/config/NeuralAmpModeler-win.props @@ -3,7 +3,7 @@ <PropertyGroup Label="UserMacros"> <IPLUG2_ROOT>$(ProjectDir)..\..\iPlug2</IPLUG2_ROOT> <BINARY_NAME>NeuralAmpModeler</BINARY_NAME> - <EXTRA_ALL_DEFS>IGRAPHICS_NANOVG;IGRAPHICS_GL2</EXTRA_ALL_DEFS> + <EXTRA_ALL_DEFS>IGRAPHICS_NANOVG;IGRAPHICS_GL2;GRAYED_ALPHA=0.5f</EXTRA_ALL_DEFS> <EXTRA_DEBUG_DEFS /> <EXTRA_RELEASE_DEFS /> <EXTRA_TRACER_DEFS /> diff --git a/NeuralAmpModeler/resources/img/SkinEHeritage_Toggle.png b/NeuralAmpModeler/resources/img/SkinEHeritage_Toggle.png Binary files differ. diff --git a/NeuralAmpModeler/resources/img/SkinEHeritage_Toggle@2x.png b/NeuralAmpModeler/resources/img/SkinEHeritage_Toggle@2x.png Binary files differ. diff --git a/NeuralAmpModeler/resources/img/SkinEHeritage_ToggleHandle.png b/NeuralAmpModeler/resources/img/SkinEHeritage_ToggleHandle.png Binary files differ. diff --git a/NeuralAmpModeler/resources/img/SkinEHeritage_ToggleHandle@2x.png b/NeuralAmpModeler/resources/img/SkinEHeritage_ToggleHandle@2x.png Binary files differ. diff --git a/NeuralAmpModeler/resources/img/tolex.jpeg b/NeuralAmpModeler/resources/img/tolex.jpeg Binary files differ. diff --git a/NeuralAmpModeler/resources/img/tolex@2x.jpeg b/NeuralAmpModeler/resources/img/tolex@2x.jpeg Binary files differ. diff --git a/NeuralAmpModeler/resources/main.rc b/NeuralAmpModeler/resources/main.rc @@ -230,8 +230,6 @@ END // #include "..\config.h" ROBOTO_FN TTF ROBOTO_FN -TOLEX_FN JPEG TOLEX_FN -TOLEX2X_FN JPEG TOLEX2X_FN FILE_FN SVG FILE_FN FOLDER_FN SVG FOLDER_FN CLOSE_BUTTON_FN SVG CLOSE_BUTTON_FN @@ -244,6 +242,8 @@ KNOB_FN PNG KNOB_FN KNOB2X_FN PNG KNOB2X_FN TOGGLE_FN PNG TOGGLE_FN TOGGLE2X_FN PNG TOGGLE2X_FN +TOGGLE_HANDLE_FN PNG TOGGLE_HANDLE_FN +TOGGLE_HANDLE2X_FN PNG TOGGLE_HANDLE2X_FN ///////////////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED