Supprimer commentaires vieillis
This commit is contained in:
parent
2a2202c1fd
commit
47105d3aa2
|
@ -2,91 +2,27 @@
|
||||||
|
|
||||||
START_NAMESPACE_DISTRHO
|
START_NAMESPACE_DISTRHO
|
||||||
|
|
||||||
class InfoExamplePlugin : public Plugin
|
class TabPlugin : public Plugin
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
InfoExamplePlugin()
|
TabPlugin()
|
||||||
: Plugin(kParameterCount, 0, 0)
|
: Plugin(kParameterCount, 0, 0)
|
||||||
{
|
{
|
||||||
// clear all parameters
|
// clear all parameters
|
||||||
std::memset(fParameters, 0, sizeof(float) * kParameterCount);
|
std::memset(fParameters, 0, sizeof(float) * kParameterCount);
|
||||||
|
|
||||||
/* we can know some things right at the start
|
|
||||||
fParameters[kParameterBufferSize] = getBufferSize();
|
|
||||||
fParameters[kParameterCanRequestParameterValueChanges] = canRequestParameterValueChanges();
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/* --------------------------------------------------------------------------------------------------------
|
const char* getLabel() const override { return "yaw-tab"; }
|
||||||
* Information */
|
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'); }
|
||||||
|
|
||||||
/**
|
|
||||||
Get the plugin label.
|
|
||||||
This label is a short restricted name consisting of only _, a-z, A-Z and 0-9 characters.
|
|
||||||
*/
|
|
||||||
const char* getLabel() const override
|
|
||||||
{
|
|
||||||
return "yaw-tab";
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Get an extensive comment/description about the plugin.
|
|
||||||
*/
|
|
||||||
const char* getDescription() const override
|
|
||||||
{
|
|
||||||
return "Drawing tablet synth UI";
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Get the plugin author/maker.
|
|
||||||
*/
|
|
||||||
const char* getMaker() const override
|
|
||||||
{
|
|
||||||
return "yaw-audio";
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Get the plugin homepage.
|
|
||||||
*/
|
|
||||||
const char* getHomePage() const override
|
|
||||||
{
|
|
||||||
return "https://yaw.man/plugins/yaw-tab";
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Get the plugin license name (a single line of text).
|
|
||||||
For commercial plugins this should return some short copyright information.
|
|
||||||
*/
|
|
||||||
const char* getLicense() const override
|
|
||||||
{
|
|
||||||
return "ISC";
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Get the plugin version, in hexadecimal.
|
|
||||||
*/
|
|
||||||
uint32_t getVersion() const override
|
|
||||||
{
|
|
||||||
return d_version(1, 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Get the plugin unique Id.
|
|
||||||
This value is used by LADSPA, DSSI and VST plugin formats.
|
|
||||||
*/
|
|
||||||
int64_t getUniqueId() const override
|
|
||||||
{
|
|
||||||
return d_cconst('y', 'w', 't', 'b');
|
|
||||||
}
|
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------------------
|
|
||||||
* Init */
|
|
||||||
|
|
||||||
/**
|
|
||||||
Initialize the parameter @a index.
|
|
||||||
This function will be called once, shortly after the plugin is created.
|
|
||||||
*/
|
|
||||||
void initParameter(uint32_t index, Parameter& parameter) override
|
void initParameter(uint32_t index, Parameter& parameter) override
|
||||||
{
|
{
|
||||||
parameter.hints = kParameterIsAutomable | kParameterIsOutput;
|
parameter.hints = kParameterIsAutomable | kParameterIsOutput;
|
||||||
|
@ -95,65 +31,7 @@ protected:
|
||||||
parameter.ranges.max = 16777216.0f;
|
parameter.ranges.max = 16777216.0f;
|
||||||
|
|
||||||
switch (index)
|
switch (index)
|
||||||
{/*
|
{
|
||||||
case kParameterBufferSize:
|
|
||||||
parameter.name = "BufferSize";
|
|
||||||
parameter.symbol = "buffer_size";
|
|
||||||
break;
|
|
||||||
case kParameterCanRequestParameterValueChanges:
|
|
||||||
parameter.name = "Parameter Changes";
|
|
||||||
parameter.symbol = "parameter_changes";
|
|
||||||
parameter.hints |= kParameterIsBoolean;
|
|
||||||
parameter.ranges.max = 1.0f;
|
|
||||||
break;
|
|
||||||
case kParameterTimePlaying:
|
|
||||||
parameter.name = "TimePlaying";
|
|
||||||
parameter.symbol = "time_playing";
|
|
||||||
parameter.hints |= kParameterIsBoolean;
|
|
||||||
parameter.ranges.max = 1.0f;
|
|
||||||
break;
|
|
||||||
case kParameterTimeFrame:
|
|
||||||
parameter.name = "TimeFrame";
|
|
||||||
parameter.symbol = "time_frame";
|
|
||||||
break;
|
|
||||||
case kParameterTimeValidBBT:
|
|
||||||
parameter.name = "TimeValidBBT";
|
|
||||||
parameter.symbol = "time_validbbt";
|
|
||||||
parameter.hints |= kParameterIsBoolean;
|
|
||||||
parameter.ranges.max = 1.0f;
|
|
||||||
break;
|
|
||||||
case kParameterTimeBar:
|
|
||||||
parameter.name = "TimeBar";
|
|
||||||
parameter.symbol = "time_bar";
|
|
||||||
break;
|
|
||||||
case kParameterTimeBeat:
|
|
||||||
parameter.name = "TimeBeat";
|
|
||||||
parameter.symbol = "time_beat";
|
|
||||||
break;
|
|
||||||
case kParameterTimeTick:
|
|
||||||
parameter.name = "TimeTick";
|
|
||||||
parameter.symbol = "time_tick";
|
|
||||||
break;
|
|
||||||
case kParameterTimeBarStartTick:
|
|
||||||
parameter.name = "TimeBarStartTick";
|
|
||||||
parameter.symbol = "time_barstarttick";
|
|
||||||
break;
|
|
||||||
case kParameterTimeBeatsPerBar:
|
|
||||||
parameter.name = "TimeBeatsPerBar";
|
|
||||||
parameter.symbol = "time_beatsperbar";
|
|
||||||
break;
|
|
||||||
case kParameterTimeBeatType:
|
|
||||||
parameter.name = "TimeBeatType";
|
|
||||||
parameter.symbol = "time_beattype";
|
|
||||||
break;
|
|
||||||
case kParameterTimeTicksPerBeat:
|
|
||||||
parameter.name = "TimeTicksPerBeat";
|
|
||||||
parameter.symbol = "time_ticksperbeat";
|
|
||||||
break;
|
|
||||||
case kParameterTimeBeatsPerMinute:
|
|
||||||
parameter.name = "TimeBeatsPerMinute";
|
|
||||||
parameter.symbol = "time_beatsperminute";
|
|
||||||
break;*/
|
|
||||||
case kParameterTabletX:
|
case kParameterTabletX:
|
||||||
parameter.name = "x";
|
parameter.name = "x";
|
||||||
parameter.symbol = "x";
|
parameter.symbol = "x";
|
||||||
|
@ -181,37 +59,17 @@ protected:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------------------
|
|
||||||
* Internal data */
|
|
||||||
|
|
||||||
/**
|
|
||||||
Get the current value of a parameter.
|
|
||||||
The host may call this function from any context, including realtime processing.
|
|
||||||
*/
|
|
||||||
float getParameterValue(uint32_t index) const override
|
float getParameterValue(uint32_t index) const override
|
||||||
{
|
{
|
||||||
return fParameters[index];
|
return fParameters[index];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
Change a parameter value.
|
|
||||||
The host may call this function from any context, including realtime processing.
|
|
||||||
When a parameter is marked as automable, you must ensure no non-realtime operations are performed.
|
|
||||||
@note This function will only be called for parameter inputs.
|
|
||||||
*/
|
|
||||||
void setParameterValue(uint32_t, float) override
|
void setParameterValue(uint32_t, float) override
|
||||||
{
|
{
|
||||||
// this is only called for input parameters, which we have none of.
|
// this is only called for input parameters, which we have none of.
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------------------
|
|
||||||
* Audio/MIDI Processing */
|
|
||||||
|
|
||||||
/**
|
|
||||||
Run/process function for plugins without MIDI input.
|
|
||||||
@note Some parameters might be null if there are no audio inputs or outputs.
|
|
||||||
*/
|
|
||||||
void run(const float** inputs, float** outputs, uint32_t frames) override
|
void run(const float** inputs, float** outputs, uint32_t frames) override
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
|
@ -227,76 +85,18 @@ protected:
|
||||||
|
|
||||||
// get time position
|
// get time position
|
||||||
const TimePosition& timePos(getTimePosition());
|
const TimePosition& timePos(getTimePosition());
|
||||||
|
|
||||||
// set basic values
|
|
||||||
/*
|
|
||||||
fParameters[kParameterTimePlaying] = timePos.playing ? 1.0f : 0.0f;
|
|
||||||
fParameters[kParameterTimeFrame] = timePos.frame;
|
|
||||||
fParameters[kParameterTimeValidBBT] = timePos.bbt.valid ? 1.0f : 0.0f;
|
|
||||||
|
|
||||||
// set bbt
|
|
||||||
if (timePos.bbt.valid)
|
|
||||||
{
|
|
||||||
fParameters[kParameterTimeBar] = timePos.bbt.bar;
|
|
||||||
fParameters[kParameterTimeBeat] = timePos.bbt.beat;
|
|
||||||
fParameters[kParameterTimeTick] = timePos.bbt.tick;
|
|
||||||
fParameters[kParameterTimeBarStartTick] = timePos.bbt.barStartTick;
|
|
||||||
fParameters[kParameterTimeBeatsPerBar] = timePos.bbt.beatsPerBar;
|
|
||||||
fParameters[kParameterTimeBeatType] = timePos.bbt.beatType;
|
|
||||||
fParameters[kParameterTimeTicksPerBeat] = timePos.bbt.ticksPerBeat;
|
|
||||||
fParameters[kParameterTimeBeatsPerMinute] = timePos.bbt.beatsPerMinute;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
fParameters[kParameterTimeBar] = 0.0f;
|
|
||||||
fParameters[kParameterTimeBeat] = 0.0f;
|
|
||||||
fParameters[kParameterTimeTick] = 0.0f;
|
|
||||||
fParameters[kParameterTimeBarStartTick] = 0.0f;
|
|
||||||
fParameters[kParameterTimeBeatsPerBar] = 0.0f;
|
|
||||||
fParameters[kParameterTimeBeatType] = 0.0f;
|
|
||||||
fParameters[kParameterTimeTicksPerBeat] = 0.0f;
|
|
||||||
fParameters[kParameterTimeBeatsPerMinute] = 0.0f;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
fParameters[kParameterTabletPressure] = timePos.bbt.tick;
|
fParameters[kParameterTabletPressure] = timePos.bbt.tick;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------------------
|
|
||||||
* Callbacks (optional) */
|
|
||||||
|
|
||||||
/**
|
|
||||||
Optional callback to inform the plugin about a buffer size change.
|
|
||||||
This function will only be called when the plugin is deactivated.
|
|
||||||
@note This value is only a hint!
|
|
||||||
Hosts might call run() with a higher or lower number of frames.
|
|
||||||
*/
|
|
||||||
void bufferSizeChanged(uint32_t newBufferSize) override
|
|
||||||
{
|
|
||||||
//fParameters[kParameterBufferSize] = newBufferSize;
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Parameters
|
|
||||||
float fParameters[kParameterCount];
|
float fParameters[kParameterCount];
|
||||||
|
|
||||||
/**
|
DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(TabPlugin)
|
||||||
Set our plugin class as non-copyable and add a leak detector just in case.
|
|
||||||
*/
|
|
||||||
DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(InfoExamplePlugin)
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------------------------------------------
|
|
||||||
* Plugin entry point, called by DPF to create a new plugin instance. */
|
|
||||||
|
|
||||||
Plugin* createPlugin()
|
Plugin* createPlugin()
|
||||||
{
|
{
|
||||||
return new InfoExamplePlugin();
|
return new TabPlugin();
|
||||||
}
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
END_NAMESPACE_DISTRHO
|
END_NAMESPACE_DISTRHO
|
||||||
|
|
|
@ -3,13 +3,13 @@
|
||||||
|
|
||||||
START_NAMESPACE_DISTRHO
|
START_NAMESPACE_DISTRHO
|
||||||
|
|
||||||
class InfoExampleUI : public UI
|
class TabUI : public UI
|
||||||
{
|
{
|
||||||
static const uint kInitialWidth = 405;
|
static const uint kInitialWidth = 405;
|
||||||
static const uint kInitialHeight = 256;
|
static const uint kInitialHeight = 256;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
InfoExampleUI()
|
TabUI()
|
||||||
: UI(kInitialWidth, kInitialHeight),
|
: UI(kInitialWidth, kInitialHeight),
|
||||||
fSampleRate(getSampleRate()),
|
fSampleRate(getSampleRate()),
|
||||||
fResizable(isResizable()),
|
fResizable(isResizable()),
|
||||||
|
@ -30,19 +30,9 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/* --------------------------------------------------------------------------------------------------------
|
|
||||||
* DSP/Plugin Callbacks */
|
|
||||||
|
|
||||||
/**
|
|
||||||
A parameter has changed on the plugin side.
|
|
||||||
This is called by the host to inform the UI about parameter changes.
|
|
||||||
*/
|
|
||||||
void parameterChanged(uint32_t index, float value) override
|
void parameterChanged(uint32_t index, float value) override
|
||||||
{
|
{
|
||||||
// some hosts send parameter change events for output parameters even when nothing changed
|
|
||||||
// we catch that here in order to prevent excessive repaints
|
|
||||||
//if (d_isEqual(fParameters[index], value))
|
|
||||||
// return;
|
|
||||||
|
|
||||||
fParameters[index] = value;
|
fParameters[index] = value;
|
||||||
|
|
||||||
|
@ -57,24 +47,14 @@ protected:
|
||||||
repaint();
|
repaint();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------------------
|
|
||||||
* DSP/Plugin Callbacks (optional) */
|
|
||||||
|
|
||||||
/**
|
|
||||||
Optional callback to inform the UI about a sample rate change on the plugin side.
|
|
||||||
*/
|
|
||||||
void sampleRateChanged(double newSampleRate) override
|
void sampleRateChanged(double newSampleRate) override
|
||||||
{
|
{
|
||||||
fSampleRate = newSampleRate;
|
fSampleRate = newSampleRate;
|
||||||
repaint();
|
repaint();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------------------
|
|
||||||
* Widget Callbacks */
|
|
||||||
|
|
||||||
/**
|
|
||||||
The NanoVG drawing function.
|
|
||||||
*/
|
|
||||||
void onNanoDisplay() override
|
void onNanoDisplay() override
|
||||||
{
|
{
|
||||||
const float lineHeight = 20 * fScale;
|
const float lineHeight = 20 * fScale;
|
||||||
|
@ -84,95 +64,6 @@ protected:
|
||||||
|
|
||||||
float x = 0.0f * fScale;
|
float x = 0.0f * fScale;
|
||||||
float y = 15.0f * fScale;
|
float y = 15.0f * fScale;
|
||||||
/*
|
|
||||||
// buffer size
|
|
||||||
drawLeft(x, y, "Buffer Size:");
|
|
||||||
drawRight(x, y, getTextBufInt(fParameters[kParameterBufferSize]));
|
|
||||||
y += lineHeight;
|
|
||||||
|
|
||||||
// sample rate
|
|
||||||
drawLeft(x, y, "Sample Rate:");
|
|
||||||
drawRight(x, y, getTextBufFloat(fSampleRate));
|
|
||||||
y += lineHeight;
|
|
||||||
|
|
||||||
// separator
|
|
||||||
y += lineHeight;
|
|
||||||
|
|
||||||
// time stuff
|
|
||||||
drawLeft(x, y, "Playing:");
|
|
||||||
drawRight(x, y, (fParameters[kParameterTimePlaying] > 0.5f) ? "Yes" : "No");
|
|
||||||
y += lineHeight;
|
|
||||||
|
|
||||||
drawLeft(x, y, "Frame:");
|
|
||||||
drawRight(x, y, getTextBufInt(fParameters[kParameterTimeFrame]));
|
|
||||||
y += lineHeight;
|
|
||||||
|
|
||||||
drawLeft(x, y, "Time:");
|
|
||||||
drawRight(x, y, getTextBufTime(fParameters[kParameterTimeFrame]));
|
|
||||||
y += lineHeight;
|
|
||||||
|
|
||||||
// separator
|
|
||||||
y += lineHeight;
|
|
||||||
|
|
||||||
// param changes
|
|
||||||
drawLeft(x, y, "Param Changes:", 20);
|
|
||||||
drawRight(x, y, (fParameters[kParameterCanRequestParameterValueChanges] > 0.5f) ? "Yes" : "No", 40);
|
|
||||||
y += lineHeight;
|
|
||||||
|
|
||||||
// resizable
|
|
||||||
drawLeft(x, y, "Host resizable:", 20);
|
|
||||||
drawRight(x, y, fResizable ? "Yes" : "No", 40);
|
|
||||||
y += lineHeight;
|
|
||||||
|
|
||||||
// host scale factor
|
|
||||||
drawLeft(x, y, "Host scale factor:", 20);
|
|
||||||
drawRight(x, y, getTextBufFloat(fScaleFactor), 40);
|
|
||||||
y += lineHeight;
|
|
||||||
|
|
||||||
// BBT
|
|
||||||
x = 200.0f * fScale;
|
|
||||||
y = 15.0f * fScale;
|
|
||||||
|
|
||||||
const bool validBBT(fParameters[kParameterTimeValidBBT] > 0.5f);
|
|
||||||
drawLeft(x, y, "BBT Valid:");
|
|
||||||
drawRight(x, y, validBBT ? "Yes" : "No");
|
|
||||||
y += lineHeight;
|
|
||||||
|
|
||||||
if (!validBBT)
|
|
||||||
return;
|
|
||||||
|
|
||||||
drawLeft(x, y, "Bar:");
|
|
||||||
drawRight(x, y, getTextBufInt(fParameters[kParameterTimeBar]));
|
|
||||||
y += lineHeight;
|
|
||||||
|
|
||||||
drawLeft(x, y, "Beat:");
|
|
||||||
drawRight(x, y, getTextBufInt(fParameters[kParameterTimeBeat]));
|
|
||||||
y += lineHeight;
|
|
||||||
|
|
||||||
drawLeft(x, y, "Tick:");
|
|
||||||
drawRight(x, y, getTextBufFloatExtra(fParameters[kParameterTimeTick]));
|
|
||||||
y += lineHeight;
|
|
||||||
|
|
||||||
drawLeft(x, y, "Bar Start Tick:");
|
|
||||||
drawRight(x, y, getTextBufFloat(fParameters[kParameterTimeBarStartTick]));
|
|
||||||
y += lineHeight;
|
|
||||||
|
|
||||||
drawLeft(x, y, "Beats Per Bar:");
|
|
||||||
drawRight(x, y, getTextBufFloat(fParameters[kParameterTimeBeatsPerBar]));
|
|
||||||
y += lineHeight;
|
|
||||||
|
|
||||||
drawLeft(x, y, "Beat Type:");
|
|
||||||
drawRight(x, y, getTextBufFloat(fParameters[kParameterTimeBeatType]));
|
|
||||||
y += lineHeight;
|
|
||||||
|
|
||||||
drawLeft(x, y, "Ticks Per Beat:");
|
|
||||||
drawRight(x, y, getTextBufFloat(fParameters[kParameterTimeTicksPerBeat]));
|
|
||||||
y += lineHeight;
|
|
||||||
|
|
||||||
drawLeft(x, y, "BPM:");
|
|
||||||
drawRight(x, y, getTextBufFloat(fParameters[kParameterTimeBeatsPerMinute]));
|
|
||||||
y += lineHeight;
|
|
||||||
*/
|
|
||||||
drawLeft(x, y, "x:");
|
drawLeft(x, y, "x:");
|
||||||
drawRight(x, y, getTextBufFloat(fParameters[kParameterTabletX]));
|
drawRight(x, y, getTextBufFloat(fParameters[kParameterTabletX]));
|
||||||
y += lineHeight;
|
y += lineHeight;
|
||||||
|
@ -275,17 +166,15 @@ private:
|
||||||
/**
|
/**
|
||||||
Set our UI class as non-copyable and add a leak detector just in case.
|
Set our UI class as non-copyable and add a leak detector just in case.
|
||||||
*/
|
*/
|
||||||
DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(InfoExampleUI)
|
DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(TabUI)
|
||||||
};
|
};
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------------------------------------------
|
|
||||||
* UI entry point, called by DPF to create a new UI instance. */
|
|
||||||
|
|
||||||
UI* createUI()
|
UI* createUI()
|
||||||
{
|
{
|
||||||
return new InfoExampleUI();
|
return new TabUI();
|
||||||
}
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
END_NAMESPACE_DISTRHO
|
END_NAMESPACE_DISTRHO
|
||||||
|
|
Loading…
Reference in New Issue