136 lines
2.9 KiB
C++
136 lines
2.9 KiB
C++
#include "DistrhoPlugin.hpp"
|
|
|
|
START_NAMESPACE_DISTRHO
|
|
|
|
class TabPlugin : public Plugin
|
|
{
|
|
public:
|
|
TabPlugin()
|
|
: Plugin(kParameterCount, 0, 0),
|
|
sampleRate(getSampleRate())
|
|
{
|
|
// clear all parameters
|
|
std::memset(fParameters, 0, sizeof(float) * kParameterCount);
|
|
|
|
}
|
|
|
|
protected:
|
|
const char* getLabel() const override { return "yaw-tab"; }
|
|
const char* getDescription() const override { return "Drawing tablet synth UI"; }
|
|
const char* getMaker() const override { return "yaw-audio"; }
|
|
const char* getHomePage() const override { return "https://yaw.man/plugins/yaw-tab"; }
|
|
const char* getLicense() const override { return "ISC"; }
|
|
uint32_t getVersion() const override { return d_version(1, 0, 0); }
|
|
int64_t getUniqueId() const override { return d_cconst('y', 'w', 't', 'b'); }
|
|
|
|
|
|
void initParameter(uint32_t index, Parameter& parameter) override
|
|
{
|
|
parameter.hints = kParameterIsAutomable;
|
|
parameter.ranges.def = 0.0f;
|
|
parameter.ranges.min = 0.0f;
|
|
parameter.ranges.max = 1.0f;
|
|
|
|
switch (index)
|
|
{
|
|
case ktpax:
|
|
parameter.name = "x";
|
|
parameter.symbol = "x";
|
|
break;
|
|
case ktpay:
|
|
parameter.name = "y";
|
|
parameter.symbol = "y";
|
|
break;
|
|
case ktpaz:
|
|
parameter.name = "z";
|
|
parameter.symbol = "z";
|
|
break;
|
|
case ktpap:
|
|
parameter.name = "p";
|
|
parameter.symbol = "p";
|
|
break;
|
|
case kParameterButtonA:
|
|
parameter.name = "Button A";
|
|
parameter.symbol = "A";
|
|
parameter.hints |= kParameterIsBoolean;
|
|
break;
|
|
case kParameterButtonB:
|
|
parameter.name = "Button B";
|
|
parameter.symbol = "B";
|
|
parameter.hints |= kParameterIsBoolean;
|
|
break;
|
|
case kParameterTime:
|
|
parameter.name = "t";
|
|
parameter.symbol = "t";
|
|
parameter.hints = kParameterIsOutput;
|
|
break;
|
|
}
|
|
}
|
|
|
|
void sampleRateChanged(double newRate) override
|
|
{
|
|
sampleRate = newRate;
|
|
}
|
|
|
|
float getParameterValue(uint32_t index) const override
|
|
{
|
|
return fParameters[index];
|
|
}
|
|
|
|
void setParameterValue(uint32_t idx, float val) override
|
|
{
|
|
fParameters[idx] = val;
|
|
switch (idx) {
|
|
case ktpax:
|
|
period = 0.02f * val * static_cast<float>(sampleRate);
|
|
break;
|
|
case ktpay:
|
|
break;
|
|
case ktpaz:
|
|
break;
|
|
case ktpap:
|
|
volume = val;
|
|
break;
|
|
case kParameterButtonA:
|
|
break;
|
|
case kParameterButtonB:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void run(const float** inputs, float** outputs, uint32_t frames) override
|
|
{
|
|
|
|
for (uint32_t i = 0; i < frames; ++i) {
|
|
counter++;
|
|
if (counter > period) {
|
|
outputs[0][i] = outputs[1][i] = volume;
|
|
counter = 0;
|
|
}
|
|
else {
|
|
outputs[0][i] = outputs[1][i] = 0.0f;
|
|
}
|
|
}
|
|
|
|
parity = !parity;
|
|
fParameters[kParameterTime] += parity ? 1 : -1;
|
|
}
|
|
|
|
private:
|
|
float fParameters[kParameterCount];
|
|
float period = 0.f;
|
|
float counter = 0.f;
|
|
float volume = 0.f;
|
|
double sampleRate;
|
|
bool parity = false;
|
|
|
|
DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(TabPlugin)
|
|
};
|
|
|
|
Plugin* createPlugin()
|
|
{
|
|
return new TabPlugin();
|
|
}
|
|
|
|
END_NAMESPACE_DISTRHO
|