| 
							- /*
 -  * Wobble Juice Plugin
 -  * Copyright (C) 2014 Andre Sklenar <andre.sklenar@gmail.com>, www.juicelab.cz
 -  *
 -  * This program is free software; you can redistribute it and/or
 -  * modify it under the terms of the GNU General Public License as
 -  * published by the Free Software Foundation; either version 2 of
 -  * the License, or any later version.
 -  *
 -  * This program is distributed in the hope that it will be useful,
 -  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 -  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 -  * GNU General Public License for more details.
 -  *
 -  * For a full copy of the GNU General Public License see the doc/GPL.txt file.
 -  */
 - 
 - #ifndef WOBBLEJUICEPLUGIN_HPP_INCLUDED
 - #define WOBBLEJUICEPLUGIN_HPP_INCLUDED
 - 
 - #include "DistrhoPlugin.hpp"
 - #include "moogVCF.hxx"
 - 
 - START_NAMESPACE_DISTRHO
 - 
 - // -----------------------------------------------------------------------
 - 
 - class WobbleJuicePlugin : public Plugin
 - {
 - public:
 -     enum Parameters
 -     {
 -         paramDivision = 0,
 -         paramReso,
 -         paramRange,
 -         paramPhase,
 -         paramWave,
 -         paramDrive,
 -         paramCount
 -     };
 - 
 -     float getSinePhase(float x) {
 -         return ((-std::cos(x)+1)/2);
 -     }
 -     float getSawPhase(float x) {
 -         return (-((2/M_PI * std::atan(1/std::tan(x/2)))-1)/2);
 -     }
 -     float getRevSawPhase(float x) {
 -         return (((2/M_PI * std::atan(1/std::tan(x/2)))+1)/2);
 -     }
 -     float getSquarePhase(float x) {
 -         return (std::round((std::sin(x)+1)/2));
 -     }
 - 
 -     //saw, sqr, sin, revSaw
 -     float getBlendedPhase(float x, float wave)
 -     {
 -         //wave = 2;
 -         if (wave>=1 && wave<2) {
 -             /* saw vs sqr */
 -             waveBlend = wave-1;
 -             return (getSawPhase(x)*(1-waveBlend) + getSquarePhase(x)*waveBlend);
 -         } else if (wave>=2 && wave<3) {
 -             /* sqr vs sin */
 -             waveBlend = wave-2;
 -             return (getSquarePhase(x)*(1-waveBlend) + getSinePhase(x)*waveBlend);
 -         } else if (wave>=3 && wave<=4) {
 -             /* sin vs revSaw */
 -             waveBlend = wave-3;
 -             return (getSinePhase(x)*(1-waveBlend) + getRevSawPhase(x)*waveBlend);
 -         } else {
 -             return 0.0f;
 -         }
 -     }
 - 
 -     WobbleJuicePlugin();
 - 
 - protected:
 -     // -------------------------------------------------------------------
 -     // Information
 - 
 -     const char* d_getLabel() const noexcept override
 -     {
 -         return "WobbleJuice";
 -     }
 - 
 -     const char* d_getMaker() const noexcept override
 -     {
 -         return "Andre Sklenar";
 -     }
 - 
 -     const char* d_getLicense() const noexcept override
 -     {
 -         return "GPL v2+";
 -     }
 - 
 -     uint32_t d_getVersion() const noexcept override
 -     {
 -         return 0x1000;
 -     }
 - 
 -     long d_getUniqueId() const noexcept override
 -     {
 -         return d_cconst('W', 'b', 'l', 'J');
 -     }
 - 
 -     // -------------------------------------------------------------------
 -     // Init
 - 
 -     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) override;
 - 
 -     // -------------------------------------------------------------------
 -     // Process
 - 
 -     void d_activate() override;
 -     void d_run(const float** inputs, float** outputs, uint32_t frames) override;
 - 
 -     // -------------------------------------------------------------------
 - 
 - private:
 -     MoogVCF filterL, filterR;
 -     float division, reso, range, phase, wave, drive; //parameters
 -     float bar, tick, tickOffset, percentage, phaseOffset, currentPhaseL, currentPhaseR, posL, posR, cutoffL, cutoffR;
 -     double sinePos;
 -     float waveType, waveBlend;
 - 
 -     DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(WobbleJuicePlugin)
 - };
 - 
 - // -----------------------------------------------------------------------
 - 
 - END_NAMESPACE_DISTRHO
 - 
 - #endif  // WOBBLEJUICE_HPP_INCLUDED
 
 
  |