mirror of
https://codeberg.org/armin/wavetable.git
synced 2026-09-01 05:50:46 +02:00
Finish UI
This commit is contained in:
parent
16a38033df
commit
7311a258c9
13 changed files with 164 additions and 66 deletions
|
|
@ -19,7 +19,6 @@ Editor::Editor (WavetableAudioProcessor& proc_)
|
|||
addAndMakeVisible (distort);
|
||||
addAndMakeVisible (delay);
|
||||
addAndMakeVisible (reverb);
|
||||
addAndMakeVisible (scope);
|
||||
|
||||
addAndMakeVisible (effects);
|
||||
|
||||
|
|
|
|||
|
|
@ -35,7 +35,6 @@ private:
|
|||
DistortBox distort { proc };
|
||||
DelayBox delay { proc };
|
||||
ReverbBox reverb { proc };
|
||||
ScopeArea scope { proc };
|
||||
|
||||
gin::BoxArea lfoBox;
|
||||
gin::BoxArea effects;
|
||||
|
|
|
|||
|
|
@ -33,6 +33,8 @@ public:
|
|||
addControl (new gin::Select (osc.voices), 0, 1);
|
||||
addControl (detune = new gin::Knob (osc.detune), 1, 1);
|
||||
addControl (spread = new gin::Knob (osc.spread), 2, 1);
|
||||
addControl (new gin::Knob (osc.formant, true), 3, 1);
|
||||
addControl (new gin::Knob (osc.bend, true), 4, 1);
|
||||
|
||||
watchParam (osc.voices);
|
||||
|
||||
|
|
@ -95,6 +97,7 @@ public:
|
|||
}
|
||||
|
||||
juce::PopupMenu m;
|
||||
m.setLookAndFeel (&getLookAndFeel());
|
||||
for (auto itr : menus)
|
||||
m.addSubMenu (itr.first, itr.second);
|
||||
|
||||
|
|
@ -195,10 +198,11 @@ public:
|
|||
adsr->setParams (preset.attack, preset.decay, preset.sustain, preset.release);
|
||||
addControl (adsr, 0, 0, 4, 1);
|
||||
|
||||
addControl (a = new gin::Knob (preset.attack), 0, 1);
|
||||
addControl (d = new gin::Knob (preset.decay), 1, 1);
|
||||
addControl (s = new gin::Knob (preset.sustain), 2, 1);
|
||||
addControl (r = new gin::Knob (preset.release), 3, 1);
|
||||
addControl (new gin::Knob (preset.attack), 0, 1);
|
||||
addControl (new gin::Knob (preset.decay), 1, 1);
|
||||
addControl (new gin::Knob (preset.sustain), 2, 1);
|
||||
addControl (new gin::Knob (preset.release), 3, 1);
|
||||
addControl (new gin::Knob (preset.velocityTracking), 4, 1);
|
||||
}
|
||||
|
||||
WavetableAudioProcessor& proc;
|
||||
|
|
@ -385,7 +389,7 @@ public:
|
|||
addModSource (new gin::ModulationSourceButton (proc.modMatrix, proc.modSrcStep, true));
|
||||
addModSource (new gin::ModulationSourceButton (proc.modMatrix, proc.modSrcMonoStep, false));
|
||||
|
||||
addControl (new gin::Knob (prs.beat), 0, 1);
|
||||
addControl (new gin::Select (prs.beat), 0, 1);
|
||||
addControl (new gin::Knob (prs.length), 1, 1);
|
||||
|
||||
auto g = new gin::StepLFOComponent (Cfg::numStepLFOSteps);
|
||||
|
|
@ -524,6 +528,9 @@ public:
|
|||
addControl (new gin::Switch (proc.delayParams.sync), 0, 1);
|
||||
addControl (new gin::Knob (proc.delayParams.mix), 1.5f, 1.0f);
|
||||
|
||||
t->setName ("Delay1");
|
||||
b->setName ("Delay2");
|
||||
|
||||
watchParam (proc.delayParams.sync);
|
||||
|
||||
setSize (168, 163);
|
||||
|
|
@ -564,30 +571,3 @@ public:
|
|||
|
||||
WavetableAudioProcessor& proc;
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
class ScopeArea : public gin::ParamArea
|
||||
{
|
||||
public:
|
||||
ScopeArea (WavetableAudioProcessor& proc_)
|
||||
: gin::ParamArea ("Scope"), proc (proc_)
|
||||
{
|
||||
setName ("scope");
|
||||
|
||||
scope = new gin::TriggeredScope (proc.scopeFifo);
|
||||
scope->setNumChannels (2);
|
||||
scope->setTriggerMode (gin::TriggeredScope::TriggerMode::Up);
|
||||
scope->setColour (gin::TriggeredScope::lineColourId, juce::Colours::transparentBlack);
|
||||
addControl (scope);
|
||||
|
||||
setSize (272, 163);
|
||||
}
|
||||
|
||||
void resized() override
|
||||
{
|
||||
scope->setBounds (getLocalBounds().withSizeKeepingCentre (getWidth(), 140));
|
||||
}
|
||||
|
||||
WavetableAudioProcessor& proc;
|
||||
gin::TriggeredScope* scope;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -5,9 +5,18 @@
|
|||
WavetableAudioProcessorEditor::WavetableAudioProcessorEditor (WavetableAudioProcessor& p)
|
||||
: ProcessorEditor (p), vaProc (p)
|
||||
{
|
||||
addAndMakeVisible (editor);
|
||||
scope.setName ("scope");
|
||||
scope.setNumChannels (2);
|
||||
scope.setTriggerMode (gin::TriggeredScope::TriggerMode::Up);
|
||||
scope.setColour (gin::TriggeredScope::traceColourId + 0, findColour(gin::PluginLookAndFeel::accentColourId, true).withAlpha (0.7f));
|
||||
scope.setColour (gin::TriggeredScope::traceColourId + 1, findColour(gin::PluginLookAndFeel::accentColourId, true).withAlpha (0.7f));
|
||||
scope.setColour (gin::TriggeredScope::lineColourId, juce::Colours::transparentBlack);
|
||||
|
||||
setSize (901, 753);
|
||||
addAndMakeVisible (editor);
|
||||
addAndMakeVisible (scope);
|
||||
scope.setBounds (674, 5, 177, 30);
|
||||
|
||||
setSize (901, 671);
|
||||
}
|
||||
|
||||
WavetableAudioProcessorEditor::~WavetableAudioProcessorEditor()
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ public:
|
|||
private:
|
||||
WavetableAudioProcessor& vaProc;
|
||||
|
||||
gin::TriggeredScope scope { vaProc.scopeFifo };
|
||||
Editor editor { vaProc };
|
||||
|
||||
#if JUCE_DEBUG
|
||||
|
|
|
|||
|
|
@ -110,6 +110,8 @@ void WavetableAudioProcessor::OSCParams::setup (WavetableAudioProcessor& p, int
|
|||
detune = p.addExtParam (id + "detune", nm + "Detune", "Detune", "", { 0.0, 0.5, 0.0, 1.0 }, 0.0, 0.0f);
|
||||
spread = p.addExtParam (id + "spread", nm + "Spread", "Spread", "%", { -100.0, 100.0, 0.0, 1.0 }, 0.0, 0.0f);
|
||||
pan = p.addExtParam (id + "pan", nm + "Pan", "Pan", "", { -1.0, 1.0, 0.0, 1.0 }, 0.0, 0.0f);
|
||||
formant = p.addExtParam (id + "formant", nm + "Formant", "Formant", "", { -1.0, 1.0, 0.0, 1.0 }, 0.0, 0.0f);
|
||||
bend = p.addExtParam (id + "bend", nm + "Bend", "Bend", "", { -1.0, 1.0, 0.0, 1.0 }, 0.0, 0.0f);
|
||||
|
||||
level->conversionFunction = [] (float in) { return juce::Decibels::decibelsToGain (in); };
|
||||
}
|
||||
|
|
@ -354,7 +356,7 @@ static bool loadWaveTable (juce::OwnedArray<gin::BandLimitedLookupTable>& table,
|
|||
}
|
||||
|
||||
//==============================================================================
|
||||
WavetableAudioProcessor::WavetableAudioProcessor()
|
||||
WavetableAudioProcessor::WavetableAudioProcessor() : gin::Processor (false)
|
||||
{
|
||||
lf = std::make_unique<gin::CopperLookAndFeel>();
|
||||
|
||||
|
|
@ -398,6 +400,7 @@ WavetableAudioProcessor::WavetableAudioProcessor()
|
|||
}
|
||||
|
||||
setupModMatrix();
|
||||
init();
|
||||
}
|
||||
|
||||
WavetableAudioProcessor::~WavetableAudioProcessor()
|
||||
|
|
@ -683,7 +686,9 @@ gin::WTOscillator::Params WavetableAudioProcessor::getLiveWTParams (int osc)
|
|||
return vav->getLiveWTParams (osc);
|
||||
|
||||
gin::WTOscillator::Params p;
|
||||
p.pw = oscParams[osc].pos->getValue();
|
||||
p.position = oscParams[osc].pos->getUserValue() / 100.0f;
|
||||
p.formant = oscParams[osc].formant->getUserValue();
|
||||
p.bend = oscParams[osc].bend->getUserValue();
|
||||
return p;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ public:
|
|||
{
|
||||
OSCParams() = default;
|
||||
|
||||
gin::Parameter::Ptr enable, voices, tune, finetune, level, pos, detune, spread, pan;
|
||||
gin::Parameter::Ptr enable, voices, tune, finetune, level, pos, detune, spread, pan, bend, formant;
|
||||
|
||||
void setup (WavetableAudioProcessor& p, int idx);
|
||||
|
||||
|
|
|
|||
|
|
@ -211,14 +211,15 @@ void WavetableVoice::updateParams (int blockSize)
|
|||
currentMidiNotes[i] += float (note.totalPitchbendInSemitones);
|
||||
currentMidiNotes[i] += getValue (proc.oscParams[i].tune) + getValue (proc.oscParams[i].finetune) / 100.0f;
|
||||
|
||||
oscParams[i].wave = gin::Wave::wavetable;
|
||||
oscParams[i].voices = int (proc.oscParams[i].voices->getProcValue());
|
||||
oscParams[i].vcTrns = 0;
|
||||
oscParams[i].pw = getValue (proc.oscParams[i].pos) / 100.0f;
|
||||
oscParams[i].pan = getValue (proc.oscParams[i].pan);
|
||||
oscParams[i].spread = getValue (proc.oscParams[i].spread) / 100.0f;
|
||||
oscParams[i].detune = getValue (proc.oscParams[i].detune);
|
||||
oscParams[i].gain = getValue (proc.oscParams[i].level);
|
||||
oscParams[i].voices = int (proc.oscParams[i].voices->getProcValue());
|
||||
oscParams[i].vcTrns = 0;
|
||||
oscParams[i].position = getValue (proc.oscParams[i].pos) / 100.0f;
|
||||
oscParams[i].pan = getValue (proc.oscParams[i].pan);
|
||||
oscParams[i].spread = getValue (proc.oscParams[i].spread) / 100.0f;
|
||||
oscParams[i].detune = getValue (proc.oscParams[i].detune);
|
||||
oscParams[i].gain = getValue (proc.oscParams[i].level);
|
||||
oscParams[i].formant = getValue (proc.oscParams[i].formant);
|
||||
oscParams[i].bend = getValue (proc.oscParams[i].bend);
|
||||
}
|
||||
|
||||
if (proc.subParams.enable->isOn())
|
||||
|
|
@ -412,6 +413,8 @@ float WavetableVoice::getFilterCutoffNormalized()
|
|||
gin::WTOscillator::Params WavetableVoice::getLiveWTParams (int osc)
|
||||
{
|
||||
gin::WTOscillator::Params p;
|
||||
p.pw = getValue (proc.oscParams[osc].pos) / 100.0f;
|
||||
p.position = getValue (proc.oscParams[osc].pos) / 100.0f;
|
||||
p.formant = getValue (proc.oscParams[osc].formant);
|
||||
p.bend = getValue (proc.oscParams[osc].bend);
|
||||
return p;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ private:
|
|||
gin::AnalogADSR adsr;
|
||||
|
||||
float currentMidiNotes[Cfg::numOSCs];
|
||||
gin::WTVoicedStereoOscillator::Params oscParams[Cfg::numOSCs];
|
||||
gin::WTVoicedStereoOscillatorParams oscParams[Cfg::numOSCs];
|
||||
|
||||
float subNote = 0.0f;
|
||||
gin::StereoOscillator::Params subParams;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue