18#include "WobbleJuicePlugin.hpp"
24WobbleJuicePlugin::WobbleJuicePlugin()
34void WobbleJuicePlugin::initParameter(
uint32_t index, Parameter& parameter)
39 parameter.hints = kParameterIsAutomatable|kParameterIsInteger;
40 parameter.name =
"Division";
41 parameter.symbol =
"div";
43 parameter.ranges.def = 4.0f;
44 parameter.ranges.min = 1.0f;
45 parameter.ranges.max = 16.0f;
48 parameter.hints = kParameterIsAutomatable;
49 parameter.name =
"Resonance";
50 parameter.symbol =
"reso";
52 parameter.ranges.def = 0.1f;
53 parameter.ranges.min = 0.0f;
54 parameter.ranges.max = 0.2f;
57 parameter.hints = kParameterIsAutomatable;
58 parameter.name =
"Range";
59 parameter.symbol =
"rng";
60 parameter.unit =
"Hz";
61 parameter.ranges.def = 16000.0f;
62 parameter.ranges.min = 500.0f;
63 parameter.ranges.max = 16000.0f;
66 parameter.hints = kParameterIsAutomatable;
67 parameter.name =
"Phase";
68 parameter.symbol =
"phs";
69 parameter.unit =
"Deg";
70 parameter.ranges.def = 0.0f;
71 parameter.ranges.min = -1.0f;
72 parameter.ranges.max = 1.0f;
75 parameter.hints = kParameterIsAutomatable;
76 parameter.name =
"Wave";
77 parameter.symbol =
"wav";
79 parameter.ranges.def = 2.0f;
80 parameter.ranges.min = 1.0f;
81 parameter.ranges.max = 4.0f;
84 parameter.hints = kParameterIsAutomatable;
85 parameter.name =
"Drive";
86 parameter.symbol =
"drv";
88 parameter.ranges.def = 0.5f;
89 parameter.ranges.min = 0.0f;
90 parameter.ranges.max = 1.0f;
95void WobbleJuicePlugin::initProgramName(
uint32_t index,
String& programName)
100 programName =
"Default";
106float WobbleJuicePlugin::getParameterValue(
uint32_t index)
const
127void WobbleJuicePlugin::setParameterValue(
uint32_t index,
float value)
152void WobbleJuicePlugin::loadProgram(
uint32_t index)
166 bar=tick=tickOffset=percentage=phaseOffset=currentPhaseL=0.0f;
167 currentPhaseR=posL=posR=cutoffL=cutoffR=0.0f;
177void WobbleJuicePlugin::activate()
182void WobbleJuicePlugin::run(
const float** inputs,
float** outputs,
uint32_t frames)
185 const TimePosition&
time(getTimePosition());
189 tick = bar/(std::round(division));
190 phaseOffset = phase*
M_PI;
195 tickOffset =
time.frame-std::floor(
time.frame/tick)*tick;
199 percentage = tickOffset/tick;
203 sinePos = (
M_PI*2)*percentage;
205 if (sinePos>2*
M_PI) {
213 sinePos += (
M_PI)/(tick/2000);
214 if (sinePos>2*
M_PI) {
220 currentPhaseL = getBlendedPhase(sinePos+phaseOffset, wave);
221 currentPhaseR = getBlendedPhase(sinePos-phaseOffset, wave);
224 cutoffL = std::exp((std::log(range)-std::log(500))*currentPhaseL+std::log(500));
225 cutoffR = std::exp((std::log(range)-std::log(500))*currentPhaseR+std::log(500));
230 filterL.process(frames, inputs[0], outputs[0]);
231 filterR.process(frames, inputs[1], outputs[1]);
238 return new WobbleJuicePlugin();
#define END_NAMESPACE_DISTRHO
Definition DistrhoDefines.h:191
#define START_NAMESPACE_DISTRHO
Definition DistrhoDefines.h:190
Plugin * createPlugin()
Definition WobbleJuicePlugin.cpp:236
#define M_PI
Definition compat.h:149
static PuglViewHint int value
Definition pugl.h:1708
virtual ASIOError getSampleRate(ASIOSampleRate *sampleRate)=0
unsigned int uint32_t
Definition mid.cpp:100
const AbsTime * time
Definition PADnoteParameters.h:189