/* * Vector Juice Plugin * Copyright (C) 2014 Andre Sklenar , 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. */ #include "VectorJuicePlugin.hpp" START_NAMESPACE_DISTRHO // ----------------------------------------------------------------------- VectorJuicePlugin::VectorJuicePlugin() : Plugin(paramCount, 1, 0) // 1 program, 0 states { // set default values loadProgram(0); } // ----------------------------------------------------------------------- // Init void VectorJuicePlugin::initParameter(uint32_t index, Parameter& parameter) { switch (index) { case paramX: parameter.hints = kParameterIsAutomable; parameter.name = "X"; parameter.symbol = "x"; parameter.ranges.def = 0.5f; parameter.ranges.min = 0.0f; parameter.ranges.max = 1.0f; break; case paramY: parameter.hints = kParameterIsAutomable; parameter.name = "Y"; parameter.symbol = "y"; parameter.ranges.def = 0.5f; parameter.ranges.min = 0.0f; parameter.ranges.max = 1.0f; break; case paramOrbitSizeX: parameter.hints = kParameterIsAutomable; parameter.name = "Orbit Size X"; parameter.symbol = "sizex"; parameter.ranges.def = 0.5f; parameter.ranges.min = 0.0f; parameter.ranges.max = 1.0f; break; case paramOrbitSizeY: parameter.hints = kParameterIsAutomable; parameter.name = "Orbit Size Y"; parameter.symbol = "sizey"; parameter.ranges.def = 0.5f; parameter.ranges.min = 0.0f; parameter.ranges.max = 1.0f; break; case paramOrbitSpeedX: parameter.hints = kParameterIsAutomable|kParameterIsInteger; parameter.name = "Orbit Speed X"; parameter.symbol = "speedx"; parameter.ranges.def = 4.0f; parameter.ranges.min = 1.0f; parameter.ranges.max = 128.0f; break; case paramOrbitSpeedY: parameter.hints = kParameterIsAutomable|kParameterIsInteger; parameter.name = "Orbit Speed Y"; parameter.symbol = "speedy"; parameter.ranges.def = 4.0f; parameter.ranges.min = 1.0f; parameter.ranges.max = 128.0f; break; case paramSubOrbitSize: parameter.hints = kParameterIsAutomable; parameter.name = "SubOrbit Size"; parameter.symbol = "subsize"; parameter.ranges.def = 0.5f; parameter.ranges.min = 0.0f; parameter.ranges.max = 1.0f; break; case paramSubOrbitSpeed: parameter.hints = kParameterIsAutomable; parameter.name = "SubOrbit Speed"; parameter.symbol = "subspeed"; parameter.ranges.def = 32.0f; parameter.ranges.min = 1.0f; parameter.ranges.max = 128.0f; break; case paramSubOrbitSmooth: parameter.hints = kParameterIsAutomable; parameter.name = "SubOrbit Wave"; parameter.symbol = "subwave"; parameter.ranges.def = 0.5f; parameter.ranges.min = 0.0f; parameter.ranges.max = 1.0f; break; case paramOrbitWaveX: parameter.hints = kParameterIsAutomable|kParameterIsInteger; parameter.name = "Orbit Wave X"; parameter.symbol = "wavex"; parameter.ranges.def = 3.0f; parameter.ranges.min = 1.0f; parameter.ranges.max = 4.0f; break; case paramOrbitWaveY: parameter.hints = kParameterIsAutomable|kParameterIsInteger; parameter.name = "Orbit Wave Y"; parameter.symbol = "wavey"; parameter.ranges.def = 3.0f; parameter.ranges.min = 1.0f; parameter.ranges.max = 4.0f; break; case paramOrbitPhaseX: parameter.hints = kParameterIsAutomable|kParameterIsInteger; parameter.name = "Orbit Phase X"; parameter.symbol = "phasex"; parameter.ranges.def = 1.0f; parameter.ranges.min = 1.0f; parameter.ranges.max = 4.0f; break; case paramOrbitPhaseY: parameter.hints = kParameterIsAutomable|kParameterIsInteger; parameter.name = "Orbit Phase Y"; parameter.symbol = "phasey"; parameter.ranges.def = 1.0f; parameter.ranges.min = 1.0f; parameter.ranges.max = 4.0f; break; case paramOrbitOutX: parameter.hints = kParameterIsOutput; parameter.name = "Orbit X"; parameter.symbol = "orx"; parameter.ranges.def = 0.5f; parameter.ranges.min = 0.0f; parameter.ranges.max = 1.0f; break; case paramOrbitOutY: parameter.hints = kParameterIsOutput; parameter.name = "Orbit Y"; parameter.symbol = "ory"; parameter.ranges.def = 0.5f; parameter.ranges.min = 0.0f; parameter.ranges.max = 1.0f; break; case paramSubOrbitOutX: parameter.hints = kParameterIsOutput; parameter.name = "SubOrbit X"; parameter.symbol = "sorx"; parameter.ranges.def = 0.5f; parameter.ranges.min = 0.0f; parameter.ranges.max = 1.0f; break; case paramSubOrbitOutY: parameter.hints = kParameterIsOutput; parameter.name = "SubOrbit Y"; parameter.symbol = "sory"; parameter.ranges.def = 0.5f; parameter.ranges.min = 0.0f; parameter.ranges.max = 1.0f; break; } } void VectorJuicePlugin::initProgramName(uint32_t index, String& programName) { if (index != 0) return; programName = "Default"; } // ----------------------------------------------------------------------- // Internal data float VectorJuicePlugin::getParameterValue(uint32_t index) const { switch (index) { case paramX: return x; case paramY: return y; case paramOrbitSizeX: return orbitSizeX; case paramOrbitSizeY: return orbitSizeY; case paramOrbitSpeedX: return orbitSpeedX; case paramOrbitSpeedY: return orbitSpeedY; case paramSubOrbitSize: return subOrbitSize; case paramSubOrbitSpeed: return subOrbitSpeed; case paramSubOrbitSmooth: return subOrbitSmooth; case paramOrbitWaveX: return orbitWaveX; case paramOrbitWaveY: return orbitWaveY; case paramOrbitPhaseX: return orbitPhaseY; case paramOrbitPhaseY: return orbitPhaseY; case paramOrbitOutX: return orbitX; case paramOrbitOutY: return orbitY; case paramSubOrbitOutX: return subOrbitX; case paramSubOrbitOutY: return subOrbitY; default: return 0.0f; } } void VectorJuicePlugin::setParameterValue(uint32_t index, float value) { bool resetPhase = false; switch (index) { case paramX: x = value; break; case paramY: y = value; break; case paramOrbitSizeX: orbitSizeX = value; break; case paramOrbitSizeY: orbitSizeY = value; break; case paramOrbitSpeedX: orbitSpeedX = value; resetPhase = true; break; case paramOrbitSpeedY: orbitSpeedY = value; resetPhase = true; break; case paramSubOrbitSize: subOrbitSize = value; break; case paramSubOrbitSpeed: subOrbitSpeed = value; resetPhase = true; break; case paramSubOrbitSmooth: subOrbitSmooth = value; break; case paramOrbitWaveX: orbitWaveX = value; break; case paramOrbitWaveY: orbitWaveY = value; break; case paramOrbitPhaseX: orbitPhaseX = value; resetPhase = true; break; case paramOrbitPhaseY: orbitPhaseY = value; resetPhase = true; break; } if (resetPhase) { sinePosX = 0; sinePosY = 0; sinePos = 0; } } void VectorJuicePlugin::loadProgram(uint32_t index) { if (index != 0) return; /* Default parameter values */ x = 0.5f; y = 0.5f; orbitSizeX = 0.5f; orbitSizeY = 0.5f; orbitSpeedX = 4.0f; orbitSpeedY = 4.0f; subOrbitSize = 0.5f; subOrbitSpeed = 32.0f; subOrbitSmooth = 0.5f; orbitWaveX = 3.0f; orbitWaveY = 3.0f; orbitPhaseX = 1.0f; orbitPhaseY = 1.0f; /* reset filter values */ activate(); } // ----------------------------------------------------------------------- // Process void VectorJuicePlugin::activate() { /* Default variable values */ orbitX=orbitY=orbitTX=orbitTY=0.5; subOrbitX=subOrbitY=subOrbitTX=subOrbitTY=0; interpolationDivider=200; bar=tickX=tickY=percentageX=percentageY=tickOffsetX=0; tickOffsetY=sinePosX=sinePosY=tick=percentage=tickOffset=sinePos=0; waveBlend=0; //parameter smoothing for (int i=0; i<2; i++) { sA[i] = 0.99f; sB[i] = 1.f - sA[i]; sZ[i] = 0; } } void VectorJuicePlugin::run(const float** inputs, float** outputs, uint32_t frames) { float out1, out2, tX, tY; for (uint32_t i=0; i 1 //<0 = 0 animate(); tX = subOrbitX; tY = subOrbitY; out1 = inputs[0][i]*tN(1-std::sqrt((tX*tX)+(tY*tY))); out2 = inputs[1][i]*tN(1-std::sqrt((tX*tX)+(tY*tY))); out1 += inputs[2][i]*tN(1-std::sqrt(((1-tX)*(1-tX))+(tY*tY))); out2 += inputs[3][i]*tN(1-std::sqrt(((1-tX)*(1-tX))+(tY*tY))); out1 += inputs[4][i]*tN(1-std::sqrt(((1-tX)*(1-tX))+((1-tY)*(1-tY)))); out2 += inputs[5][i]*tN(1-std::sqrt(((1-tX)*(1-tX))+((1-tY)*(1-tY)))); out1 += inputs[6][i]*tN(1-std::sqrt((tX*tX)+((1-tY)*(1-tY)))); out2 += inputs[7][i]*tN(1-std::sqrt((tX*tX)+((1-tY)*(1-tY)))); outputs[0][i] = out1; outputs[1][i] = out2; } } // ----------------------------------------------------------------------- Plugin* createPlugin() { return new VectorJuicePlugin(); } // ----------------------------------------------------------------------- END_NAMESPACE_DISTRHO