diff options
Diffstat (limited to 'plugins')
37 files changed, 618 insertions, 718 deletions
diff --git a/plugins/ImageToggle.hpp b/plugins/ImageToggle.hpp new file mode 100644 index 0000000..b3800f0 --- /dev/null +++ b/plugins/ImageToggle.hpp @@ -0,0 +1,148 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2014 Filipe Coelho <falktx@falktx.com> + * Copyright (C) 2014 Damien Zammit <damien@zamaudio.com> + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef DGL_IMAGE_TOGGLE_HPP_INCLUDED +#define DGL_IMAGE_TOGGLE_HPP_INCLUDED + +#include "Image.hpp" +#include "Widget.hpp" + +START_NAMESPACE_DGL + +// ----------------------------------------------------------------------- + +class ImageToggle : public Widget +{ +public: + class Callback + { + public: + virtual ~Callback() {} + virtual void imageToggleClicked(ImageToggle* imageToggle, int button) = 0; + }; + + ImageToggle(Window& parent, const Image& imageNormal, const Image& imageDown, int id = 0) + : Widget(parent), + fImageNormal(imageNormal), + fImageDown(imageDown), + fCurImage(&fImageNormal), + fId(id), + fCallback(nullptr) + { + DISTRHO_SAFE_ASSERT(fImageNormal.getSize() == fImageDown.getSize()); + + setSize(fImageNormal.getSize()); + } + + ImageToggle(Widget* widget, const Image& imageNormal, const Image& imageDown, int id = 0) + : Widget(widget->getParentWindow()), + fImageNormal(imageNormal), + fImageDown(imageDown), + fCurImage(&fImageNormal), + fId(id), + fCallback(nullptr) + { + DISTRHO_SAFE_ASSERT(fImageNormal.getSize() == fImageDown.getSize()); + + setSize(fImageNormal.getSize()); + } + + ImageToggle(const ImageToggle& imageToggle) + : Widget(imageToggle.getParentWindow()), + fImageNormal(imageToggle.fImageNormal), + fImageDown(imageToggle.fImageDown), + fCurImage(&fImageNormal), + fId(imageToggle.fId), + fCallback(imageToggle.fCallback) + { + DISTRHO_SAFE_ASSERT(fImageNormal.getSize() == fImageDown.getSize()); + + setSize(fImageNormal.getSize()); + } + + int getId() const noexcept + { + return fId; + } + + void setId(int id) noexcept + { + fId = id; + } + + float getValue() const noexcept + { + return (fCurImage == &fImageNormal) ? 0.0f : 1.0f; + } + + void setValue(float value) noexcept + { + if (value == 1.0f) + fCurImage = &fImageDown; + else if (value == 0.0f) + fCurImage = &fImageNormal; + + repaint(); + } + + void setCallback(Callback* callback) noexcept + { + fCallback = callback; + } + +protected: + void onDisplay() override + { + fCurImage->draw(); + } + + bool onMouse(const MouseEvent& ev) override + { + if (! ev.press) + return false; + if (! contains(ev.pos)) + return false; + + if (fCurImage != &fImageDown) + fCurImage = &fImageDown; + else if (fCurImage != &fImageNormal) + fCurImage = &fImageNormal; + + repaint(); + + if (fCallback != nullptr) + fCallback->imageToggleClicked(this, ev.button); + + return true; + } + +private: + Image fImageNormal; + Image fImageDown; + Image* fCurImage; + int fId; + + Callback* fCallback; + + DISTRHO_LEAK_DETECTOR(ImageToggle) +}; + +// ----------------------------------------------------------------------- + +END_NAMESPACE_DGL + +#endif // DGL_IMAGE_TOGGLE_HPP_INCLUDED diff --git a/plugins/Makefile.mk b/plugins/Makefile.mk index aa405da..340de08 100644 --- a/plugins/Makefile.mk +++ b/plugins/Makefile.mk @@ -14,21 +14,17 @@ include ../../Makefile.mk TARGET_DIR = ../../bin BUILD_C_FLAGS += -I. -BUILD_CXX_FLAGS += -I. -I../../libs/distrho -I../../libs/dgl - -# -------------------------------------------------------------- -# Enable all plugin types - -#all: dssi lv2 vst -all: lv2 +BUILD_CXX_FLAGS += -I. -I.. -I../../libs/distrho -I../../libs/dgl # -------------------------------------------------------------- # Set plugin binary file targets +jack = $(TARGET_DIR)/$(NAME) ladspa_dsp = $(TARGET_DIR)/$(NAME)-ladspa.$(EXT) dssi_dsp = $(TARGET_DIR)/$(NAME)-dssi.$(EXT) dssi_ui = $(TARGET_DIR)/$(NAME)-dssi/$(NAME)_ui -lv2_dsp = $(TARGET_DIR)/$(NAME).lv2/$(NAME).$(EXT) +lv2 = $(TARGET_DIR)/$(NAME).lv2/$(NAME).$(EXT) +lv2_dsp = $(TARGET_DIR)/$(NAME).lv2/$(NAME)_dsp.$(EXT) lv2_ui = $(TARGET_DIR)/$(NAME).lv2/$(NAME)_ui.$(EXT) vst = $(TARGET_DIR)/$(NAME)-vst.$(EXT) @@ -56,17 +52,31 @@ OBJS_UI = endif # -------------------------------------------------------------- +# all needs to be first + +all: + +# -------------------------------------------------------------- # Common %.c.o: %.c - $(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ + $(CC) $< $(BUILD_C_FLAGS) -c -o $@ %.cpp.o: %.cpp $(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ clean: - $(RM) *.o - $(RM) -r $(TARGET_DIR)/$(NAME)-* $(TARGET_DIR)/$(NAME).lv2/ + rm -f *.o + rm -rf $(TARGET_DIR)/$(NAME) $(TARGET_DIR)/$(NAME)-* $(TARGET_DIR)/$(NAME).lv2/ + +# -------------------------------------------------------------- +# JACK + +jack: $(jack) + +$(jack): $(OBJS_DSP) $(OBJS_UI) $(DISTRHO_PLUGIN_FILES) $(DISTRHO_UI_FILES) + mkdir -p $(shell dirname $@) + $(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(DGL_LIBS) $(shell pkg-config --cflags --libs jack) -DDISTRHO_PLUGIN_TARGET_JACK -o $@ # -------------------------------------------------------------- # LADSPA @@ -93,7 +103,12 @@ $(dssi_ui): $(OBJS_UI) $(DISTRHO_UI_FILES) # -------------------------------------------------------------- # LV2 -lv2: $(lv2_dsp) $(lv2_ui) +lv2_one: $(lv2) +lv2_sep: $(lv2_dsp) $(lv2_ui) + +$(lv2): $(OBJS_DSP) $(OBJS_UI) $(DISTRHO_PLUGIN_FILES) $(DISTRHO_UI_FILES) + mkdir -p $(shell dirname $@) + $(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(DGL_LIBS) $(SHARED) -DDISTRHO_PLUGIN_TARGET_LV2 -o $@ $(lv2_dsp): $(OBJS_DSP) $(DISTRHO_PLUGIN_FILES) mkdir -p $(shell dirname $@) diff --git a/plugins/ZaMultiComp/Makefile b/plugins/ZaMultiComp/Makefile index 2250367..76410ac 100644 --- a/plugins/ZaMultiComp/Makefile +++ b/plugins/ZaMultiComp/Makefile @@ -20,13 +20,17 @@ OBJS_UI = \ ZaMultiCompUI.cpp.o # -------------------------------------------------------------- -# No custom UI for now +# Do some magic -#TARGET_NOUI = true +include ../Makefile.mk # -------------------------------------------------------------- -# Do some magic +# Enable all possible plugin types -include ../Makefile.mk +ifeq ($(LINUX),true) +all: jack ladspa dssi lv2_sep vst +else +all: ladspa dssi lv2_sep vst +endif # -------------------------------------------------------------- diff --git a/plugins/ZaMultiComp/ZaMultiCompPlugin.cpp b/plugins/ZaMultiComp/ZaMultiCompPlugin.cpp index 84f9b7f..003c007 100644 --- a/plugins/ZaMultiComp/ZaMultiCompPlugin.cpp +++ b/plugins/ZaMultiComp/ZaMultiCompPlugin.cpp @@ -26,13 +26,6 @@ ZaMultiCompPlugin::ZaMultiCompPlugin() { // set default values d_setProgram(0); - - // reset - d_deactivate(); -} - -ZaMultiCompPlugin::~ZaMultiCompPlugin() -{ } // ----------------------------------------------------------------------- @@ -451,11 +444,6 @@ void ZaMultiCompPlugin::d_activate() } } -void ZaMultiCompPlugin::d_deactivate() -{ - // all values to zero -} - float ZaMultiCompPlugin::run_filter(int i, float in) { in = sanitize_denormal(in); @@ -488,14 +476,14 @@ void ZaMultiCompPlugin::set_lp_coeffs(float fc, float q, float sr, int i, float b2[i] = (float)((1.f - alpha)*inv); } -void ZaMultiCompPlugin::set_hp_coeffs(float fc, float q, float sr, int i, float gain=1.0) -{ +void ZaMultiCompPlugin::set_hp_coeffs(float fc, float q, float sr, int i, float gain=1.0) +{ float omega=(float)(2.f*M_PI*fc/sr); float sn=sin(omega); float cs=cos(omega); float alpha=(float)(sn/(2.f*q)); float inv=(float)(1.f/(1.f+alpha)); - + a0[i] = (float)(gain*inv*(1.f + cs)/2.f); a1[i] = -2.f * a0[i]; a2[i] = a0[i]; @@ -551,7 +539,7 @@ float ZaMultiCompPlugin::run_comp(int k, float in) return sanitize_denormal(out); } -void ZaMultiCompPlugin::d_run(float** inputs, float** outputs, uint32_t frames) +void ZaMultiCompPlugin::d_run(const float** inputs, float** outputs, uint32_t frames) { float srate = d_getSampleRate(); float max = 0.f; diff --git a/plugins/ZaMultiComp/ZaMultiCompPlugin.hpp b/plugins/ZaMultiComp/ZaMultiCompPlugin.hpp index d3d12ca..da25b94 100644 --- a/plugins/ZaMultiComp/ZaMultiCompPlugin.hpp +++ b/plugins/ZaMultiComp/ZaMultiCompPlugin.hpp @@ -66,7 +66,6 @@ public: }; ZaMultiCompPlugin(); - ~ZaMultiCompPlugin() override; protected: // ------------------------------------------------------------------- @@ -100,15 +99,15 @@ protected: // ------------------------------------------------------------------- // Init - void d_initParameter(uint32_t index, Parameter& parameter) ; - void d_initProgramName(uint32_t index, d_string& programName) ; + void d_initParameter(uint32_t index, Parameter& parameter) override; + void d_initProgramName(uint32_t index, d_string& programName) override; // ------------------------------------------------------------------- // Internal data float d_getParameterValue(uint32_t index) const override; void d_setParameterValue(uint32_t index, float value) override; - void d_setProgram(uint32_t index) ; + void d_setProgram(uint32_t index) override; // ------------------------------------------------------------------- // Process @@ -136,8 +135,7 @@ protected: void set_hp_coeffs(float fc, float q, float sr, int i, float gain); void d_activate() override; - void d_deactivate() override; - void d_run(float** inputs, float** outputs, uint32_t frames) override; + void d_run(const float** inputs, float** outputs, uint32_t frames) override; // ------------------------------------------------------------------- @@ -159,7 +157,6 @@ private: float z2[MAX_FILT]; }; - // ----------------------------------------------------------------------- END_NAMESPACE_DISTRHO diff --git a/plugins/ZaMultiComp/ZaMultiCompUI.cpp b/plugins/ZaMultiComp/ZaMultiCompUI.cpp index f8bc5b1..70236af 100644 --- a/plugins/ZaMultiComp/ZaMultiCompUI.cpp +++ b/plugins/ZaMultiComp/ZaMultiCompUI.cpp @@ -1,5 +1,5 @@ /* - * ZaMultiComp mono multiband compressor + * ZaMultiComp mono multiband compressor * Copyright (C) 2014 Damien Zammit <damien@zamaudio.com> * * This program is free software; you can redistribute it and/or @@ -15,8 +15,8 @@ * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ +#include "ZaMultiCompPlugin.hpp" #include "ZaMultiCompUI.hpp" -#include <stdio.h> using DGL::Point; @@ -38,23 +38,23 @@ ZaMultiCompUI::ZaMultiCompUI() fLedRedValue1 = 0.0f; fLedRedValue2 = 0.0f; fLedRedValue3 = 0.0f; - fLedYellowValue = 0.0f; + fLedYellowValue = 0.0f; // knob Image knobImage(ZaMultiCompArtwork::knobData, ZaMultiCompArtwork::knobWidth, ZaMultiCompArtwork::knobHeight); - // knob + // knob fKnobAttack = new ImageKnob(this, knobImage); - fKnobAttack->setPos(24, 43); + fKnobAttack->setAbsolutePos(24, 43); fKnobAttack->setRange(0.1f, 200.0f); fKnobAttack->setStep(0.1f); - fKnobAttack->setLogScale(true); + fKnobAttack->setUsingLogScale(true); fKnobAttack->setDefault(10.0f); fKnobAttack->setRotationAngle(240); fKnobAttack->setCallback(this); fKnobRelease = new ImageKnob(this, knobImage); - fKnobRelease->setPos(108, 43); + fKnobRelease->setAbsolutePos(108, 43); fKnobRelease->setRange(50.0f, 500.0f); fKnobRelease->setStep(1.0f); fKnobRelease->setDefault(80.0f); @@ -62,7 +62,7 @@ ZaMultiCompUI::ZaMultiCompUI() fKnobRelease->setCallback(this); fKnobThresh = new ImageKnob(this, knobImage); - fKnobThresh->setPos(191.5, 43); + fKnobThresh->setAbsolutePos(191.5, 43); fKnobThresh->setRange(-60.0f, 0.0f); fKnobThresh->setStep(1.0f); fKnobThresh->setDefault(0.0f); @@ -70,7 +70,7 @@ ZaMultiCompUI::ZaMultiCompUI() fKnobThresh->setCallback(this); fKnobRatio = new ImageKnob(this, knobImage); - fKnobRatio->setPos(270, 43); + fKnobRatio->setAbsolutePos(270, 43); fKnobRatio->setRange(1.0f, 20.0f); fKnobRatio->setStep(0.1f); fKnobRatio->setDefault(4.0f); @@ -78,7 +78,7 @@ ZaMultiCompUI::ZaMultiCompUI() fKnobRatio->setCallback(this); fKnobKnee = new ImageKnob(this, knobImage); - fKnobKnee->setPos(348.5, 43); + fKnobKnee->setAbsolutePos(348.5, 43); fKnobKnee->setRange(0.0f, 8.0f); fKnobKnee->setStep(0.1f); fKnobKnee->setDefault(0.0f); @@ -86,7 +86,7 @@ ZaMultiCompUI::ZaMultiCompUI() fKnobKnee->setCallback(this); fKnobGlobalGain = new ImageKnob(this, knobImage); - fKnobGlobalGain->setPos(427.3, 43); + fKnobGlobalGain->setAbsolutePos(427.3, 43); fKnobGlobalGain->setRange(-30.0f, 30.0f); fKnobGlobalGain->setStep(1.0f); fKnobGlobalGain->setDefault(0.0f); @@ -94,25 +94,25 @@ ZaMultiCompUI::ZaMultiCompUI() fKnobGlobalGain->setCallback(this); fKnobXover2 = new ImageKnob(this, knobImage); - fKnobXover2->setPos(84, 121); + fKnobXover2->setAbsolutePos(84, 121); fKnobXover2->setRange(1400.f, 14000.f); fKnobXover2->setStep(1.0f); - fKnobXover2->setLogScale(true); + fKnobXover2->setUsingLogScale(true); fKnobXover2->setDefault(1400.f); fKnobXover2->setRotationAngle(240); fKnobXover2->setCallback(this); fKnobXover1 = new ImageKnob(this, knobImage); - fKnobXover1->setPos(84, 176); + fKnobXover1->setAbsolutePos(84, 176); fKnobXover1->setRange(20.0f, 1400.0f); fKnobXover1->setStep(1.0f); - fKnobXover1->setLogScale(true); + fKnobXover1->setUsingLogScale(true); fKnobXover1->setDefault(250.0f); fKnobXover1->setRotationAngle(240); fKnobXover1->setCallback(this); fKnobMakeup3 = new ImageKnob(this, knobImage); - fKnobMakeup3->setPos(167.75, 99.5); + fKnobMakeup3->setAbsolutePos(167.75, 99.5); fKnobMakeup3->setRange(0.0f, 30.0f); fKnobMakeup3->setStep(0.1f); fKnobMakeup3->setDefault(0.0f); @@ -120,7 +120,7 @@ ZaMultiCompUI::ZaMultiCompUI() fKnobMakeup3->setCallback(this); fKnobMakeup2 = new ImageKnob(this, knobImage); - fKnobMakeup2->setPos(167.75, 150.25); + fKnobMakeup2->setAbsolutePos(167.75, 150.25); fKnobMakeup2->setRange(0.0f, 30.0f); fKnobMakeup2->setStep(0.1f); fKnobMakeup2->setDefault(0.0f); @@ -128,7 +128,7 @@ ZaMultiCompUI::ZaMultiCompUI() fKnobMakeup2->setCallback(this); fKnobMakeup1 = new ImageKnob(this, knobImage); - fKnobMakeup1->setPos(167.75, 201.4); + fKnobMakeup1->setAbsolutePos(167.75, 201.4); fKnobMakeup1->setRange(0.0f, 30.0f); fKnobMakeup1->setStep(0.1f); fKnobMakeup1->setDefault(0.0f); @@ -142,61 +142,43 @@ ZaMultiCompUI::ZaMultiCompUI() Point<int> togglePosStart(247,109); - fToggleBypass3 = new ImageToggle(this, toggleoffImage, toggleoffImage, toggleonImage); - fToggleBypass3->setPos(togglePosStart); + fToggleBypass3 = new ImageToggle(this, toggleoffImage, toggleonImage); + fToggleBypass3->setAbsolutePos(togglePosStart); fToggleBypass3->setCallback(this); togglePosStart.setY(158); - fToggleBypass2 = new ImageToggle(this, toggleoffImage, toggleoffImage, toggleonImage); - fToggleBypass2->setPos(togglePosStart); + fToggleBypass2 = new ImageToggle(this, toggleoffImage, toggleonImage); + fToggleBypass2->setAbsolutePos(togglePosStart); fToggleBypass2->setCallback(this); togglePosStart.setY(209); - fToggleBypass1 = new ImageToggle(this, toggleoffImage, toggleoffImage, toggleonImage); - fToggleBypass1->setPos(togglePosStart); + fToggleBypass1 = new ImageToggle(this, toggleoffImage, toggleonImage); + fToggleBypass1->setAbsolutePos(togglePosStart); fToggleBypass1->setCallback(this); togglePosStart.setX(278); togglePosStart.setY(113); - fToggleListen3 = new ImageToggle(this, toggleoffhImage, toggleoffhImage, toggleonhImage); - fToggleListen3->setPos(togglePosStart); + fToggleListen3 = new ImageToggle(this, toggleoffhImage, toggleonhImage); + fToggleListen3->setAbsolutePos(togglePosStart); fToggleListen3->setCallback(this); togglePosStart.setY(164); - fToggleListen2 = new ImageToggle(this, toggleoffhImage, toggleoffhImage, toggleonhImage); - fToggleListen2->setPos(togglePosStart); + fToggleListen2 = new ImageToggle(this, toggleoffhImage, toggleonhImage); + fToggleListen2->setAbsolutePos(togglePosStart); fToggleListen2->setCallback(this); togglePosStart.setY(214); - fToggleListen1 = new ImageToggle(this, toggleoffhImage, toggleoffhImage, toggleonhImage); - fToggleListen1->setPos(togglePosStart); + fToggleListen1 = new ImageToggle(this, toggleoffhImage, toggleonhImage); + fToggleListen1->setAbsolutePos(togglePosStart); fToggleListen1->setCallback(this); -} -ZaMultiCompUI::~ZaMultiCompUI() -{ - delete fKnobAttack; - delete fKnobRelease; - delete fKnobThresh; - delete fKnobRatio; - delete fKnobKnee; - delete fKnobGlobalGain; - delete fKnobMakeup1; - delete fKnobMakeup2; - delete fKnobMakeup3; - delete fKnobXover1; - delete fKnobXover2; - delete fToggleBypass1; - delete fToggleBypass2; - delete fToggleBypass3; - delete fToggleListen1; - delete fToggleListen2; - delete fToggleListen3; + // set default values + d_programChanged(0); } // ----------------------------------------------------------------------- @@ -502,13 +484,13 @@ void ZaMultiCompUI::onDisplay() else numRedLeds3 = 0; for (int i=numRedLeds1; i>0; --i) - fLedRedImg.draw(sLedInitialX + (12 - i)*sLedSpacing, sRedLed1StaticY); + fLedRedImg.drawAt(sLedInitialX + (12 - i)*sLedSpacing, sRedLed1StaticY); for (int i=numRedLeds2; i>0; --i) - fLedRedImg.draw(sLedInitialX + (12 - i)*sLedSpacing, sRedLed2StaticY); + fLedRedImg.drawAt(sLedInitialX + (12 - i)*sLedSpacing, sRedLed2StaticY); for (int i=numRedLeds3; i>0; --i) - fLedRedImg.draw(sLedInitialX + (12 - i)*sLedSpacing, sRedLed3StaticY); + fLedRedImg.drawAt(sLedInitialX + (12 - i)*sLedSpacing, sRedLed3StaticY); if (fLedYellowValue >= 20.f) numYellowLeds = 19; @@ -552,12 +534,12 @@ void ZaMultiCompUI::onDisplay() if (numYellowLeds > 12) { for (int i=12; i<numYellowLeds; ++i) - fLedRedImg.draw(sLedInitialX + i*sLedSpacing, sYellowLedStaticY); + fLedRedImg.drawAt(sLedInitialX + i*sLedSpacing, sYellowLedStaticY); for (int i=0; i<12; ++i) - fLedYellowImg.draw(sLedInitialX + i*sLedSpacing, sYellowLedStaticY); + fLedYellowImg.drawAt(sLedInitialX + i*sLedSpacing, sYellowLedStaticY); } else { for (int i=0; i<numYellowLeds; ++i) - fLedYellowImg.draw(sLedInitialX + i*sLedSpacing, sYellowLedStaticY); + fLedYellowImg.drawAt(sLedInitialX + i*sLedSpacing, sYellowLedStaticY); } } diff --git a/plugins/ZaMultiComp/ZaMultiCompUI.hpp b/plugins/ZaMultiComp/ZaMultiCompUI.hpp index 7eac204..3d85b80 100644 --- a/plugins/ZaMultiComp/ZaMultiCompUI.hpp +++ b/plugins/ZaMultiComp/ZaMultiCompUI.hpp @@ -1,6 +1,6 @@ /* * ZaMultiComp mono multiband compressor - * Copyright (C) 2014 Damien Zammit <damien@zamaudio.com> + * Copyright (C) 2014 Damien Zammit <damien@zamaudio.com> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -24,7 +24,6 @@ #include "ImageToggle.hpp" #include "ZaMultiCompArtwork.hpp" -#include "ZaMultiCompPlugin.hpp" using DGL::Image; using DGL::ImageKnob; @@ -35,23 +34,22 @@ START_NAMESPACE_DISTRHO // ----------------------------------------------------------------------- class ZaMultiCompUI : public UI, - public ImageKnob::Callback, - public ImageToggle::Callback + public ImageKnob::Callback, + public ImageToggle::Callback { public: ZaMultiCompUI(); - ~ZaMultiCompUI() override; protected: // ------------------------------------------------------------------- // Information - unsigned int d_getWidth() const noexcept override + uint d_getWidth() const noexcept override { return ZaMultiCompArtwork::zamulticompWidth; } - unsigned int d_getHeight() const noexcept override + uint d_getHeight() const noexcept override { return ZaMultiCompArtwork::zamulticompHeight; } @@ -75,23 +73,13 @@ protected: private: Image fImgBackground; - ImageKnob* fKnobAttack; - ImageKnob* fKnobRelease; - ImageKnob* fKnobThresh; - ImageKnob* fKnobRatio; - ImageKnob* fKnobKnee; - ImageKnob* fKnobGlobalGain; - ImageKnob* fKnobMakeup1; - ImageKnob* fKnobMakeup2; - ImageKnob* fKnobMakeup3; - ImageKnob* fKnobXover1; - ImageKnob* fKnobXover2; - ImageToggle* fToggleBypass1; - ImageToggle* fToggleBypass2; - ImageToggle* fToggleBypass3; - ImageToggle* fToggleListen1; - ImageToggle* fToggleListen2; - ImageToggle* fToggleListen3; + + ScopedPointer<ImageKnob> fKnobAttack, fKnobRelease, fKnobThresh; + ScopedPointer<ImageKnob> fKnobRatio, fKnobKnee, fKnobGlobalGain; + ScopedPointer<ImageKnob> fKnobMakeup1, fKnobMakeup2, fKnobMakeup3; + ScopedPointer<ImageKnob> fKnobXover1, fKnobXover2; + ScopedPointer<ImageToggle> fToggleBypass1, fToggleBypass2, fToggleBypass3; + ScopedPointer<ImageToggle> fToggleListen1, fToggleListen2, fToggleListen3; Image fLedRedImg; float fLedRedValue1; diff --git a/plugins/ZaMultiCompX2/Makefile b/plugins/ZaMultiCompX2/Makefile index 0f7c786..60d49b9 100644 --- a/plugins/ZaMultiCompX2/Makefile +++ b/plugins/ZaMultiCompX2/Makefile @@ -20,13 +20,17 @@ OBJS_UI = \ ZaMultiCompX2UI.cpp.o # -------------------------------------------------------------- -# No custom UI for now +# Do some magic -#TARGET_NOUI = true +include ../Makefile.mk # -------------------------------------------------------------- -# Do some magic +# Enable all possible plugin types -include ../Makefile.mk +ifeq ($(LINUX),true) +all: jack ladspa dssi lv2_sep vst +else +all: ladspa dssi lv2_sep vst +endif # -------------------------------------------------------------- diff --git a/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.cpp b/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.cpp index b9ce6d4..f1c645b 100644 --- a/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.cpp +++ b/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.cpp @@ -26,13 +26,6 @@ ZaMultiCompX2Plugin::ZaMultiCompX2Plugin() { // set default values d_setProgram(0); - - // reset - d_deactivate(); -} - -ZaMultiCompX2Plugin::~ZaMultiCompX2Plugin() -{ } // ----------------------------------------------------------------------- @@ -530,12 +523,6 @@ void ZaMultiCompX2Plugin::d_activate() maxL = maxR = 0.f; } -void ZaMultiCompX2Plugin::d_deactivate() -{ - // all values to zero - d_activate(); -} - float ZaMultiCompX2Plugin::run_filter(int i, int ch, float in) { in = sanitize_denormal(in); @@ -568,14 +555,14 @@ void ZaMultiCompX2Plugin::set_lp_coeffs(float fc, float q, float sr, int i, int b2[ch][i] = (float)((1.f - alpha)*inv); } -void ZaMultiCompX2Plugin::set_hp_coeffs(float fc, float q, float sr, int i, int ch, float gain=1.0) -{ +void ZaMultiCompX2Plugin::set_hp_coeffs(float fc, float q, float sr, int i, int ch, float gain=1.0) +{ float omega=(float)(2.f*M_PI*fc/sr); float sn=sin(omega); float cs=cos(omega); float alpha=(float)(sn/(2.f*q)); float inv=(float)(1.f/(1.f+alpha)); - + a0[ch][i] = (float)(gain*inv*(1.f + cs)/2.f); a1[ch][i] = -2.f * a0[ch][i]; a2[ch][i] = a0[ch][i]; @@ -605,9 +592,9 @@ void ZaMultiCompX2Plugin::run_comp(int k, float inL, float inR, float *outL, flo Lxg = (inL==0.f) ? -160.f : to_dB(fabs(inL)); Rxg = (inR==0.f) ? -160.f : to_dB(fabs(inR)); Lxg = sanitize_denormal(Lxg); - Rxg = sanitize_denormal(Rxg); - - + Rxg = sanitize_denormal(Rxg); + + if (2.f*(Lxg-thresdb[k])<-width) { Lyg = Lxg; } else if (2.f*fabs(Lxg-thresdb[k])<=width) { @@ -615,9 +602,9 @@ void ZaMultiCompX2Plugin::run_comp(int k, float inL, float inR, float *outL, flo } else if (2.f*(Lxg-thresdb[k])>width) { Lyg = thresdb[k] + (Lxg-thresdb[k])/ratio; } - - Lyg = sanitize_denormal(Lyg); - + + Lyg = sanitize_denormal(Lyg); + if (2.f*(Rxg-thresdb[k])<-width) { Ryg = Rxg; } else if (2.f*fabs(Rxg-thresdb[k])<=width) { @@ -625,37 +612,37 @@ void ZaMultiCompX2Plugin::run_comp(int k, float inL, float inR, float *outL, flo } else if (2.f*(Rxg-thresdb[k])>width) { Ryg = thresdb[k] + (Rxg-thresdb[k])/ratio; } - - Ryg = sanitize_denormal(Ryg); - + + Ryg = sanitize_denormal(Ryg); + if (stereolink == STEREOLINK_MAX) { Lxl = Rxl = fmaxf(Lxg - Lyg, Rxg - Ryg); } else { Lxl = Rxl = (Lxg - Lyg + Rxg - Ryg) / 2.f; - } - - old_y1[0][k] = sanitize_denormal(old_y1[0][k]); + } + + old_y1[0][k] = sanitize_denormal(old_y1[0][k]); old_y1[1][k] = sanitize_denormal(old_y1[1][k]); - old_yl[0][k] = sanitize_denormal(old_yl[0][k]); + old_yl[0][k] = sanitize_denormal(old_yl[0][k]); old_yl[1][k] = sanitize_denormal(old_yl[1][k]); - - - Ly1 = fmaxf(Lxl, release_coeff * old_y1[0][k]+(1.f-release_coeff)*Lxl); + + + Ly1 = fmaxf(Lxl, release_coeff * old_y1[0][k]+(1.f-release_coeff)*Lxl); Lyl = attack_coeff * old_yl[0][k]+(1.f-attack_coeff)*Ly1; Ly1 = sanitize_denormal(Ly1); Lyl = sanitize_denormal(Lyl); - + cdb = -Lyl; Lgain = from_dB(cdb); - + Ry1 = fmaxf(Rxl, release_coeff * old_y1[1][k]+(1.f-release_coeff)*Rxl); Ryl = attack_coeff * old_yl[1][k]+(1.f-attack_coeff)*Ry1; Ry1 = sanitize_denormal(Ry1); Ryl = sanitize_denormal(Ryl); - + cdb = -Ryl; Rgain = from_dB(cdb); - + if (stereolink == STEREOLINK_MAX) gainr[k] = fmaxf(Lyl, Ryl); else @@ -665,14 +652,14 @@ void ZaMultiCompX2Plugin::run_comp(int k, float inL, float inR, float *outL, flo *outL *= Lgain; *outR = inR; *outR *= Rgain; - + old_yl[0][k] = Lyl; old_yl[1][k] = Ryl; old_y1[0][k] = Ly1; - old_y1[1][k] = Ry1; + old_y1[1][k] = Ry1; } -void ZaMultiCompX2Plugin::d_run(float** inputs, float** outputs, uint32_t frames) +void ZaMultiCompX2Plugin::d_run(const float** inputs, float** outputs, uint32_t frames) { float srate = d_getSampleRate(); float maxxL = maxL; @@ -745,14 +732,14 @@ void ZaMultiCompX2Plugin::d_run(float** inputs, float** outputs, uint32_t frames fil4[1] = run_filter(6, 1, inr); tmp5[0] = run_filter(7, 0, fil4[0]); tmp5[1] = run_filter(7, 1, fil4[1]); - if (tog3) + if (tog3) run_comp(2, tmp5[0], tmp5[1], &outL[2], &outR[2]); tmp6[0] = tog3 ? outL[2] * from_dB(makeup[2]) : tmp5[0]; tmp6[1] = tog3 ? outR[2] * from_dB(makeup[2]) : tmp5[1]; - outputs[0][i] = outputs[1][i] = 0.f; + outputs[0][i] = outputs[1][i] = 0.f; if (listen1) { listenmode = 1; outputs[0][i] += outL[0] * tog1*from_dB(makeup[0]) diff --git a/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.hpp b/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.hpp index 5270206..20a5585 100644 --- a/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.hpp +++ b/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.hpp @@ -70,7 +70,7 @@ public: paramOutputLevelR, paramCount }; - + enum States { stateReadMeter, @@ -78,8 +78,6 @@ public: }; ZaMultiCompX2Plugin(); - ~ZaMultiCompX2Plugin() override; - protected: // ------------------------------------------------------------------- @@ -151,8 +149,7 @@ protected: void set_hp_coeffs(float fc, float q, float sr, int i, int ch, float gain); void d_activate() override; - void d_deactivate() override; - void d_run(float** inputs, float** outputs, uint32_t frames) override; + void d_run(const float** inputs, float** outputs, uint32_t frames) override; // ------------------------------------------------------------------- diff --git a/plugins/ZaMultiCompX2/ZaMultiCompX2UI.cpp b/plugins/ZaMultiCompX2/ZaMultiCompX2UI.cpp index c0776a6..53cc10e 100644 --- a/plugins/ZaMultiCompX2/ZaMultiCompX2UI.cpp +++ b/plugins/ZaMultiCompX2/ZaMultiCompX2UI.cpp @@ -1,5 +1,5 @@ /* - * ZaMultiCompX2 Stereo multiband compressor + * ZaMultiCompX2 Stereo multiband compressor * Copyright (C) 2014 Damien Zammit <damien@zamaudio.com> * * This program is free software; you can redistribute it and/or @@ -15,8 +15,8 @@ * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ +#include "ZaMultiCompX2Plugin.hpp" #include "ZaMultiCompX2UI.hpp" -#include <stdio.h> using DGL::Point; @@ -38,105 +38,105 @@ ZaMultiCompX2UI::ZaMultiCompX2UI() fLedRedValue1 = 0.0f; fLedRedValue2 = 0.0f; fLedRedValue3 = 0.0f; - fLedYellowValueL = 0.0f; - fLedYellowValueR = 0.0f; + fLedYellowValueL = 0.0f; + fLedYellowValueR = 0.0f; // knob Image knobImage(ZaMultiCompX2Artwork::knobData, ZaMultiCompX2Artwork::knobWidth, ZaMultiCompX2Artwork::knobHeight); - // knob + // knob fKnobAttack = new ImageKnob(this, knobImage); - fKnobAttack->setPos(24, 43); + fKnobAttack->setAbsolutePos(24, 43); fKnobAttack->setRange(0.1f, 200.0f); - fKnobAttack->setLogScale(true); + fKnobAttack->setUsingLogScale(true); fKnobAttack->setDefault(10.0f); fKnobAttack->setStep(0.1f); fKnobAttack->setRotationAngle(240); fKnobAttack->setCallback(this); fKnobRelease = new ImageKnob(this, knobImage); - fKnobRelease->setPos(108, 43); + fKnobRelease->setAbsolutePos(108, 43); fKnobRelease->setRange(50.0f, 500.0f); fKnobRelease->setDefault(80.0f); fKnobRelease->setRotationAngle(240); fKnobRelease->setCallback(this); fKnobThresh3 = new ImageKnob(this, knobImage); - fKnobThresh3->setPos(94.5, 99); + fKnobThresh3->setAbsolutePos(94.5, 99); fKnobThresh3->setRange(-60.0f, 0.0f); fKnobThresh3->setDefault(-16.0f); fKnobThresh3->setRotationAngle(240); fKnobThresh3->setCallback(this); fKnobThresh2 = new ImageKnob(this, knobImage); - fKnobThresh2->setPos(94.5, 150); + fKnobThresh2->setAbsolutePos(94.5, 150); fKnobThresh2->setRange(-60.0f, 0.0f); fKnobThresh2->setDefault(-18.0f); fKnobThresh2->setRotationAngle(240); fKnobThresh2->setCallback(this); fKnobThresh1 = new ImageKnob(this, knobImage); - fKnobThresh1->setPos(94.5, 201); + fKnobThresh1->setAbsolutePos(94.5, 201); fKnobThresh1->setRange(-60.0f, 0.0f); fKnobThresh1->setDefault(-20.0f); fKnobThresh1->setRotationAngle(240); fKnobThresh1->setCallback(this); fKnobRatio = new ImageKnob(this, knobImage); - fKnobRatio->setPos(191.5, 43); + fKnobRatio->setAbsolutePos(191.5, 43); fKnobRatio->setRange(1.0f, 20.0f); fKnobRatio->setDefault(4.0f); fKnobRatio->setRotationAngle(240); fKnobRatio->setCallback(this); fKnobKnee = new ImageKnob(this, knobImage); - fKnobKnee->setPos(273, 43); + fKnobKnee->setAbsolutePos(273, 43); fKnobKnee->setRange(0.0f, 8.0f); fKnobKnee->setDefault(0.0f); fKnobKnee->setRotationAngle(240); fKnobKnee->setCallback(this); fKnobGlobalGain = new ImageKnob(this, knobImage); - fKnobGlobalGain->setPos(427.3, 43); + fKnobGlobalGain->setAbsolutePos(427.3, 43); fKnobGlobalGain->setRange(-30.0f, 30.0f); fKnobGlobalGain->setDefault(0.0f); fKnobGlobalGain->setRotationAngle(240); fKnobGlobalGain->setCallback(this); fKnobXover2 = new ImageKnob(this, knobImage); - fKnobXover2->setPos(23, 121); + fKnobXover2->setAbsolutePos(23, 121); fKnobXover2->setRange(1400.f, 14000.f); - fKnobXover2->setLogScale(true); + fKnobXover2->setUsingLogScale(true); fKnobXover2->setDefault(1400.f); fKnobXover2->setStep(5.f); fKnobXover2->setRotationAngle(240); fKnobXover2->setCallback(this); fKnobXover1 = new ImageKnob(this, knobImage); - fKnobXover1->setPos(23, 175.5); + fKnobXover1->setAbsolutePos(23, 175.5); fKnobXover1->setRange(20.0f, 1400.0f); - fKnobXover1->setLogScale(true); + fKnobXover1->setUsingLogScale(true); fKnobXover1->setDefault(250.0f); fKnobXover1->setStep(1.f); fKnobXover1->setRotationAngle(240); fKnobXover1->setCallback(this); fKnobMakeup3 = new ImageKnob(this, knobImage); - fKnobMakeup3->setPos(167.75, 99.5); + fKnobMakeup3->setAbsolutePos(167.75, 99.5); fKnobMakeup3->setRange(0.0f, 30.0f); fKnobMakeup3->setDefault(0.0f); fKnobMakeup3->setRotationAngle(240); fKnobMakeup3->setCallback(this); fKnobMakeup2 = new ImageKnob(this, knobImage); - fKnobMakeup2->setPos(167.75, 150.25); + fKnobMakeup2->setAbsolutePos(167.75, 150.25); fKnobMakeup2->setRange(0.0f, 30.0f); fKnobMakeup2->setDefault(0.0f); fKnobMakeup2->setRotationAngle(240); fKnobMakeup2->setCallback(this); fKnobMakeup1 = new ImageKnob(this, knobImage); - fKnobMakeup1->setPos(167.75, 201.4); + fKnobMakeup1->setAbsolutePos(167.75, 201.4); fKnobMakeup1->setRange(0.0f, 30.0f); fKnobMakeup1->setDefault(0.0f); fKnobMakeup1->setRotationAngle(240); @@ -149,46 +149,46 @@ ZaMultiCompX2UI::ZaMultiCompX2UI() Point<int> togglePosStart(247,108); - fToggleBypass3 = new ImageToggle(this, toggleoffImage, toggleoffImage, toggleonImage); - fToggleBypass3->setPos(togglePosStart); + fToggleBypass3 = new ImageToggle(this, toggleoffImage, toggleonImage); + fToggleBypass3->setAbsolutePos(togglePosStart); fToggleBypass3->setCallback(this); togglePosStart.setY(158); - fToggleBypass2 = new ImageToggle(this, toggleoffImage, toggleoffImage, toggleonImage); - fToggleBypass2->setPos(togglePosStart); + fToggleBypass2 = new ImageToggle(this, toggleoffImage, toggleonImage); + fToggleBypass2->setAbsolutePos(togglePosStart); fToggleBypass2->setCallback(this); togglePosStart.setY(209); - fToggleBypass1 = new ImageToggle(this, toggleoffImage, toggleoffImage, toggleonImage); - fToggleBypass1->setPos(togglePosStart); + fToggleBypass1 = new ImageToggle(this, toggleoffImage, toggleonImage); + fToggleBypass1->setAbsolutePos(togglePosStart); fToggleBypass1->setCallback(this); togglePosStart.setX(278); togglePosStart.setY(113); - fToggleListen3 = new ImageToggle(this, toggleoffhImage, toggleoffhImage, toggleonhImage); - fToggleListen3->setPos(togglePosStart); + fToggleListen3 = new ImageToggle(this, toggleoffhImage, toggleonhImage); + fToggleListen3->setAbsolutePos(togglePosStart); fToggleListen3->setCallback(this); togglePosStart.setY(164); - fToggleListen2 = new ImageToggle(this, toggleoffhImage, toggleoffhImage, toggleonhImage); - fToggleListen2->setPos(togglePosStart); + fToggleListen2 = new ImageToggle(this, toggleoffhImage, toggleonhImage); + fToggleListen2->setAbsolutePos(togglePosStart); fToggleListen2->setCallback(this); togglePosStart.setY(214); - fToggleListen1 = new ImageToggle(this, toggleoffhImage, toggleoffhImage, toggleonhImage); - fToggleListen1->setPos(togglePosStart); + fToggleListen1 = new ImageToggle(this, toggleoffhImage, toggleonhImage); + fToggleListen1->setAbsolutePos(togglePosStart); fToggleListen1->setCallback(this); togglePosStart.setX(285.5); togglePosStart.setY(254); - fToggleStereo = new ImageToggle(this, toggleoffImage, toggleoffImage, toggleonImage); - fToggleStereo->setPos(togglePosStart); + fToggleStereo = new ImageToggle(this, toggleoffImage, toggleonImage); + fToggleStereo->setAbsolutePos(togglePosStart); fToggleStereo->setCallback(this); fCanvasArea.setPos(540, 32); @@ -215,30 +215,8 @@ ZaMultiCompX2UI::ZaMultiCompX2UI() } } -} - -ZaMultiCompX2UI::~ZaMultiCompX2UI() -{ - delete fKnobAttack; - delete fKnobRelease; - delete fKnobThresh1; - delete fKnobThresh2; - delete fKnobThresh3; - delete fKnobRatio; - delete fKnobKnee; - delete fKnobGlobalGain; - delete fKnobMakeup1; - delete fKnobMakeup2; - delete fKnobMakeup3; - delete fKnobXover1; - delete fKnobXover2; - delete fToggleBypass1; - delete fToggleBypass2; - delete fToggleBypass3; - delete fToggleListen1; - delete fToggleListen2; - delete fToggleListen3; - delete fToggleStereo; + // set default values + d_programChanged(0); } void ZaMultiCompX2UI::compcurve(float in, int k, float *outx, float* outy) { @@ -277,16 +255,16 @@ void ZaMultiCompX2UI::calc_compcurves() { compcurve(x2, k, &compx[k][i], &compy[k][i]); compx[k][i] = fCanvasArea.getX() + compx[k][i]*fCanvasArea.getWidth(); compy[k][i] = fCanvasArea.getY() + (1.-compy[k][i])*fCanvasArea.getHeight(); - } + } //dot follows curve: //compcurve(from_dB(-ui->gainred), k, &dotx[0], &doty[0]); //dotx[0] = -(1-dotx[0])*280. + 280.; - //doty[0] = (1.-doty[0])*280.; - + //doty[0] = (1.-doty[0])*280.; + //dot follows centre: //dotx[0] = -(1.- from_dB(-gainred))*280. + 280.; //doty[0] = (1.- from_dB(-gainred))*280.; - + //printf("gainr=%.2f x=%.2f y=%.2f\n",ui->gainred, ui->dotx[0], ui->doty[0]); } } @@ -692,13 +670,13 @@ void ZaMultiCompX2UI::onDisplay() else numRedLeds3 = 0; for (int i=numRedLeds1; i>0; --i) - fLedRedImg.draw(sLedInitialX + (12 - i)*sLedSpacing, sRedLed1StaticY); + fLedRedImg.drawAt(sLedInitialX + (12 - i)*sLedSpacing, sRedLed1StaticY); for (int i=numRedLeds2; i>0; --i) - fLedRedImg.draw(sLedInitialX + (12 - i)*sLedSpacing, sRedLed2StaticY); + fLedRedImg.drawAt(sLedInitialX + (12 - i)*sLedSpacing, sRedLed2StaticY); for (int i=numRedLeds3; i>0; --i) - fLedRedImg.draw(sLedInitialX + (12 - i)*sLedSpacing, sRedLed3StaticY); + fLedRedImg.drawAt(sLedInitialX + (12 - i)*sLedSpacing, sRedLed3StaticY); if (fLedYellowValueL >= 20.f) numYellowLedsL = 19; @@ -742,14 +720,14 @@ void ZaMultiCompX2UI::onDisplay() if (numYellowLedsL > 12) { for (int i=12; i<numYellowLedsL; ++i) - fLedRedImg.draw(sLedInitialX + i*sLedSpacing, sYellowLedStaticYL); + fLedRedImg.drawAt(sLedInitialX + i*sLedSpacing, sYellowLedStaticYL); for (int i=0; i<12; ++i) - fLedYellowImg.draw(sLedInitialX + i*sLedSpacing, sYellowLedStaticYL); + fLedYellowImg.drawAt(sLedInitialX + i*sLedSpacing, sYellowLedStaticYL); } else { for (int i=0; i<numYellowLedsL; ++i) - fLedYellowImg.draw(sLedInitialX + i*sLedSpacing, sYellowLedStaticYL); + fLedYellowImg.drawAt(sLedInitialX + i*sLedSpacing, sYellowLedStaticYL); } - + if (fLedYellowValueR >= 20.f) numYellowLedsR = 19; else if (fLedYellowValueR >= 10.f) @@ -792,12 +770,12 @@ void ZaMultiCompX2UI::onDisplay() if (numYellowLedsR > 12) { for (int i=12; i<numYellowLedsR; ++i) - fLedRedImg.draw(sLedInitialX + i*sLedSpacing, sYellowLedStaticYR); + fLedRedImg.drawAt(sLedInitialX + i*sLedSpacing, sYellowLedStaticYR); for (int i=0; i<12; ++i) - fLedYellowImg.draw(sLedInitialX + i*sLedSpacing, sYellowLedStaticYR); + fLedYellowImg.drawAt(sLedInitialX + i*sLedSpacing, sYellowLedStaticYR); } else { for (int i=0; i<numYellowLedsR; ++i) - fLedYellowImg.draw(sLedInitialX + i*sLedSpacing, sYellowLedStaticYR); + fLedYellowImg.drawAt(sLedInitialX + i*sLedSpacing, sYellowLedStaticYR); } /* // TESTING - remove later diff --git a/plugins/ZaMultiCompX2/ZaMultiCompX2UI.hpp b/plugins/ZaMultiCompX2/ZaMultiCompX2UI.hpp index 67ffcb1..44dcb19 100644 --- a/plugins/ZaMultiCompX2/ZaMultiCompX2UI.hpp +++ b/plugins/ZaMultiCompX2/ZaMultiCompX2UI.hpp @@ -1,5 +1,5 @@ /* - * ZaMultiCompX2 stereo multiband compressor + * ZaMultiCompX2 stereo multiband compressor * Copyright (C) 2014 Damien Zammit <damien@zamaudio.com> * * This program is free software; you can redistribute it and/or @@ -20,14 +20,13 @@ #include "DistrhoUI.hpp" -#include "Geometry.hpp" #include "ImageKnob.hpp" #include "ImageToggle.hpp" +#include "ZaMultiCompX2Artwork.hpp" + #define COMPOINTS 1000 #define MAX_COMP 3 -#include "ZaMultiCompX2Artwork.hpp" -#include "ZaMultiCompX2Plugin.hpp" using DGL::Image; using DGL::ImageKnob; @@ -38,23 +37,22 @@ START_NAMESPACE_DISTRHO // ----------------------------------------------------------------------- class ZaMultiCompX2UI : public UI, - public ImageKnob::Callback, - public ImageToggle::Callback + public ImageKnob::Callback, + public ImageToggle::Callback { public: ZaMultiCompX2UI(); - ~ZaMultiCompX2UI() override; protected: // ------------------------------------------------------------------- // Information - unsigned int d_getWidth() const noexcept override + uint d_getWidth() const noexcept override { return ZaMultiCompX2Artwork::zamulticompx2Width; } - unsigned int d_getHeight() const noexcept override + uint d_getHeight() const noexcept override { return ZaMultiCompX2Artwork::zamulticompx2Height; } @@ -100,26 +98,14 @@ sanitize_denormal(double value) { private: Image fImgBackground; - ImageKnob* fKnobAttack; - ImageKnob* fKnobRelease; - ImageKnob* fKnobThresh1; - ImageKnob* fKnobThresh2; - ImageKnob* fKnobThresh3; - ImageKnob* fKnobRatio; - ImageKnob* fKnobKnee; - ImageKnob* fKnobGlobalGain; - ImageKnob* fKnobMakeup1; - ImageKnob* fKnobMakeup2; - ImageKnob* fKnobMakeup3; - ImageKnob* fKnobXover1; - ImageKnob* fKnobXover2; - ImageToggle* fToggleBypass1; - ImageToggle* fToggleBypass2; - ImageToggle* fToggleBypass3; - ImageToggle* fToggleListen1; - ImageToggle* fToggleListen2; - ImageToggle* fToggleListen3; - ImageToggle* fToggleStereo; + ScopedPointer<ImageKnob> fKnobAttack, fKnobRelease; + ScopedPointer<ImageKnob> fKnobThresh1, fKnobThresh2, fKnobThresh3; + ScopedPointer<ImageKnob> fKnobRatio, fKnobKnee, fKnobGlobalGain; + ScopedPointer<ImageKnob> fKnobMakeup1, fKnobMakeup2, fKnobMakeup3; + ScopedPointer<ImageKnob> fKnobXover1, fKnobXover2; + ScopedPointer<ImageToggle> fToggleBypass1, fToggleBypass2, fToggleBypass3; + ScopedPointer<ImageToggle> fToggleListen1, fToggleListen2, fToggleListen3; + ScopedPointer<ImageToggle> fToggleStereo; Image fLedRedImg; float fLedRedValue1; diff --git a/plugins/ZamComp/Makefile b/plugins/ZamComp/Makefile index 12ab20a..16fa761 100644 --- a/plugins/ZamComp/Makefile +++ b/plugins/ZamComp/Makefile @@ -20,13 +20,17 @@ OBJS_UI = \ ZamCompUI.cpp.o # -------------------------------------------------------------- -# No custom UI for now +# Do some magic -#TARGET_NOUI = true +include ../Makefile.mk # -------------------------------------------------------------- -# Do some magic +# Enable all possible plugin types -include ../Makefile.mk +ifeq ($(LINUX),true) +all: jack ladspa dssi lv2_sep vst +else +all: ladspa dssi lv2_sep vst +endif # -------------------------------------------------------------- diff --git a/plugins/ZamComp/ZamCompPlugin.cpp b/plugins/ZamComp/ZamCompPlugin.cpp index 9c5ec34..0b13b5a 100644 --- a/plugins/ZamComp/ZamCompPlugin.cpp +++ b/plugins/ZamComp/ZamCompPlugin.cpp @@ -26,13 +26,6 @@ ZamCompPlugin::ZamCompPlugin() { // set default values d_setProgram(0); - - // reset - d_deactivate(); -} - -ZamCompPlugin::~ZamCompPlugin() -{ } // ----------------------------------------------------------------------- @@ -204,10 +197,6 @@ void ZamCompPlugin::d_setProgram(uint32_t index) ratio = 4.0f; thresdb = 0.0f; makeup = 0.0f; - gainr = 0.0f; - outlevel = -45.f; - - /* Default variable values */ /* reset filter values */ d_activate(); @@ -218,14 +207,12 @@ void ZamCompPlugin::d_setProgram(uint32_t index) void ZamCompPlugin::d_activate() { + gainr = 0.0f; + outlevel = -45.f; + old_yl = old_y1 = 0.0f; } -void ZamCompPlugin::d_deactivate() -{ - // all values to zero -} - -void ZamCompPlugin::d_run(float** inputs, float** outputs, uint32_t frames) +void ZamCompPlugin::d_run(const float** inputs, float** outputs, uint32_t frames) { float srate = d_getSampleRate(); float width=(knee-0.99f)*6.f; @@ -261,7 +248,7 @@ void ZamCompPlugin::d_run(float** inputs, float** outputs, uint32_t frames) yl = attack_coeff * old_yl+(1.f-attack_coeff)*y1; y1 = sanitize_denormal(y1); yl = sanitize_denormal(yl); - + cdb = -yl; gain = from_dB(cdb); @@ -269,7 +256,7 @@ void ZamCompPlugin::d_run(float** inputs, float** outputs, uint32_t frames) outputs[0][i] = inputs[0][i]; outputs[0][i] *= gain * from_dB(makeup); - + max = (fabsf(outputs[0][i]) > max) ? fabsf(outputs[0][i]) : sanitize_denormal(max); old_yl = yl; diff --git a/plugins/ZamComp/ZamCompPlugin.hpp b/plugins/ZamComp/ZamCompPlugin.hpp index 47b148a..ea521a2 100644 --- a/plugins/ZamComp/ZamCompPlugin.hpp +++ b/plugins/ZamComp/ZamCompPlugin.hpp @@ -1,5 +1,5 @@ /*
- * ZamComp mono compressor
+ * ZamComp mono compressor
* Copyright (C) 2014 Damien Zammit <damien@zamaudio.com>
*
* This program is free software; you can redistribute it and/or
@@ -41,7 +41,6 @@ public: };
ZamCompPlugin();
- ~ZamCompPlugin() override;
protected:
// -------------------------------------------------------------------
@@ -75,15 +74,15 @@ protected: // -------------------------------------------------------------------
// Init
- void d_initParameter(uint32_t index, Parameter& parameter) ;
- void d_initProgramName(uint32_t index, d_string& programName) ;
+ void d_initParameter(uint32_t index, Parameter& parameter) override;
+ void d_initProgramName(uint32_t index, d_string& programName) override;
// -------------------------------------------------------------------
// Internal data
float d_getParameterValue(uint32_t index) const override;
void d_setParameterValue(uint32_t index, float value) override;
- void d_setProgram(uint32_t index) ;
+ void d_setProgram(uint32_t index) override;
// -------------------------------------------------------------------
// Process
@@ -106,8 +105,7 @@ protected: }
void d_activate() override;
- void d_deactivate() override;
- void d_run(float** inputs, float** outputs, uint32_t frames) override;
+ void d_run(const float** inputs, float** outputs, uint32_t frames) override;
// -------------------------------------------------------------------
diff --git a/plugins/ZamComp/ZamCompUI.cpp b/plugins/ZamComp/ZamCompUI.cpp index 8a6f0a9..48b4921 100644 --- a/plugins/ZamComp/ZamCompUI.cpp +++ b/plugins/ZamComp/ZamCompUI.cpp @@ -1,6 +1,6 @@ /* * ZamComp mono compressor - * Copyright (C) 2014 Damien Zammit <damien@zamaudio.com> + * Copyright (C) 2014 Damien Zammit <damien@zamaudio.com> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -15,10 +15,9 @@ * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ +#include "ZamCompPlugin.hpp" #include "ZamCompUI.hpp" -using DGL::Point; - START_NAMESPACE_DISTRHO // ----------------------------------------------------------------------- @@ -35,23 +34,25 @@ ZamCompUI::ZamCompUI() // led values fLedRedValue = 0.0f; - fLedYellowValue = 0.0f; + fLedYellowValue = 0.0f; // knob Image knobImage(ZamCompArtwork::knobData, ZamCompArtwork::knobWidth, ZamCompArtwork::knobHeight); - // knob + // knob fKnobAttack = new ImageKnob(this, knobImage); - fKnobAttack->setPos(24, 45); + fKnobAttack->setAbsolutePos(24, 45); + fKnobAttack->setId(ZamCompPlugin::paramAttack); fKnobAttack->setRange(0.1f, 200.0f); fKnobAttack->setStep(0.1f); - fKnobAttack->setLogScale(true); + fKnobAttack->setUsingLogScale(true); fKnobAttack->setDefault(10.0f); fKnobAttack->setRotationAngle(240); fKnobAttack->setCallback(this); fKnobRelease = new ImageKnob(this, knobImage); - fKnobRelease->setPos(108, 45); + fKnobRelease->setAbsolutePos(108, 45); + fKnobRelease->setId(ZamCompPlugin::paramRelease); fKnobRelease->setRange(50.0f, 500.0f); fKnobRelease->setStep(1.0f); fKnobRelease->setDefault(80.0f); @@ -59,7 +60,8 @@ ZamCompUI::ZamCompUI() fKnobRelease->setCallback(this); fKnobThresh = new ImageKnob(this, knobImage); - fKnobThresh->setPos(191.5, 45); + fKnobThresh->setAbsolutePos(191.5, 45); + fKnobThresh->setId(ZamCompPlugin::paramThresh); fKnobThresh->setRange(-60.0f, 0.0f); fKnobThresh->setStep(1.0f); fKnobThresh->setDefault(0.0f); @@ -67,7 +69,8 @@ ZamCompUI::ZamCompUI() fKnobThresh->setCallback(this); fKnobRatio = new ImageKnob(this, knobImage); - fKnobRatio->setPos(270, 45); + fKnobRatio->setAbsolutePos(270, 45); + fKnobRatio->setId(ZamCompPlugin::paramRatio); fKnobRatio->setRange(1.0f, 20.0f); fKnobRatio->setStep(0.1f); fKnobRatio->setDefault(4.0f); @@ -75,7 +78,8 @@ ZamCompUI::ZamCompUI() fKnobRatio->setCallback(this); fKnobKnee = new ImageKnob(this, knobImage); - fKnobKnee->setPos(348.5, 45); + fKnobKnee->setAbsolutePos(348.5, 45); + fKnobKnee->setId(ZamCompPlugin::paramKnee); fKnobKnee->setRange(0.0f, 8.0f); fKnobKnee->setStep(0.1f); fKnobKnee->setDefault(0.0f); @@ -83,22 +87,16 @@ ZamCompUI::ZamCompUI() fKnobKnee->setCallback(this); fKnobMakeup = new ImageKnob(this, knobImage); - fKnobMakeup->setPos(427.3, 45); + fKnobMakeup->setAbsolutePos(427.3, 45); + fKnobMakeup->setId(ZamCompPlugin::paramMakeup); fKnobMakeup->setRange(-30.0f, 30.0f); fKnobMakeup->setStep(1.0f); fKnobMakeup->setDefault(0.0f); fKnobMakeup->setRotationAngle(240); fKnobMakeup->setCallback(this); -} -ZamCompUI::~ZamCompUI() -{ - delete fKnobAttack; - delete fKnobRelease; - delete fKnobThresh; - delete fKnobRatio; - delete fKnobKnee; - delete fKnobMakeup; + // set default values + d_programChanged(0); } // ----------------------------------------------------------------------- @@ -148,14 +146,13 @@ void ZamCompUI::d_programChanged(uint32_t index) if (index != 0) return; - /* Default values - fKnobAttack->setDefault(10.0f); - fKnobRelease->setDefault(80.0f); - fKnobThresh->setDefault(0.0f); - fKnobRatio->setDefault(4.0f); - fKnobKnee->setDefault(0.0f); - fKnobMakeup->setDefault(0.0f); - */ + // Default values + fKnobAttack->setValue(10.0f); + fKnobRelease->setValue(80.0f); + fKnobThresh->setValue(0.0f); + fKnobRatio->setValue(4.0f); + fKnobKnee->setValue(0.0f); + fKnobMakeup->setValue(0.0f); } // ----------------------------------------------------------------------- @@ -163,50 +160,17 @@ void ZamCompUI::d_programChanged(uint32_t index) void ZamCompUI::imageKnobDragStarted(ImageKnob* knob) { - if (knob == fKnobAttack) - d_editParameter(ZamCompPlugin::paramAttack, true); - else if (knob == fKnobRelease) - d_editParameter(ZamCompPlugin::paramRelease, true); - else if (knob == fKnobThresh) - d_editParameter(ZamCompPlugin::paramThresh, true); - else if (knob == fKnobRatio) - d_editParameter(ZamCompPlugin::paramRatio, true); - else if (knob == fKnobKnee) - d_editParameter(ZamCompPlugin::paramKnee, true); - else if (knob == fKnobMakeup) - d_editParameter(ZamCompPlugin::paramMakeup, true); + d_editParameter(knob->getId(), true); } void ZamCompUI::imageKnobDragFinished(ImageKnob* knob) { - if (knob == fKnobAttack) - d_editParameter(ZamCompPlugin::paramAttack, false); - else if (knob == fKnobRelease) - d_editParameter(ZamCompPlugin::paramRelease, false); - else if (knob == fKnobThresh) - d_editParameter(ZamCompPlugin::paramThresh, false); - else if (knob == fKnobRatio) - d_editParameter(ZamCompPlugin::paramRatio, false); - else if (knob == fKnobKnee) - d_editParameter(ZamCompPlugin::paramKnee, false); - else if (knob == fKnobMakeup) - d_editParameter(ZamCompPlugin::paramMakeup, false); + d_editParameter(knob->getId(), false); } void ZamCompUI::imageKnobValueChanged(ImageKnob* knob, float value) { - if (knob == fKnobAttack) - d_setParameterValue(ZamCompPlugin::paramAttack, value); - else if (knob == fKnobRelease) - d_setParameterValue(ZamCompPlugin::paramRelease, value); - else if (knob == fKnobThresh) - d_setParameterValue(ZamCompPlugin::paramThresh, value); - else if (knob == fKnobRatio) - d_setParameterValue(ZamCompPlugin::paramRatio, value); - else if (knob == fKnobKnee) - d_setParameterValue(ZamCompPlugin::paramKnee, value); - else if (knob == fKnobMakeup) - d_setParameterValue(ZamCompPlugin::paramMakeup, value); + d_setParameterValue(knob->getId(), value); } void ZamCompUI::onDisplay() @@ -250,7 +214,7 @@ void ZamCompUI::onDisplay() else numRedLeds = 0; for (int i=numRedLeds; i>0; --i) - fLedRedImg.draw(sLedInitialX + (12 - i)*sLedSpacing, sRedLedStaticY); + fLedRedImg.drawAt(sLedInitialX + (12 - i)*sLedSpacing, sRedLedStaticY); if (fLedYellowValue >= 20.f) numYellowLeds = 19; @@ -294,12 +258,12 @@ void ZamCompUI::onDisplay() if (numYellowLeds > 12) { for (int i=12; i<numYellowLeds; ++i) - fLedRedImg.draw(sLedInitialX + i*sLedSpacing, sYellowLedStaticY); + fLedRedImg.drawAt(sLedInitialX + i*sLedSpacing, sYellowLedStaticY); for (int i=0; i<12; ++i) - fLedYellowImg.draw(sLedInitialX + i*sLedSpacing, sYellowLedStaticY); + fLedYellowImg.drawAt(sLedInitialX + i*sLedSpacing, sYellowLedStaticY); } else { for (int i=0; i<numYellowLeds; ++i) - fLedYellowImg.draw(sLedInitialX + i*sLedSpacing, sYellowLedStaticY); + fLedYellowImg.drawAt(sLedInitialX + i*sLedSpacing, sYellowLedStaticY); } } diff --git a/plugins/ZamComp/ZamCompUI.hpp b/plugins/ZamComp/ZamCompUI.hpp index e5faa14..a9e7f75 100644 --- a/plugins/ZamComp/ZamCompUI.hpp +++ b/plugins/ZamComp/ZamCompUI.hpp @@ -1,6 +1,6 @@ /* * ZamComp mono compressor - * Copyright (C) 2014 Damien Zammit <damien@zamaudio.com> + * Copyright (C) 2014 Damien Zammit <damien@zamaudio.com> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -23,7 +23,6 @@ #include "ImageKnob.hpp" #include "ZamCompArtwork.hpp" -#include "ZamCompPlugin.hpp" using DGL::Image; using DGL::ImageKnob; @@ -37,18 +36,17 @@ class ZamCompUI : public UI, { public: ZamCompUI(); - ~ZamCompUI() override; protected: // ------------------------------------------------------------------- // Information - unsigned int d_getWidth() const noexcept override + uint d_getWidth() const noexcept override { return ZamCompArtwork::zamcompWidth; } - unsigned int d_getHeight() const noexcept override + uint d_getHeight() const noexcept override { return ZamCompArtwork::zamcompHeight; } @@ -70,12 +68,8 @@ protected: private: Image fImgBackground; - ImageKnob* fKnobAttack; - ImageKnob* fKnobRelease; - ImageKnob* fKnobThresh; - ImageKnob* fKnobRatio; - ImageKnob* fKnobKnee; - ImageKnob* fKnobMakeup; + ScopedPointer<ImageKnob> fKnobAttack, fKnobRelease, fKnobThresh; + ScopedPointer<ImageKnob> fKnobRatio, fKnobKnee, fKnobMakeup; Image fLedRedImg; float fLedRedValue; diff --git a/plugins/ZamCompX2/Makefile b/plugins/ZamCompX2/Makefile index f68deaf..30f8647 100644 --- a/plugins/ZamCompX2/Makefile +++ b/plugins/ZamCompX2/Makefile @@ -20,13 +20,17 @@ OBJS_UI = \ ZamCompX2UI.cpp.o # -------------------------------------------------------------- -# No custom UI for now +# Do some magic -#TARGET_NOUI = true +include ../Makefile.mk # -------------------------------------------------------------- -# Do some magic +# Enable all possible plugin types -include ../Makefile.mk +ifeq ($(LINUX),true) +all: jack ladspa dssi lv2_sep vst +else +all: ladspa dssi lv2_sep vst +endif # -------------------------------------------------------------- diff --git a/plugins/ZamCompX2/ZamCompX2Plugin.cpp b/plugins/ZamCompX2/ZamCompX2Plugin.cpp index 951e095..5165c98 100644 --- a/plugins/ZamCompX2/ZamCompX2Plugin.cpp +++ b/plugins/ZamCompX2/ZamCompX2Plugin.cpp @@ -26,13 +26,6 @@ ZamCompX2Plugin::ZamCompX2Plugin() { // set default values d_setProgram(0); - - // reset - d_deactivate(); -} - -ZamCompX2Plugin::~ZamCompX2Plugin() -{ } // ----------------------------------------------------------------------- @@ -219,11 +212,7 @@ void ZamCompX2Plugin::d_setProgram(uint32_t index) ratio = 4.0f; thresdb = 0.0f; makeup = 0.0f; - gainred = 0.0f; stereolink = 1.0f; - outlevel = -45.0f; - - /* Default variable values */ /* reset filter values */ d_activate(); @@ -234,15 +223,12 @@ void ZamCompX2Plugin::d_setProgram(uint32_t index) void ZamCompX2Plugin::d_activate() { - oldL_yl = oldL_y1 = oldR_yl = oldR_y1 = 0.f; -} - -void ZamCompX2Plugin::d_deactivate() -{ - // all values to zero + gainred = 0.0f; + outlevel = -45.0f; + oldL_yl = oldL_y1 = oldR_yl = oldR_y1 = 0.f; } -void ZamCompX2Plugin::d_run(float** inputs, float** outputs, uint32_t frames) +void ZamCompX2Plugin::d_run(const float** inputs, float** outputs, uint32_t frames) { float srate = d_getSampleRate(); float width=(knee-0.99f)*6.f; @@ -321,7 +307,7 @@ void ZamCompX2Plugin::d_run(float** inputs, float** outputs, uint32_t frames) outputs[0][i] *= Lgain * from_dB(makeup); outputs[1][i] = inputs[1][i]; outputs[1][i] *= Rgain * from_dB(makeup); - + max = (fabsf(outputs[0][i]) > max) ? fabsf(outputs[0][i]) : sanitize_denormal(max); max = (fabsf(outputs[1][i]) > max) ? fabsf(outputs[1][i]) : sanitize_denormal(max); diff --git a/plugins/ZamCompX2/ZamCompX2Plugin.hpp b/plugins/ZamCompX2/ZamCompX2Plugin.hpp index e18bcec..ba8c21d 100644 --- a/plugins/ZamCompX2/ZamCompX2Plugin.hpp +++ b/plugins/ZamCompX2/ZamCompX2Plugin.hpp @@ -46,7 +46,6 @@ public: }; ZamCompX2Plugin(); - ~ZamCompX2Plugin() override; protected: // ------------------------------------------------------------------- @@ -80,15 +79,15 @@ protected: // ------------------------------------------------------------------- // Init - void d_initParameter(uint32_t index, Parameter& parameter) ; - void d_initProgramName(uint32_t index, d_string& programName) ; + void d_initParameter(uint32_t index, Parameter& parameter) override; + void d_initProgramName(uint32_t index, d_string& programName) override; // ------------------------------------------------------------------- // Internal data float d_getParameterValue(uint32_t index) const override; void d_setParameterValue(uint32_t index, float value) override; - void d_setProgram(uint32_t index) ; + void d_setProgram(uint32_t index) override; // ------------------------------------------------------------------- // Process @@ -111,8 +110,7 @@ protected: } void d_activate() override; - void d_deactivate() override; - void d_run(float** inputs, float** outputs, uint32_t frames) override; + void d_run(const float** inputs, float** outputs, uint32_t frames) override; // ------------------------------------------------------------------- diff --git a/plugins/ZamCompX2/ZamCompX2UI.cpp b/plugins/ZamCompX2/ZamCompX2UI.cpp index 02538f3..017f2d7 100644 --- a/plugins/ZamCompX2/ZamCompX2UI.cpp +++ b/plugins/ZamCompX2/ZamCompX2UI.cpp @@ -1,5 +1,5 @@ /* - * ZamCompX2 Stereo compressor + * ZamCompX2 Stereo compressor * Copyright (C) 2014 Damien Zammit <damien@zamaudio.com> * * This program is free software; you can redistribute it and/or @@ -15,6 +15,7 @@ * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ +#include "ZamCompX2Plugin.hpp" #include "ZamCompX2UI.hpp" using DGL::Point; @@ -35,23 +36,25 @@ ZamCompX2UI::ZamCompX2UI() // led values fLedRedValue = 0.0f; - fLedYellowValue = 0.0f; + fLedYellowValue = 0.0f; // knob Image knobImage(ZamCompX2Artwork::knobData, ZamCompX2Artwork::knobWidth, ZamCompX2Artwork::knobHeight); - // knob + // knob fKnobAttack = new ImageKnob(this, knobImage); - fKnobAttack->setPos(24, 45); + fKnobAttack->setAbsolutePos(24, 45); + fKnobAttack->setId(ZamCompX2Plugin::paramAttack); fKnobAttack->setRange(0.1f, 200.0f); fKnobAttack->setStep(0.1f); - fKnobAttack->setLogScale(true); + fKnobAttack->setUsingLogScale(true); fKnobAttack->setDefault(10.0f); fKnobAttack->setRotationAngle(240); fKnobAttack->setCallback(this); fKnobRelease = new ImageKnob(this, knobImage); - fKnobRelease->setPos(108, 45); + fKnobRelease->setAbsolutePos(108, 45); + fKnobRelease->setId(ZamCompX2Plugin::paramRelease); fKnobRelease->setRange(50.0f, 500.0f); fKnobRelease->setStep(1.0f); fKnobRelease->setDefault(80.0f); @@ -59,7 +62,8 @@ ZamCompX2UI::ZamCompX2UI() fKnobRelease->setCallback(this); fKnobThresh = new ImageKnob(this, knobImage); - fKnobThresh->setPos(191.5, 45); + fKnobThresh->setAbsolutePos(191.5, 45); + fKnobThresh->setId(ZamCompX2Plugin::paramThresh); fKnobThresh->setRange(-60.0f, 0.0f); fKnobThresh->setStep(1.0f); fKnobThresh->setDefault(0.0f); @@ -67,7 +71,8 @@ ZamCompX2UI::ZamCompX2UI() fKnobThresh->setCallback(this); fKnobRatio = new ImageKnob(this, knobImage); - fKnobRatio->setPos(270, 45); + fKnobRatio->setAbsolutePos(270, 45); + fKnobRatio->setId(ZamCompX2Plugin::paramRatio); fKnobRatio->setRange(1.0f, 20.0f); fKnobRatio->setStep(0.1f); fKnobRatio->setDefault(4.0f); @@ -75,7 +80,8 @@ ZamCompX2UI::ZamCompX2UI() fKnobRatio->setCallback(this); fKnobKnee = new ImageKnob(this, knobImage); - fKnobKnee->setPos(348.5, 45); + fKnobKnee->setAbsolutePos(348.5, 45); + fKnobKnee->setId(ZamCompX2Plugin::paramKnee); fKnobKnee->setRange(0.0f, 8.0f); fKnobKnee->setStep(0.1f); fKnobKnee->setDefault(0.0f); @@ -83,7 +89,8 @@ ZamCompX2UI::ZamCompX2UI() fKnobKnee->setCallback(this); fKnobMakeup = new ImageKnob(this, knobImage); - fKnobMakeup->setPos(427.3, 45); + fKnobMakeup->setAbsolutePos(427.3, 45); + fKnobMakeup->setId(ZamCompX2Plugin::paramMakeup); fKnobMakeup->setRange(-30.0f, 30.0f); fKnobMakeup->setStep(1.0f); fKnobMakeup->setDefault(0.0f); @@ -93,23 +100,13 @@ ZamCompX2UI::ZamCompX2UI() Image toggleonImage(ZamCompX2Artwork::toggleonData, ZamCompX2Artwork::toggleonWidth, ZamCompX2Artwork::toggleonHeight); Image toggleoffImage(ZamCompX2Artwork::toggleoffData, ZamCompX2Artwork::toggleoffWidth, ZamCompX2Artwork::toggleoffHeight); - Point<int> togglePosStart(652,72); - - fToggleStereo = new ImageToggle(this, toggleoffImage, toggleoffImage, toggleonImage); - fToggleStereo->setPos(togglePosStart); + fToggleStereo = new ImageToggle(this, toggleoffImage, toggleonImage); + fToggleStereo->setAbsolutePos(652, 72); + fToggleStereo->setId(ZamCompX2Plugin::paramStereo); fToggleStereo->setCallback(this); -} - -ZamCompX2UI::~ZamCompX2UI() -{ - delete fKnobAttack; - delete fKnobRelease; - delete fKnobThresh; - delete fKnobRatio; - delete fKnobKnee; - delete fKnobMakeup; - delete fToggleStereo; + // set default values + d_programChanged(0); } // ----------------------------------------------------------------------- @@ -152,8 +149,8 @@ void ZamCompX2UI::d_parameterChanged(uint32_t index, float value) } break; case ZamCompX2Plugin::paramStereo: - //fToggleStereo->setValue((int)value); - break; + fToggleStereo->setValue((int)value); + break; } } @@ -163,15 +160,13 @@ void ZamCompX2UI::d_programChanged(uint32_t index) return; // Default values - /* fKnobAttack->setValue(10.0f); fKnobRelease->setValue(80.0f); fKnobThresh->setValue(0.0f); fKnobRatio->setValue(4.0f); fKnobKnee->setValue(0.0f); fKnobMakeup->setValue(0.0f); - */ - //fToggleStereo->setValue(1.f); + fToggleStereo->setValue(1.0f); } // ----------------------------------------------------------------------- @@ -179,58 +174,24 @@ void ZamCompX2UI::d_programChanged(uint32_t index) void ZamCompX2UI::imageKnobDragStarted(ImageKnob* knob) { - if (knob == fKnobAttack) - d_editParameter(ZamCompX2Plugin::paramAttack, true); - else if (knob == fKnobRelease) - d_editParameter(ZamCompX2Plugin::paramRelease, true); - else if (knob == fKnobThresh) - d_editParameter(ZamCompX2Plugin::paramThresh, true); - else if (knob == fKnobRatio) - d_editParameter(ZamCompX2Plugin::paramRatio, true); - else if (knob == fKnobKnee) - d_editParameter(ZamCompX2Plugin::paramKnee, true); - else if (knob == fKnobMakeup) - d_editParameter(ZamCompX2Plugin::paramMakeup, true); + d_editParameter(knob->getId(), true); } void ZamCompX2UI::imageKnobDragFinished(ImageKnob* knob) { - if (knob == fKnobAttack) - d_editParameter(ZamCompX2Plugin::paramAttack, false); - else if (knob == fKnobRelease) - d_editParameter(ZamCompX2Plugin::paramRelease, false); - else if (knob == fKnobThresh) - d_editParameter(ZamCompX2Plugin::paramThresh, false); - else if (knob == fKnobRatio) - d_editParameter(ZamCompX2Plugin::paramRatio, false); - else if (knob == fKnobKnee) - d_editParameter(ZamCompX2Plugin::paramKnee, false); - else if (knob == fKnobMakeup) - d_editParameter(ZamCompX2Plugin::paramMakeup, false); + d_editParameter(knob->getId(), false); } void ZamCompX2UI::imageKnobValueChanged(ImageKnob* knob, float value) { - if (knob == fKnobAttack) - d_setParameterValue(ZamCompX2Plugin::paramAttack, value); - else if (knob == fKnobRelease) - d_setParameterValue(ZamCompX2Plugin::paramRelease, value); - else if (knob == fKnobThresh) - d_setParameterValue(ZamCompX2Plugin::paramThresh, value); - else if (knob == fKnobRatio) - d_setParameterValue(ZamCompX2Plugin::paramRatio, value); - else if (knob == fKnobKnee) - d_setParameterValue(ZamCompX2Plugin::paramKnee, value); - else if (knob == fKnobMakeup) - d_setParameterValue(ZamCompX2Plugin::paramMakeup, value); + d_setParameterValue(knob->getId(), value); } -void ZamCompX2UI::imageToggleClicked(ImageToggle *toggle, int) +void ZamCompX2UI::imageToggleClicked(ImageToggle* imageToggle, int) { - int flip = !toggle->getValue(); - if (toggle == fToggleStereo) { + int flip = !imageToggle->getValue(); + if (imageToggle == fToggleStereo) d_setParameterValue(ZamCompX2Plugin::paramStereo, flip); - } } void ZamCompX2UI::onDisplay() @@ -274,7 +235,7 @@ void ZamCompX2UI::onDisplay() else numRedLeds = 0; for (int i=numRedLeds; i>0; --i) - fLedRedImg.draw(sLedInitialX + (12 - i)*sLedSpacing, sRedLedStaticY); + fLedRedImg.drawAt(sLedInitialX + (12 - i)*sLedSpacing, sRedLedStaticY); if (fLedYellowValue >= 20.f) numYellowLeds = 19; @@ -318,12 +279,12 @@ void ZamCompX2UI::onDisplay() if (numYellowLeds > 12) { for (int i=12; i<numYellowLeds; ++i) - fLedRedImg.draw(sLedInitialX + i*sLedSpacing, sYellowLedStaticY); + fLedRedImg.drawAt(sLedInitialX + i*sLedSpacing, sYellowLedStaticY); for (int i=0; i<12; ++i) - fLedYellowImg.draw(sLedInitialX + i*sLedSpacing, sYellowLedStaticY); + fLedYellowImg.drawAt(sLedInitialX + i*sLedSpacing, sYellowLedStaticY); } else { for (int i=0; i<numYellowLeds; ++i) - fLedYellowImg.draw(sLedInitialX + i*sLedSpacing, sYellowLedStaticY); + fLedYellowImg.drawAt(sLedInitialX + i*sLedSpacing, sYellowLedStaticY); } } diff --git a/plugins/ZamCompX2/ZamCompX2UI.hpp b/plugins/ZamCompX2/ZamCompX2UI.hpp index 26c7c19..e9601a0 100644 --- a/plugins/ZamCompX2/ZamCompX2UI.hpp +++ b/plugins/ZamCompX2/ZamCompX2UI.hpp @@ -1,6 +1,6 @@ /* - * ZamCompX2 stereo compressor - * Copyright (C) 2014 Damien Zammit <damien@zamaudio.com> + * ZamCompX2 stereo compressor + * Copyright (C) 2014 Damien Zammit <damien@zamaudio.com> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -24,7 +24,6 @@ #include "ImageToggle.hpp" #include "ZamCompX2Artwork.hpp" -#include "ZamCompX2Plugin.hpp" using DGL::Image; using DGL::ImageKnob; @@ -35,23 +34,22 @@ START_NAMESPACE_DISTRHO // ----------------------------------------------------------------------- class ZamCompX2UI : public UI, - public ImageKnob::Callback, - public ImageToggle::Callback + public ImageKnob::Callback, + public ImageToggle::Callback { public: ZamCompX2UI(); - ~ZamCompX2UI() override; protected: // ------------------------------------------------------------------- // Information - unsigned int d_getWidth() const noexcept override + uint d_getWidth() const noexcept override { return ZamCompX2Artwork::zamcompx2Width; } - unsigned int d_getHeight() const noexcept override + uint d_getHeight() const noexcept override { return ZamCompX2Artwork::zamcompx2Height; } @@ -68,21 +66,17 @@ protected: void imageKnobDragStarted(ImageKnob* knob) override; void imageKnobDragFinished(ImageKnob* knob) override; void imageKnobValueChanged(ImageKnob* knob, float value) override; - void imageToggleClicked(ImageToggle *toggle, int button) override; + void imageToggleClicked(ImageToggle* imageToggle, int button) override; void onDisplay() override; private: Image fImgBackground; - ImageKnob* fKnobAttack; - ImageKnob* fKnobRelease; - ImageKnob* fKnobThresh; - ImageKnob* fKnobRatio; - ImageKnob* fKnobKnee; - ImageKnob* fKnobMakeup; - - Image fImgToggleSlider; - ImageToggle* fToggleStereo; + ScopedPointer<ImageKnob> fKnobAttack, fKnobRelease, fKnobThresh; + ScopedPointer<ImageKnob> fKnobRatio, fKnobKnee, fKnobMakeup; + + Image fImgSwitchSlider; + ScopedPointer<ImageToggle> fToggleStereo; Image fLedRedImg; float fLedRedValue; diff --git a/plugins/ZamEQ2/Makefile b/plugins/ZamEQ2/Makefile index a89a89f..12f3148 100644 --- a/plugins/ZamEQ2/Makefile +++ b/plugins/ZamEQ2/Makefile @@ -20,13 +20,17 @@ OBJS_UI = \ ZamEQ2UI.cpp.o # -------------------------------------------------------------- -# No custom UI for now +# Do some magic -#TARGET_NOUI = true +include ../Makefile.mk # -------------------------------------------------------------- -# Do some magic +# Enable all possible plugin types -include ../Makefile.mk +ifeq ($(LINUX),true) +all: jack ladspa dssi lv2_sep vst +else +all: ladspa dssi lv2_sep vst +endif # -------------------------------------------------------------- diff --git a/plugins/ZamEQ2/ZamEQ2Plugin.cpp b/plugins/ZamEQ2/ZamEQ2Plugin.cpp index 05e2d5d..a704c0a 100644 --- a/plugins/ZamEQ2/ZamEQ2Plugin.cpp +++ b/plugins/ZamEQ2/ZamEQ2Plugin.cpp @@ -26,13 +26,6 @@ ZamEQ2Plugin::ZamEQ2Plugin() { // set default values d_setProgram(0); - - // reset - d_deactivate(); -} - -ZamEQ2Plugin::~ZamEQ2Plugin() -{ } // ----------------------------------------------------------------------- @@ -291,12 +284,6 @@ void ZamEQ2Plugin::d_activate() } } -void ZamEQ2Plugin::d_deactivate() -{ - // all values to zero -} - - void ZamEQ2Plugin::lowshelf(int i, int ch, float srate, float fc, float g) { float k, v0; @@ -307,7 +294,7 @@ void ZamEQ2Plugin::lowshelf(int i, int ch, float srate, float fc, float g) if (g < 0.f) { // LF cut float denom = v0 + sqrt(2. * v0)*k + k*k; - b0[ch][i] = v0 * (1. + sqrt(2.)*k + k*k) / denom; + b0[ch][i] = v0 * (1. + sqrt(2.)*k + k*k) / denom; b1[ch][i] = 2. * v0*(k*k - 1.) / denom; b2[ch][i] = v0 * (1. - sqrt(2.)*k + k*k) / denom; a1[ch][i] = 2. * (k*k - v0) / denom; @@ -369,7 +356,7 @@ void ZamEQ2Plugin::peq(int i, int ch, float srate, float fc, float g, float bw) // boost float denom = 1. + k/q + k*k; b0[ch][i] = (1. + k*v0/q + k*k) / denom; - b1[ch][i] = 2. * (k*k - 1.) / denom; + b1[ch][i] = 2. * (k*k - 1.) / denom; b2[ch][i] = (1. - k*v0/q + k*k) / denom; a1[ch][i] = b1[ch][i]; a2[ch][i] = (1. - k/q + k*k) / denom; @@ -380,7 +367,7 @@ float ZamEQ2Plugin::run_filter(int i, int ch, double in) { double out; in = sanitize_denormal(in); - out = in * b0[ch][i] + x1[ch][i] * b1[ch][i] + out = in * b0[ch][i] + x1[ch][i] * b1[ch][i] + x2[ch][i] * b2[ch][i] - y1[ch][i] * a1[ch][i] - y2[ch][i] * a2[ch][i] + 1e-20f; @@ -393,7 +380,7 @@ float ZamEQ2Plugin::run_filter(int i, int ch, double in) return (float) out; } -void ZamEQ2Plugin::d_run(float** inputs, float** outputs, uint32_t frames) +void ZamEQ2Plugin::d_run(const float** inputs, float** outputs, uint32_t frames) { float srate = d_getSampleRate(); diff --git a/plugins/ZamEQ2/ZamEQ2Plugin.hpp b/plugins/ZamEQ2/ZamEQ2Plugin.hpp index 7ff0521..43b36ab 100644 --- a/plugins/ZamEQ2/ZamEQ2Plugin.hpp +++ b/plugins/ZamEQ2/ZamEQ2Plugin.hpp @@ -1,5 +1,5 @@ /* - * ZamEQ2 2 band parametric equaliser + * ZamEQ2 2 band parametric equaliser * Copyright (C) 2014 Damien Zammit <damien@zamaudio.com> * * This program is free software; you can redistribute it and/or @@ -47,7 +47,6 @@ public: }; ZamEQ2Plugin(); - ~ZamEQ2Plugin() override; protected: // ------------------------------------------------------------------- @@ -117,8 +116,7 @@ protected: } void d_activate() override; - void d_deactivate() override; - void d_run(float** inputs, float** outputs, uint32_t frames) override; + void d_run(const float** inputs, float** outputs, uint32_t frames) override; void peq(int i, int ch, float srate, float fc, float g, float bw); void lowshelf(int i, int ch, float srate, float fc, float g); diff --git a/plugins/ZamEQ2/ZamEQ2UI.cpp b/plugins/ZamEQ2/ZamEQ2UI.cpp index a00248a..c368754 100644 --- a/plugins/ZamEQ2/ZamEQ2UI.cpp +++ b/plugins/ZamEQ2/ZamEQ2UI.cpp @@ -1,6 +1,6 @@ /* * ZamEQ2 2 band parametric equaliser - * Copyright (C) 2014 Damien Zammit <damien@zamaudio.com> + * Copyright (C) 2014 Damien Zammit <damien@zamaudio.com> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -35,79 +35,79 @@ ZamEQ2UI::ZamEQ2UI() // knob Image knobImage(ZamEQ2Artwork::knobData, ZamEQ2Artwork::knobWidth, ZamEQ2Artwork::knobHeight); - // knob + // knob fKnobGain1 = new ImageKnob(this, knobImage); - fKnobGain1->setPos(91, 172); + fKnobGain1->setAbsolutePos(91, 172); fKnobGain1->setRange(-50.f, 20.0f); fKnobGain1->setRotationAngle(240); fKnobGain1->setDefault(0.0f); fKnobGain1->setCallback(this); fKnobQ1 = new ImageKnob(this, knobImage); - fKnobQ1->setPos(91, 122); + fKnobQ1->setAbsolutePos(91, 122); fKnobQ1->setRange(0.1f, 6.0f); - fKnobQ1->setLogScale(true); + fKnobQ1->setUsingLogScale(true); fKnobQ1->setRotationAngle(240); fKnobQ1->setDefault(1.0f); fKnobQ1->setCallback(this); fKnobFreq1 = new ImageKnob(this, knobImage); - fKnobFreq1->setPos(23, 144); + fKnobFreq1->setAbsolutePos(23, 144); fKnobFreq1->setRange(20.f, 14000.0f); - fKnobFreq1->setLogScale(true); + fKnobFreq1->setUsingLogScale(true); fKnobFreq1->setRotationAngle(240); fKnobFreq1->setDefault(500.0f); fKnobFreq1->setCallback(this); fKnobGain2 = new ImageKnob(this, knobImage); - fKnobGain2->setPos(567, 172); + fKnobGain2->setAbsolutePos(567, 172); fKnobGain2->setRange(-50.f, 20.0f); fKnobGain2->setRotationAngle(240); fKnobGain2->setDefault(0.0f); fKnobGain2->setCallback(this); fKnobQ2 = new ImageKnob(this, knobImage); - fKnobQ2->setPos(567, 122); + fKnobQ2->setAbsolutePos(567, 122); fKnobQ2->setRange(0.1f, 6.0f); - fKnobQ2->setLogScale(true); + fKnobQ2->setUsingLogScale(true); fKnobQ2->setRotationAngle(240); fKnobQ2->setDefault(1.0f); fKnobQ2->setCallback(this); fKnobFreq2 = new ImageKnob(this, knobImage); - fKnobFreq2->setPos(499, 144); + fKnobFreq2->setAbsolutePos(499, 144); fKnobFreq2->setRange(20.f, 14000.0f); - fKnobFreq2->setLogScale(true); + fKnobFreq2->setUsingLogScale(true); fKnobFreq2->setRotationAngle(240); fKnobFreq2->setDefault(3000.0f); fKnobFreq2->setCallback(this); fKnobGainL = new ImageKnob(this, knobImage); - fKnobGainL->setPos(91, 52); + fKnobGainL->setAbsolutePos(91, 52); fKnobGainL->setRange(-50.f, 20.0f); fKnobGainL->setRotationAngle(240); fKnobGainL->setDefault(0.0f); fKnobGainL->setCallback(this); fKnobFreqL = new ImageKnob(this, knobImage); - fKnobFreqL->setPos(23, 23); + fKnobFreqL->setAbsolutePos(23, 23); fKnobFreqL->setRange(20.f, 14000.0f); - fKnobFreqL->setLogScale(true); + fKnobFreqL->setUsingLogScale(true); fKnobFreqL->setRotationAngle(240); fKnobFreqL->setDefault(250.0f); fKnobFreqL->setCallback(this); fKnobGainH = new ImageKnob(this, knobImage); - fKnobGainH->setPos(567, 53); + fKnobGainH->setAbsolutePos(567, 53); fKnobGainH->setRange(-50.f, 20.0f); fKnobGainH->setRotationAngle(240); fKnobGainH->setDefault(0.0f); fKnobGainH->setCallback(this); fKnobFreqH = new ImageKnob(this, knobImage); - fKnobFreqH->setPos(499, 24); + fKnobFreqH->setAbsolutePos(499, 24); fKnobFreqH->setRange(20.f, 14000.0f); - fKnobFreqH->setLogScale(true); + fKnobFreqH->setUsingLogScale(true); fKnobFreqH->setRotationAngle(240); fKnobFreqH->setDefault(8000.0f); fKnobFreqH->setCallback(this); @@ -122,24 +122,12 @@ ZamEQ2UI::ZamEQ2UI() fSliderMaster->setValue(0.f); fSliderMaster->setStep(6.f); fSliderMaster->setCallback(this); - + fCanvasArea.setPos(165,10); fCanvasArea.setSize(305,180); -} -ZamEQ2UI::~ZamEQ2UI() -{ - delete fKnobGain1; - delete fKnobQ1; - delete fKnobFreq1; - delete fKnobGain2; - delete fKnobQ2; - delete fKnobFreq2; - delete fKnobGainL; - delete fKnobFreqL; - delete fKnobGainH; - delete fKnobFreqH; - delete fSliderMaster; + // set default values + d_programChanged(0); } // ----------------------------------------------------------------------- @@ -309,7 +297,7 @@ void ZamEQ2UI::lowshelf(int i, int ch, float srate, float fc, float g) if (g < 0.f) { // LF cut float denom = v0 + sqrt(2. * v0)*k + k*k; - b0[ch][i] = v0 * (1. + sqrt(2.)*k + k*k) / denom; + b0[ch][i] = v0 * (1. + sqrt(2.)*k + k*k) / denom; b1[ch][i] = 2. * v0*(k*k - 1.) / denom; b2[ch][i] = v0 * (1. - sqrt(2.)*k + k*k) / denom; a1[ch][i] = 2. * (k*k - v0) / denom; @@ -371,7 +359,7 @@ void ZamEQ2UI::peq(int i, int ch, float srate, float fc, float g, float bw) // boost float denom = 1. + k/q + k*k; b0[ch][i] = (1. + k*v0/q + k*k) / denom; - b1[ch][i] = 2. * (k*k - 1.) / denom; + b1[ch][i] = 2. * (k*k - 1.) / denom; b2[ch][i] = (1. - k*v0/q + k*k) / denom; a1[ch][i] = b1[ch][i]; a2[ch][i] = (1. - k/q + k*k) / denom; @@ -437,14 +425,14 @@ void ZamEQ2UI::onDisplay() glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_LINE_SMOOTH); glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); - + glLineWidth(2); int i; glColor4f(1.f, 1.f, 0.235f, 1.0f); for (i = 1; i < EQPOINTS; ++i) { glBegin(GL_LINES); if (eqy[i-1] < fCanvasArea.getY() + fCanvasArea.getHeight() - && eqy[i] < fCanvasArea.getY() + fCanvasArea.getHeight() + && eqy[i] < fCanvasArea.getY() + fCanvasArea.getHeight() && eqy[i-1] > fCanvasArea.getY() && eqy[i] > fCanvasArea.getY()) { glVertex2i(eqx[i-1], eqy[i-1]); diff --git a/plugins/ZamEQ2/ZamEQ2UI.hpp b/plugins/ZamEQ2/ZamEQ2UI.hpp index 716f1cd..6bb4100 100644 --- a/plugins/ZamEQ2/ZamEQ2UI.hpp +++ b/plugins/ZamEQ2/ZamEQ2UI.hpp @@ -1,6 +1,6 @@ /* * ZamEQ2 2 band parametric equaliser - * Copyright (C) 2014 Damien Zammit <damien@zamaudio.com> + * Copyright (C) 2014 Damien Zammit <damien@zamaudio.com> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -18,9 +18,6 @@ #ifndef ZAMEQ2UI_HPP_INCLUDED #define ZAMEQ2UI_HPP_INCLUDED -#define EQPOINTS 1000 -#include <complex> - #include "DistrhoUI.hpp" #include "ImageKnob.hpp" @@ -29,6 +26,9 @@ #include "ZamEQ2Artwork.hpp" #include "ZamEQ2Plugin.hpp" +#define EQPOINTS 1000 +#include <complex> + using DGL::Image; using DGL::ImageKnob; using DGL::ImageSlider; @@ -38,23 +38,22 @@ START_NAMESPACE_DISTRHO // ----------------------------------------------------------------------- class ZamEQ2UI : public UI, - public ImageKnob::Callback, - public ImageSlider::Callback + public ImageKnob::Callback, + public ImageSlider::Callback { public: ZamEQ2UI(); - ~ZamEQ2UI() override; protected: // ------------------------------------------------------------------- // Information - unsigned int d_getWidth() const noexcept override + uint d_getWidth() const noexcept override { return ZamEQ2Artwork::zameq2Width; } - unsigned int d_getHeight() const noexcept override + uint d_getHeight() const noexcept override { return ZamEQ2Artwork::zameq2Height; } @@ -105,6 +104,7 @@ protected: void peq(int i, int ch, float srate, float fc, float g, float bw); void lowshelf(int i, int ch, float srate, float fc, float g); void highshelf(int i, int ch, float srate, float fc, float g); + // ------------------------------------------------------------------- // DSP Callbacks @@ -126,17 +126,12 @@ protected: private: Image fImgBackground; - ImageKnob* fKnobGain1; - ImageKnob* fKnobQ1; - ImageKnob* fKnobFreq1; - ImageKnob* fKnobGain2; - ImageKnob* fKnobQ2; - ImageKnob* fKnobFreq2; - ImageKnob* fKnobGainL; - ImageKnob* fKnobFreqL; - ImageKnob* fKnobGainH; - ImageKnob* fKnobFreqH; - ImageSlider* fSliderMaster; + ScopedPointer<ImageKnob> fKnobGain1; + ScopedPointer<ImageKnob> fKnobQ1, fKnobFreq1, fKnobGain2; + ScopedPointer<ImageKnob> fKnobQ2, fKnobFreq2; + ScopedPointer<ImageKnob> fKnobGainL, fKnobFreqL; + ScopedPointer<ImageKnob> fKnobGainH, fKnobFreqH; + ScopedPointer<ImageSlider> fSliderMaster; float eqx[EQPOINTS]; float eqy[EQPOINTS]; DGL::Rectangle<int> fCanvasArea; diff --git a/plugins/ZamSynth/Makefile b/plugins/ZamSynth/Makefile index 90eb759..56a0426 100644 --- a/plugins/ZamSynth/Makefile +++ b/plugins/ZamSynth/Makefile @@ -20,13 +20,17 @@ OBJS_UI = \ ZamSynthUI.cpp.o # -------------------------------------------------------------- -# No custom UI for now +# Do some magic -#TARGET_NOUI = true +include ../Makefile.mk # -------------------------------------------------------------- -# Do some magic +# Enable all possible plugin types -include ../Makefile.mk +ifeq ($(LINUX),true) +all: jack dssi lv2_sep vst +else +all: dssi lv2_sep vst +endif # -------------------------------------------------------------- diff --git a/plugins/ZamSynth/ZamSynthPlugin.cpp b/plugins/ZamSynth/ZamSynthPlugin.cpp index 7ee1f51..d8dcd6a 100644 --- a/plugins/ZamSynth/ZamSynthPlugin.cpp +++ b/plugins/ZamSynth/ZamSynthPlugin.cpp @@ -26,13 +26,6 @@ ZamSynthPlugin::ZamSynthPlugin() { // set default values d_setProgram(0); - - // reset - d_deactivate(); -} - -ZamSynthPlugin::~ZamSynthPlugin() -{ } // ----------------------------------------------------------------------- @@ -137,7 +130,7 @@ void ZamSynthPlugin::d_setProgram(uint32_t index) voice[i].vi = 0.f; voice[i].rampstate = 0.f; } - + curvoice = voice; //ptr to first voice for (int i = 0; i < AREAHEIGHT; i++) { @@ -193,12 +186,6 @@ void ZamSynthPlugin::d_activate() { } -void ZamSynthPlugin::d_deactivate() -{ - // all values to zero -} - - float ZamSynthPlugin::wavetable(float in) { int index = (int) ((in / (2.0 * M_PI)) * (AREAHEIGHT-1.0)); @@ -206,14 +193,14 @@ float ZamSynthPlugin::wavetable(float in) //return (sin(in)); } -void ZamSynthPlugin::d_run(float**, float** outputs, uint32_t frames, +void ZamSynthPlugin::d_run(const float**, float** outputs, uint32_t frames, const MidiEvent* midievent, uint32_t midicount) { float srate = d_getSampleRate(); int slowfactor = (int) srate / (speed * 2400); // 1-20 ~ 20-1 uint32_t i; float RD_0; - + for (i = 0; i < midicount; i++) { int type = midievent[i].buf[0] & 0xF0; int chan = midievent[i].buf[0] & 0x0F; @@ -252,7 +239,7 @@ void ZamSynthPlugin::d_run(float**, float** outputs, uint32_t frames, } } } - + float power; bool signal; float wave; diff --git a/plugins/ZamSynth/ZamSynthPlugin.hpp b/plugins/ZamSynth/ZamSynthPlugin.hpp index 7325ed3..4fae641 100644 --- a/plugins/ZamSynth/ZamSynthPlugin.hpp +++ b/plugins/ZamSynth/ZamSynthPlugin.hpp @@ -1,5 +1,5 @@ /* - * ZamSynth polyphonic synthesiser + * ZamSynth polyphonic synthesiser * Copyright (C) 2014 Damien Zammit <damien@zamaudio.com> * * This program is free software; you can redistribute it and/or @@ -40,7 +40,6 @@ public: }; ZamSynthPlugin(); - ~ZamSynthPlugin() override; protected: // ------------------------------------------------------------------- @@ -106,8 +105,7 @@ protected: float wavetable(float in); void d_activate() override; - void d_deactivate() override; - void d_run(float** inputs, float** outputs, uint32_t frames, + void d_run(const float** inputs, float** outputs, uint32_t frames, const MidiEvent* midievent, uint32_t midicount) override; void d_setState(const char* key, const char* value) override; void d_initStateKey(unsigned int key, d_string& val) override; diff --git a/plugins/ZamSynth/ZamSynthUI.cpp b/plugins/ZamSynth/ZamSynthUI.cpp index 81e7d59..92233be 100644 --- a/plugins/ZamSynth/ZamSynthUI.cpp +++ b/plugins/ZamSynth/ZamSynthUI.cpp @@ -1,6 +1,6 @@ /* - * ZamSynth polyphonic synthesiser - * Copyright (C) 2014 Damien Zammit <damien@zamaudio.com> + * ZamSynth polyphonic synthesiser + * Copyright (C) 2014 Damien Zammit <damien@zamaudio.com> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -15,10 +15,9 @@ * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ +#include "ZamSynthPlugin.hpp" #include "ZamSynthUI.hpp" -using DGL::Point; - START_NAMESPACE_DISTRHO // ----------------------------------------------------------------------- @@ -29,6 +28,9 @@ ZamSynthUI::ZamSynthUI() // background fImgBackground = Image(ZamSynthArtwork::zamsynthData, ZamSynthArtwork::zamsynthWidth, ZamSynthArtwork::zamsynthHeight, GL_BGR); + fDragging = false; + fDragValid = false; + // knob Image knobImage(ZamSynthArtwork::knobData, ZamSynthArtwork::knobWidth, ZamSynthArtwork::knobHeight); @@ -40,17 +42,17 @@ ZamSynthUI::ZamSynthUI() Image toggleonImage(ZamSynthArtwork::toggleonData, ZamSynthArtwork::toggleonWidth, ZamSynthArtwork::toggleonHeight); Image toggleoffImage(ZamSynthArtwork::toggleoffData, ZamSynthArtwork::toggleoffWidth, ZamSynthArtwork::toggleoffHeight); - // knob + // knob fKnobGain = new ImageKnob(this, knobImage); - fKnobGain->setPos(284.75, 240); + fKnobGain->setAbsolutePos(284.75, 240); fKnobGain->setRange(-30.f, 30.0f); fKnobGain->setDefault(0.0f); fKnobGain->setRotationAngle(240); fKnobGain->setCallback(this); fKnobSpeed = new ImageKnob(this, knobImage); - fKnobSpeed->setPos(284.75, 92.5); + fKnobSpeed->setAbsolutePos(284.75, 92.5); fKnobSpeed->setRange(1.f, 20.0f); fKnobSpeed->setDefault(10.0f); fKnobSpeed->setStep(1.0f); @@ -59,7 +61,7 @@ ZamSynthUI::ZamSynthUI() // button fButtonSmooth = new ImageButton(this, smoothrImage, smoothrImage, smoothyImage); - fButtonSmooth->setPos(265, 165); + fButtonSmooth->setAbsolutePos(265, 165); fButtonSmooth->setCallback(this); // drawing area @@ -71,18 +73,13 @@ ZamSynthUI::ZamSynthUI() } // toggle - fToggleGraph = new ImageToggle(this, toggleonImage, toggleoffImage, toggleoffImage); - fToggleGraph->setPos(300, 33); + fToggleGraph = new ImageToggle(this, toggleonImage, toggleoffImage); + fToggleGraph->setAbsolutePos(300, 33); fToggleGraph->setCallback(this); fToggleGraph->setValue(0.f); -} -ZamSynthUI::~ZamSynthUI() -{ - delete fKnobGain; - delete fKnobSpeed; - delete fButtonSmooth; - delete fToggleGraph; + // set default values + d_programChanged(0); } void ZamSynthUI::d_stateChanged(const char* key, const char* value) @@ -183,7 +180,7 @@ void ZamSynthUI::imageButtonClicked(ImageButton*, int) gaussiansmooth(wavesmooth, xs, gr, AREAHEIGHT, 4); memcpy(gr, wavesmooth, AREAHEIGHT*sizeof(float)); - + char tmp[4*AREAHEIGHT+1] = {0}; for(i = 0; i < AREAHEIGHT; i++) { char wavestr[5] = {0}; @@ -191,7 +188,7 @@ void ZamSynthUI::imageButtonClicked(ImageButton*, int) strcat(tmp, wavestr); } - if (fToggleGraph->getValue() == 1.f) + if (fToggleGraph->getValue() == 1.f) d_setState("envelope", tmp); else d_setState("waveform", tmp); @@ -201,7 +198,7 @@ void ZamSynthUI::imageToggleClicked(ImageToggle*, int) { float toggle = fToggleGraph->getValue(); fToggleGraph->setValue(toggle); - d_setParameterValue(ZamSynthPlugin::paramGraph, toggle); + d_setParameterValue(ZamSynthPlugin::paramGraph, toggle); } void ZamSynthUI::gaussiansmooth(float* smoothed, float* xs, float* ys, int n, int radius) @@ -222,14 +219,14 @@ void ZamSynthUI::gaussiansmooth(float* smoothed, float* xs, float* ys, int n, in } } -bool ZamSynthUI::onMouse(int button, bool press, int x, int y) +bool ZamSynthUI::onMouse(const MouseEvent& ev) { - if (button != 1) + if (ev.button != 1) return false; - if (press) + if (ev.press) { - if (! fCanvasArea.contains(x, y)) { + if (! fCanvasArea.contains(ev.pos)) { //fDragValid = false; return false; } @@ -247,7 +244,7 @@ bool ZamSynthUI::onMouse(int button, bool press, int x, int y) return false; } -bool ZamSynthUI::onMotion(int x, int y) +bool ZamSynthUI::onMotion(const MotionEvent& ev) { if (! fDragging) return false; @@ -255,15 +252,18 @@ bool ZamSynthUI::onMotion(int x, int y) { fDragValid = true; } - + + int x = ev.pos.getX(); + int y = ev.pos.getY(); + if (x > fCanvasArea.getWidth()+10) x = fCanvasArea.getWidth()+10; if (x < 10) x = 10; if (y < 10) y = 10; - + float *gr; if (fToggleGraph->getValue() == 0.f) { - gr = wave_y; + gr = wave_y; if (y > fCanvasArea.getHeight()+10) y = fCanvasArea.getHeight()+10; } else { @@ -271,7 +271,7 @@ bool ZamSynthUI::onMotion(int x, int y) if (y > fCanvasArea.getHeight() / 2. + 10) y = fCanvasArea.getHeight() / 2. + 10; } - + if (gr[x-10] != (y-10)) { char tmp[4*AREAHEIGHT+1] = {0}; int i; @@ -282,12 +282,12 @@ bool ZamSynthUI::onMotion(int x, int y) } gr[x-10] = y-10; - + if (gr == env_y) d_setState("envelope",tmp); else d_setState("waveform",tmp); - + repaint(); } diff --git a/plugins/ZamSynth/ZamSynthUI.hpp b/plugins/ZamSynth/ZamSynthUI.hpp index 6fc2867..291990f 100644 --- a/plugins/ZamSynth/ZamSynthUI.hpp +++ b/plugins/ZamSynth/ZamSynthUI.hpp @@ -1,6 +1,6 @@ /* * ZamSynth polyphonic synthesiser - * Copyright (C) 2014 Damien Zammit <damien@zamaudio.com> + * Copyright (C) 2014 Damien Zammit <damien@zamaudio.com> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -20,50 +20,47 @@ #include "DistrhoUI.hpp" -#include "Geometry.hpp" -#include "ImageKnob.hpp" #include "ImageButton.hpp" +#include "ImageKnob.hpp" #include "ImageToggle.hpp" #include "ZamSynthArtwork.hpp" -#include "ZamSynthPlugin.hpp" + +#define AREAHEIGHT 250 using DGL::Image; -using DGL::ImageKnob; using DGL::ImageButton; +using DGL::ImageKnob; using DGL::ImageToggle; -#define AREAHEIGHT 250 - START_NAMESPACE_DISTRHO // ----------------------------------------------------------------------- class ZamSynthUI : public UI, - public ImageKnob::Callback, - public ImageButton::Callback, - public ImageToggle::Callback + public ImageButton::Callback, + public ImageKnob::Callback, + public ImageToggle::Callback { public: ZamSynthUI(); - ~ZamSynthUI() override; protected: // ------------------------------------------------------------------- // Information - unsigned int d_getWidth() const noexcept override + uint d_getWidth() const noexcept override { return ZamSynthArtwork::zamsynthWidth; } - unsigned int d_getHeight() const noexcept override + uint d_getHeight() const noexcept override { return ZamSynthArtwork::zamsynthHeight; } void gaussiansmooth(float* smoothed, float* xs, float* ys, int n, int radius); - + // ------------------------------------------------------------------- // DSP Callbacks @@ -82,15 +79,14 @@ protected: void imageToggleClicked(ImageToggle* toggle, int) override; void onDisplay() override; - bool onMouse(int, bool, int, int) override; - bool onMotion(int, int) override; + bool onMouse(const MouseEvent&) override; + bool onMotion(const MotionEvent&) override; private: Image fImgBackground; - ImageKnob* fKnobGain; - ImageKnob* fKnobSpeed; - ImageButton* fButtonSmooth; - ImageToggle* fToggleGraph; + ScopedPointer<ImageKnob> fKnobGain, fKnobSpeed; + ScopedPointer<ImageButton> fButtonSmooth; + ScopedPointer<ImageToggle> fToggleGraph; float wave_y[AREAHEIGHT]; float env_y[AREAHEIGHT]; bool fGraph; diff --git a/plugins/ZamTube/Makefile b/plugins/ZamTube/Makefile index 8f7ebb7..6cc51d7 100644 --- a/plugins/ZamTube/Makefile +++ b/plugins/ZamTube/Makefile @@ -21,13 +21,17 @@ OBJS_UI = \ ZamTubeUI.cpp.o # -------------------------------------------------------------- -# No custom UI for now +# Do some magic -#TARGET_NOUI = true +include ../Makefile.mk # -------------------------------------------------------------- -# Do some magic +# Enable all possible plugin types -include ../Makefile.mk +ifeq ($(LINUX),true) +all: jack ladspa dssi lv2_sep vst +else +all: ladspa dssi lv2_sep vst +endif # -------------------------------------------------------------- diff --git a/plugins/ZamTube/ZamTubePlugin.cpp b/plugins/ZamTube/ZamTubePlugin.cpp index b72b0fd..3134b89 100644 --- a/plugins/ZamTube/ZamTubePlugin.cpp +++ b/plugins/ZamTube/ZamTubePlugin.cpp @@ -33,13 +33,6 @@ ZamTubePlugin::ZamTubePlugin() { // set default values d_setProgram(0); - - // reset - d_deactivate(); -} - -ZamTubePlugin::~ZamTubePlugin() -{ } // ----------------------------------------------------------------------- @@ -288,12 +281,7 @@ void ZamTubePlugin::d_activate() for (int i=0; i<4; i++) fRec24[i] = 0; } -void ZamTubePlugin::d_deactivate() -{ - // all values to zero -} - -void ZamTubePlugin::d_run(float** inputs, float** outputs, uint32_t frames) +void ZamTubePlugin::d_run(const float** inputs, float** outputs, uint32_t frames) { T tubetone = 0.f; diff --git a/plugins/ZamTube/ZamTubePlugin.hpp b/plugins/ZamTube/ZamTubePlugin.hpp index c5dadb6..3c42730 100644 --- a/plugins/ZamTube/ZamTubePlugin.hpp +++ b/plugins/ZamTube/ZamTubePlugin.hpp @@ -1,6 +1,6 @@ /* - * ZamTube triode WDF distortion model - * Copyright (C) 2014 Damien Zammit <damien@zamaudio.com> + * ZamTube triode WDF distortion model + * Copyright (C) 2014 Damien Zammit <damien@zamaudio.com> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -25,13 +25,9 @@ START_NAMESPACE_DISTRHO // ----------------------------------------------------------------------- - -#include <stdint.h> -#include <math.h> - -template <int N> inline float faustpower(float x) { return powf(x,N); } +template <int N> inline float faustpower(float x) { return powf(x,N); } template <int N> inline double faustpower(double x) { return pow(x,N); } -template <int N> inline int faustpower(int x) { return faustpower<N/2>(x) * faustpower<N-N/2>(x); } +template <int N> inline int faustpower(int x) { return faustpower<N/2>(x) * faustpower<N-N/2>(x); } template <> inline int faustpower<0>(int) { return 1; } template <> inline int faustpower<1>(int x) { return x; } @@ -119,7 +115,6 @@ public: }; ZamTubePlugin(); - ~ZamTubePlugin() override; protected: // ------------------------------------------------------------------- @@ -184,8 +179,7 @@ protected: } void d_activate() override; - void d_deactivate() override; - void d_run(float** inputs, float** outputs, uint32_t frames) override; + void d_run(const float** inputs, float** outputs, uint32_t frames) override; // ------------------------------------------------------------------- diff --git a/plugins/ZamTube/ZamTubeUI.cpp b/plugins/ZamTube/ZamTubeUI.cpp index a4e9e6b..e18c7ee 100644 --- a/plugins/ZamTube/ZamTubeUI.cpp +++ b/plugins/ZamTube/ZamTubeUI.cpp @@ -1,6 +1,6 @@ /* * ZamTube triode WDF distortion model - * Copyright (C) 2014 Damien Zammit <damien@zamaudio.com> + * Copyright (C) 2014 Damien Zammit <damien@zamaudio.com> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -15,6 +15,12 @@ * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ +#include "ZamTubePlugin.hpp" + +// conflict macros in wdf +#undef max +#undef min + #include "ZamTubeUI.hpp" using DGL::Point; @@ -35,9 +41,9 @@ ZamTubeUI::ZamTubeUI() // notch slider Image notchImage(ZamTubeArtwork::notchData, ZamTubeArtwork::notchWidth, ZamTubeArtwork::notchHeight); - // knobs + // knobs fKnobTube = new ImageKnob(this, knobImage); - fKnobTube->setPos(177, 76); + fKnobTube->setAbsolutePos(177, 76); fKnobTube->setRange(0.f, 30.0f); fKnobTube->setStep(0.1f); fKnobTube->setDefault(0.0f); @@ -45,7 +51,7 @@ ZamTubeUI::ZamTubeUI() fKnobTube->setCallback(this); fKnobBass = new ImageKnob(this, knobImage); - fKnobBass->setPos(63, 140.5); + fKnobBass->setAbsolutePos(63, 140.5); fKnobBass->setRange(0.f, 1.0f); fKnobBass->setStep(0.01f); fKnobBass->setDefault(0.5f); @@ -53,7 +59,7 @@ ZamTubeUI::ZamTubeUI() fKnobBass->setCallback(this); fKnobMids = new ImageKnob(this, knobImage); - fKnobMids->setPos(63, 87); + fKnobMids->setAbsolutePos(63, 87); fKnobMids->setRange(0.f, 1.0f); fKnobMids->setStep(0.01f); fKnobMids->setDefault(0.5f); @@ -61,7 +67,7 @@ ZamTubeUI::ZamTubeUI() fKnobMids->setCallback(this); fKnobTreb = new ImageKnob(this, knobImage); - fKnobTreb->setPos(63, 33); + fKnobTreb->setAbsolutePos(63, 33); fKnobTreb->setRange(0.f, 1.0f); fKnobTreb->setStep(0.01f); fKnobTreb->setDefault(0.0f); @@ -69,7 +75,7 @@ ZamTubeUI::ZamTubeUI() fKnobTreb->setCallback(this); fKnobGain = new ImageKnob(this, knobImage); - fKnobGain->setPos(63, 231); + fKnobGain->setAbsolutePos(63, 231); fKnobGain->setRange(-30.f, 30.0f); fKnobGain->setStep(1.f); fKnobGain->setDefault(0.0f); @@ -86,16 +92,9 @@ ZamTubeUI::ZamTubeUI() fSliderNotch->setStep(1.f); fSliderNotch->setValue(0.f); fSliderNotch->setCallback(this); -} -ZamTubeUI::~ZamTubeUI() -{ - delete fKnobTube; - delete fKnobBass; - delete fKnobMids; - delete fKnobTreb; - delete fKnobGain; - delete fSliderNotch; + // set default values + d_programChanged(0); } // ----------------------------------------------------------------------- diff --git a/plugins/ZamTube/ZamTubeUI.hpp b/plugins/ZamTube/ZamTubeUI.hpp index f73dc5d..b992eda 100644 --- a/plugins/ZamTube/ZamTubeUI.hpp +++ b/plugins/ZamTube/ZamTubeUI.hpp @@ -1,6 +1,6 @@ /* - * ZamTube triode WDF distortion model - * Copyright (C) 2014 Damien Zammit <damien@zamaudio.com> + * ZamTube triode WDF distortion model + * Copyright (C) 2014 Damien Zammit <damien@zamaudio.com> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -24,7 +24,6 @@ #include "ImageSlider.hpp" #include "ZamTubeArtwork.hpp" -#include "ZamTubePlugin.hpp" using DGL::Image; using DGL::ImageKnob; @@ -35,23 +34,22 @@ START_NAMESPACE_DISTRHO // ----------------------------------------------------------------------- class ZamTubeUI : public UI, - public ImageKnob::Callback, - public ImageSlider::Callback + public ImageKnob::Callback, + public ImageSlider::Callback { public: ZamTubeUI(); - ~ZamTubeUI() override; protected: // ------------------------------------------------------------------- // Information - unsigned int d_getWidth() const noexcept override + uint d_getWidth() const noexcept override { return ZamTubeArtwork::zamtubeWidth; } - unsigned int d_getHeight() const noexcept override + uint d_getHeight() const noexcept override { return ZamTubeArtwork::zamtubeHeight; } @@ -77,12 +75,8 @@ protected: private: Image fImgBackground; - ImageKnob* fKnobTube; - ImageKnob* fKnobBass; - ImageKnob* fKnobMids; - ImageKnob* fKnobTreb; - ImageKnob* fKnobGain; - ImageSlider* fSliderNotch; + ScopedPointer<ImageSlider> fSliderNotch; + ScopedPointer<ImageKnob> fKnobTube, fKnobBass, fKnobMids, fKnobTreb, fKnobGain; }; // ----------------------------------------------------------------------- |