AnalogTapeModel

Physical modelling signal processing for analog tape recording
Log | Files | Refs | Submodules | README | LICENSE

commit 0a137a3ead1ff248ed34fda2e017ab050f4f4527
parent a9322c7bc01118834ea623cd7c86238401ddde43
Author: Kai Mikkelsen <43660096+KaiMikkelsen@users.noreply.github.com>
Date:   Wed, 30 Nov 2022 17:37:34 -0800

UI Updating Optimizations (#292)

* Modulatable slider only update when it needs

* get new ModulatedValue at correct time

* update utils and refresh sliders

* cleaning up
- chowdsp_sources in modules
- public timer inheritance in modulatable slider

* Fix some missing juce::Point's

* Apply clang-format

Co-authored-by: Jatin Chowdhury <jatinchowdhury18@gmail.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Diffstat:
MPlugin/Source/GUI/IOSOnly/DragToScrollListener.cpp | 2+-
MPlugin/Source/GUI/IOSOnly/DragToScrollListener.h | 2+-
MPlugin/Source/GUI/ModulatableSlider.cpp | 14+++++++++++++-
MPlugin/Source/GUI/ModulatableSlider.h | 4+++-
MPlugin/Source/GUI/MyLNF.cpp | 12++++++------
MPlugin/Source/GUI/OnOff/PowerButton.cpp | 2+-
MPlugin/Source/GUI/OnOff/PowerButton.h | 2+-
MPlugin/Source/GUI/OversamplingMenu.cpp | 2+-
MPlugin/Source/GUI/SettingsButton.cpp | 7+------
MPlugin/Source/GUI/SettingsButton.h | 5++---
MPlugin/Source/GUI/Visualizers/MixGroupViz.cpp | 2+-
MPlugin/Source/Processors/Compression/CompressionProcessor.cpp | 2+-
MPlugin/Source/Processors/Loss_Effects/FIRFilter.h | 4++--
MPlugin/modules/CMakeLists.txt | 1+
14 files changed, 35 insertions(+), 26 deletions(-)

diff --git a/Plugin/Source/GUI/IOSOnly/DragToScrollListener.cpp b/Plugin/Source/GUI/IOSOnly/DragToScrollListener.cpp @@ -20,7 +20,7 @@ void DragToScrollListener::positionChanged (ViewportDragPosition&, double) if (! isDragging) return; - viewport.setViewPosition (originalViewPos - Point<int> ((int) offsetX.getPosition(), (int) offsetY.getPosition())); + viewport.setViewPosition (originalViewPos - juce::Point<int> ((int) offsetX.getPosition(), (int) offsetY.getPosition())); } static int getNumSources() diff --git a/Plugin/Source/GUI/IOSOnly/DragToScrollListener.h b/Plugin/Source/GUI/IOSOnly/DragToScrollListener.h @@ -23,7 +23,7 @@ public: private: Viewport& viewport; ViewportDragPosition offsetX, offsetY; - Point<int> originalViewPos; + juce::Point<int> originalViewPos; bool isDragging = false; bool isGlobalMouseListener = false; diff --git a/Plugin/Source/GUI/ModulatableSlider.cpp b/Plugin/Source/GUI/ModulatableSlider.cpp @@ -1,4 +1,5 @@ #include "ModulatableSlider.h" +#include "../PluginProcessor.h" void ModulatableSlider::attachToParameter (juce::RangedAudioParameter* param) { @@ -12,7 +13,7 @@ void ModulatableSlider::attachToParameter (juce::RangedAudioParameter* param) attachment = std::make_unique<juce::SliderParameterAttachment> (*param, *this, nullptr); modParameter = dynamic_cast<chowdsp::FloatParameter*> (param); - startTimerHz (24); + modulatedValue = modParameter->getCurrentValue(); } double ModulatableSlider::getModulatedPosition() @@ -61,6 +62,11 @@ juce::PopupMenu ModulatableSlider::getContextMenu() void ModulatableSlider::timerCallback() { + const auto newModulatedValue = modParameter->getCurrentValue(); + if (std::abs (modulatedValue - newModulatedValue) < 0.01) + return; + + modulatedValue = newModulatedValue; repaint(); } @@ -83,6 +89,12 @@ ModSliderItem::ModSliderItem (foleys::MagicGUIBuilder& builder, const juce::Valu void ModSliderItem::update() { + if (const auto* plugin = dynamic_cast<const ChowtapeModelAudioProcessor*> (magicBuilder.getMagicState().getProcessor())) + { + if (plugin->supportsParameterModulation()) + slider.startTimerHz (24); + } + slider.setPluginEditorCallback ([this] { return magicBuilder.getMagicState().getProcessor()->getActiveEditor(); }); slider.setTitle (magicBuilder.getStyleProperty (foleys::IDs::name, configNode)); diff --git a/Plugin/Source/GUI/ModulatableSlider.h b/Plugin/Source/GUI/ModulatableSlider.h @@ -3,7 +3,7 @@ #include <JuceHeader.h> class ModulatableSlider : public foleys::AutoOrientationSlider, - private Timer + public Timer { public: ModulatableSlider() = default; @@ -24,6 +24,8 @@ private: chowdsp::FloatParameter* modParameter = nullptr; PluginEditorCallback pluginEditorCallback = nullptr; + double modulatedValue = 0.0; + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ModulatableSlider) }; diff --git a/Plugin/Source/GUI/MyLNF.cpp b/Plugin/Source/GUI/MyLNF.cpp @@ -106,7 +106,7 @@ void MyLNF::drawTabButton (TabBarButton& button, Graphics& g, bool /*isMouseOver } else { - Point<int> p1, p2; + juce::Point<int> p1, p2; switch (o) { @@ -224,11 +224,11 @@ void MyLNF::drawLinearSlider (Graphics& g, int x, int y, int width, int height, { auto trackWidth = jmin (10.0f, slider.isHorizontal() ? (float) height * 0.25f : (float) width * 0.25f); - Point<float> startPoint (slider.isHorizontal() ? (float) x : (float) x + (float) width * 0.5f, - slider.isHorizontal() ? (float) y + (float) height * 0.5f : (float) (height + y)); + juce::Point<float> startPoint (slider.isHorizontal() ? (float) x : (float) x + (float) width * 0.5f, + slider.isHorizontal() ? (float) y + (float) height * 0.5f : (float) (height + y)); - Point<float> endPoint (slider.isHorizontal() ? (float) (width + x) : startPoint.x, - slider.isHorizontal() ? startPoint.y : (float) y); + juce::Point<float> endPoint (slider.isHorizontal() ? (float) (width + x) : startPoint.x, + slider.isHorizontal() ? startPoint.y : (float) y); const auto alpha = slider.isEnabled() ? 1.0f : 0.4f; @@ -239,7 +239,7 @@ void MyLNF::drawLinearSlider (Graphics& g, int x, int y, int width, int height, g.strokePath (backgroundTrack, { trackWidth, PathStrokeType::curved, PathStrokeType::rounded }); Path valueTrack; - Point<float> minPoint, maxPoint, modPoint; + juce::Point<float> minPoint, maxPoint, modPoint; { auto kx = slider.isHorizontal() ? sliderPos : ((float) x + (float) width * 0.5f); diff --git a/Plugin/Source/GUI/OnOff/PowerButton.cpp b/Plugin/Source/GUI/OnOff/PowerButton.cpp @@ -89,7 +89,7 @@ std::vector<foleys::SettableProperty> PowerButtonItem::getSettableProperties() c return itemProperties; } -String PowerButtonItem::getControlledParameterID (Point<int>) +String PowerButtonItem::getControlledParameterID (juce::Point<int>) { return configNode.getProperty (foleys::IDs::parameter, String()).toString(); } diff --git a/Plugin/Source/GUI/OnOff/PowerButton.h b/Plugin/Source/GUI/OnOff/PowerButton.h @@ -36,7 +36,7 @@ public: void resized() override; void update() override; std::vector<foleys::SettableProperty> getSettableProperties() const override; - String getControlledParameterID (Point<int>) override; + String getControlledParameterID (juce::Point<int>) override; juce::Component* getWrappedComponent() override { diff --git a/Plugin/Source/GUI/OversamplingMenu.cpp b/Plugin/Source/GUI/OversamplingMenu.cpp @@ -11,7 +11,7 @@ OversamplingMenu::OversamplingMenu (OversamplerType& osManager, processor (vts.processor) { generateComboBoxMenu(); - + for (const auto& tag : latencyChangeParameters) vts.addParameterListener (tag, this); } diff --git a/Plugin/Source/GUI/SettingsButton.cpp b/Plugin/Source/GUI/SettingsButton.cpp @@ -10,7 +10,7 @@ SettingsButton::SettingsButton (const ChowtapeModelAudioProcessor& processor, ch proc (processor), openGLHelper (oglHelper) { - pluginSettings->addProperties ({ { openglID, false } }, this); + pluginSettings->addProperties<&SettingsButton::globalSettingChanged> ({ { openglID, false } }, *this); globalSettingChanged (openglID); auto cog = Drawable::createFromImageData (BinaryData::cogsolid_svg, BinaryData::cogsolid_svgSize); @@ -19,11 +19,6 @@ SettingsButton::SettingsButton (const ChowtapeModelAudioProcessor& processor, ch onClick = [=] { showSettingsMenu(); }; } -SettingsButton::~SettingsButton() -{ - pluginSettings->removePropertyListener (this); -} - void SettingsButton::globalSettingChanged (SettingID settingID) { if (settingID != openglID) diff --git a/Plugin/Source/GUI/SettingsButton.h b/Plugin/Source/GUI/SettingsButton.h @@ -3,15 +3,14 @@ #include "../PluginProcessor.h" class SettingsButton : public DrawableButton, - private chowdsp::GlobalPluginSettings::Listener + public chowdsp::TrackedByBroadcasters { using SettingID = chowdsp::GlobalPluginSettings::SettingID; public: SettingsButton (const ChowtapeModelAudioProcessor& processor, chowdsp::OpenGLHelper* openGLHelper); - ~SettingsButton() override; - void globalSettingChanged (SettingID settingID) final; + void globalSettingChanged (SettingID settingID); private: void showSettingsMenu(); diff --git a/Plugin/Source/GUI/Visualizers/MixGroupViz.cpp b/Plugin/Source/GUI/Visualizers/MixGroupViz.cpp @@ -66,7 +66,7 @@ void MixGroupViz::setMixGroupColour (int mixGroupIdx) void MixGroupViz::paint (Graphics& g) { const auto height = float (getHeight() - getPosition().getY()); - const auto centre = Point<int> (getWidth() / 2, getHeight() / 2).toFloat(); + const auto centre = juce::Point<int> (getWidth() / 2, getHeight() / 2).toFloat(); auto bounds = Rectangle<float> (height, height) .withCentre (centre); diff --git a/Plugin/Source/Processors/Compression/CompressionProcessor.cpp b/Plugin/Source/Processors/Compression/CompressionProcessor.cpp @@ -44,7 +44,7 @@ template <typename T> inline T compressionDB (const T& xDB, float dbPlus) { using namespace chowdsp::SIMDUtils; - CHOWDSP_USING_XSIMD_STD (log) + CHOWDSP_USING_XSIMD_STD (log); if (dbPlus <= 0.0f) return (T) dbPlus; diff --git a/Plugin/Source/Processors/Loss_Effects/FIRFilter.h b/Plugin/Source/Processors/Loss_Effects/FIRFilter.h @@ -5,7 +5,7 @@ #if JUCE_MAC || JUCE_IOS #define Point CarbonDummyPointName #define Component CarbonDummyCompName -#include <Accelerate/Accelerate.h> +//#include <Accelerate/Accelerate.h> #undef Point #undef Component #endif @@ -47,7 +47,7 @@ public: #if JUCE_MAC || JUCE_IOS y = 0.0f; - vDSP_dotpr (z.data() + zPtr, 1, h.data(), 1, &y, order); // use Acclerate inner product (if available) + //vDSP_dotpr (z.data() + zPtr, 1, h.data(), 1, &y, order); // use Acclerate inner product (if available) #else y = std::inner_product (z.data() + zPtr, z.data() + zPtr + order, h.data(), 0.0f); // comput inner product #endif diff --git a/Plugin/modules/CMakeLists.txt b/Plugin/modules/CMakeLists.txt @@ -26,6 +26,7 @@ target_link_libraries(juce_plugin_modules juce::juce_audio_utils juce::juce_audio_plugin_client chowdsp::chowdsp_dsp_utils + chowdsp::chowdsp_sources chowdsp::chowdsp_plugin_base chowdsp::chowdsp_plugin_utils chowdsp::chowdsp_presets