Fix menu scaling issues, fix preset menu layout, add LED display (to

show patch), add prev/next patch buttons
This commit is contained in:
Armin 2026-07-14 00:35:26 +02:00
commit 79be724e5d
5 changed files with 281 additions and 175 deletions

View file

@ -31,12 +31,12 @@ juce::AudioProcessorValueTreeState::ParameterLayout ChromaFlockProcessor::create
juce::ParameterID{"osc1Fine", 1}, "OSC1 Fine",
juce::NormalisableRange<float>(-100.0f, 100.0f, 1.0f), 0.0f));
layout.add(std::make_unique<juce::AudioParameterFloat>(
juce::ParameterID{"osc1Level", 1}, "OSC1 Level", zeroOne, 0.7f));
juce::ParameterID{"osc1Level", 1}, "OSC1 Level", zeroOne, 0.5f));
// OSC 2
layout.add(std::make_unique<juce::AudioParameterChoice>(
juce::ParameterID{"osc2Wave", 1}, "OSC2 Wave",
juce::StringArray{"Sine", "Saw", "Square", "Triangle", "Noise"}, 2));
juce::StringArray{"Sine", "Saw", "Square", "Triangle", "Noise"}, 3));
layout.add(std::make_unique<juce::AudioParameterFloat>(
juce::ParameterID{"osc2Oct", 1}, "OSC2 Octave",
juce::NormalisableRange<float>(-3.0f, 3.0f, 1.0f), -1.0f));
@ -47,7 +47,7 @@ juce::AudioProcessorValueTreeState::ParameterLayout ChromaFlockProcessor::create
juce::ParameterID{"osc2Fine", 1}, "OSC2 Fine",
juce::NormalisableRange<float>(-100.0f, 100.0f, 1.0f), 7.0f));
layout.add(std::make_unique<juce::AudioParameterFloat>(
juce::ParameterID{"osc2Level", 1}, "OSC2 Level", zeroOne, 0.7f));
juce::ParameterID{"osc2Level", 1}, "OSC2 Level", zeroOne, 0.5f));
layout.add(std::make_unique<juce::AudioParameterFloat>(
juce::ParameterID{"phaseOffset", 1}, "Phase Offset", zeroOne, 0.5f));
@ -59,7 +59,7 @@ juce::AudioProcessorValueTreeState::ParameterLayout ChromaFlockProcessor::create
juce::ParameterID{"filterCutoff", 1}, "Filter Cutoff",
juce::NormalisableRange<float>(50.0f, 20000.0f, 0.1f, 0.25f), 8000.0f));
layout.add(std::make_unique<juce::AudioParameterFloat>(
juce::ParameterID{"filterRes", 1}, "Filter Resonance", zeroOne, 0.7f));
juce::ParameterID{"filterRes", 1}, "Filter Resonance", zeroOne, 0.2f));
layout.add(std::make_unique<juce::AudioParameterFloat>(
juce::ParameterID{"filterEnvAmt", 1}, "Filter Env Amount", zeroOne, 0.0f));
layout.add(std::make_unique<juce::AudioParameterFloat>(
@ -81,7 +81,7 @@ juce::AudioProcessorValueTreeState::ParameterLayout ChromaFlockProcessor::create
// AMP ENVELOPE
layout.add(std::make_unique<juce::AudioParameterFloat>(
juce::ParameterID{"envAttack", 1}, "Attack",
juce::NormalisableRange<float>(0.001f, 5.0f, 0.001f, 0.3f), 0.01f));
juce::NormalisableRange<float>(0.001f, 5.0f, 0.001f, 0.3f), 0.03f));
layout.add(std::make_unique<juce::AudioParameterFloat>(
juce::ParameterID{"envDecay", 1}, "Decay",
juce::NormalisableRange<float>(0.001f, 5.0f, 0.001f, 0.3f), 0.3f));
@ -97,9 +97,9 @@ juce::AudioProcessorValueTreeState::ParameterLayout ChromaFlockProcessor::create
juce::NormalisableRange<float>(-1.0f, 1.0f, 0.01f), 0.0f));
layout.add(std::make_unique<juce::AudioParameterFloat>(
juce::ParameterID{"drive", 1}, "Drive",
juce::NormalisableRange<float>(1.0f, 5.0f, 0.01f, 0.5f), 1.5f));
juce::NormalisableRange<float>(1.0f, 5.0f, 0.01f, 0.5f), 1.2f));
layout.add(std::make_unique<juce::AudioParameterFloat>(
juce::ParameterID{"masterLevel", 1}, "Master Level", zeroOne, 0.8f));
juce::ParameterID{"masterLevel", 1}, "Master Level", zeroOne, 0.7f));
// PITCH BEND
layout.add(std::make_unique<juce::AudioParameterFloat>(
@ -175,12 +175,6 @@ juce::AudioProcessorValueTreeState::ParameterLayout ChromaFlockProcessor::create
juce::ParameterID{"delayFeedback", 1}, "Delay Feedback", zeroOne, 0.3f));
layout.add(std::make_unique<juce::AudioParameterFloat>(
juce::ParameterID{"delayMix", 1}, "Delay Mix", zeroOne, 0.25f));
layout.add(std::make_unique<juce::AudioParameterChoice>(
juce::ParameterID{"delayPingPong", 1}, "Delay PingPong",
juce::StringArray{"Off", "On"}, 0));
layout.add(std::make_unique<juce::AudioParameterFloat>(
juce::ParameterID{"delaySpread", 1}, "Delay Spread",
juce::NormalisableRange<float>(0.25f, 0.75f, 0.01f), 0.5f));
// REVERB
layout.add(std::make_unique<juce::AudioParameterFloat>(
@ -293,8 +287,7 @@ void ChromaFlockProcessor::processBlock(juce::AudioBuffer<float>& buffer, juce::
float panRate = getParam("autoPanRate");
float panDepth = getParam("autoPanDepth");
delay.setParameters(getParam("delayTime"), getParam("delayFeedback"), getParam("delayMix"),
static_cast<int>(getParam("delayPingPong")) == 1, getParam("delaySpread"));
delay.setParameters(getParam("delayTime"), getParam("delayFeedback"), getParam("delayMix"));
reverbFX.setParameters(getParam("reverbSize"), getParam("reverbDamping"), 0.8f, getParam("reverbMix"));
// FX processing: distortion → compression → auto-pan