Browse Source

Add release and volume parameters

master
falkTX 6 years ago
parent
commit
67ee376ea2
2 changed files with 59 additions and 22 deletions
  1. +55
    -22
      plugins/Kars/DistrhoPluginKars.cpp
  2. +4
    -0
      plugins/Kars/DistrhoPluginKars.hpp

+ 55
- 22
plugins/Kars/DistrhoPluginKars.cpp View File

@@ -23,6 +23,8 @@ START_NAMESPACE_DISTRHO
DistrhoPluginKars::DistrhoPluginKars()
: Plugin(paramCount, 0, 0), // 0 programs, 0 states
fSustain(false),
fRelease(0.01),
fVolume(75.0f),
fSampleRate(getSampleRate()),
fBlockStart(0)
{
@@ -38,15 +40,35 @@ DistrhoPluginKars::DistrhoPluginKars()
void DistrhoPluginKars::initParameter(uint32_t index, Parameter& parameter)
{
if (index != 0)
return;
parameter.hints = kParameterIsAutomable|kParameterIsBoolean;
parameter.name = "Sustain";
parameter.symbol = "sustain";
parameter.ranges.def = 0.0f;
parameter.ranges.min = 0.0f;
parameter.ranges.max = 1.0f;
switch (index)
{
case paramSustain:
parameter.hints = kParameterIsAutomable|kParameterIsBoolean;
parameter.name = "Sustain";
parameter.symbol = "sustain";
parameter.ranges.def = 0.0f;
parameter.ranges.min = 0.0f;
parameter.ranges.max = 1.0f;
break;
case paramRelease:
parameter.hints = kParameterIsAutomable;
parameter.name = "Release";
parameter.symbol = "release";
parameter.unit = "s";
parameter.ranges.def = 0.01f;
parameter.ranges.min = 0.0f;
parameter.ranges.max = 5.0f;
break;
case paramVolume:
parameter.hints = kParameterIsAutomable;
parameter.name = "Volume";
parameter.symbol = "volume";
parameter.unit = "%";
parameter.ranges.def = 75.0f;
parameter.ranges.min = 0.0f;
parameter.ranges.max = 100.0f;
break;
}
}
// -----------------------------------------------------------------------
@@ -54,18 +76,30 @@ void DistrhoPluginKars::initParameter(uint32_t index, Parameter& parameter)
float DistrhoPluginKars::getParameterValue(uint32_t index) const
{
if (index != 0)
return 0.0f;
switch (index)
{
case paramSustain: return fSustain ? 1.0f : 0.0f;
case paramRelease: return fRelease;
case paramVolume: return fVolume;
}
return fSustain ? 1.0f : 0.0f;
return 0.0f;
}
void DistrhoPluginKars::setParameterValue(uint32_t index, float value)
{
if (index != 0)
return;
fSustain = value > 0.5f;
switch (index)
{
case paramSustain:
fSustain = value > 0.5f;
break;
case paramRelease:
fRelease = value;
break;
case paramVolume:
fVolume = value;
break;
}
}
// -----------------------------------------------------------------------
@@ -179,11 +213,10 @@ private:
void DistrhoPluginKars::run(const float**, float** outputs, uint32_t frames, const MidiEvent* midiEvents, uint32_t midiEventCount)
{
uint8_t note, velo;
std::memset(outputs[0], 0, sizeof(float)*frames);
for (AudioMidiSyncHelper amsh(outputs, frames, midiEvents, midiEventCount); amsh.nextEvent();)
{
float* const out = amsh.outputs[0];
for (uint32_t i=0; i<amsh.midiEventCount; ++i)
{
if (amsh.midiEvents[i].size > MidiEvent::kDataSize)
@@ -214,7 +247,7 @@ void DistrhoPluginKars::run(const float**, float** outputs, uint32_t frames, con
}
}
std::memset(out, 0, sizeof(float)*amsh.frames);
float* const out = amsh.outputs[0];
for (int i=kMaxNotes; --i >= 0;)
{
@@ -255,8 +288,8 @@ void DistrhoPluginKars::addSamples(float* out, int voice, uint32_t frames)
{
// reuse index and size to save some performance.
// actual values are release and dist
index = 1 + uint32_t(0.01 * fSampleRate); // release, not index
size = i + start - note.off; // dist, not size
index = 1 + uint32_t(fRelease * fSampleRate); // release, not index
size = i + start - note.off; // dist, not size
if (size > index)
{
@@ -283,7 +316,7 @@ void DistrhoPluginKars::addSamples(float* out, int voice, uint32_t frames)
note.wavetable[index] = sample/2;
}
out[i] += gain * sample;
out[i] += gain * sample * (fVolume / 100.0f);
}
}


+ 4
- 0
plugins/Kars/DistrhoPluginKars.hpp View File

@@ -32,6 +32,8 @@ public:
enum Parameters
{
paramSustain = 0,
paramRelease,
paramVolume,
paramCount
};
@@ -97,6 +99,8 @@ protected:
private:
bool fSustain;
float fRelease;
float fVolume;
double fSampleRate;
uint32_t fBlockStart;


Loading…
Cancel
Save