Per-pad FX chain, animated toggles, GR meter, simplified master panel

- FX moved from master bus to per-pad processing:
  each pad has its own Filter, Distortion, EQ, Compressor, Reverb
  via DrumPad::applyPadFx() with temp buffer rendering
- FxPanel now edits the selected pad's FX parameters
- Animated toggle switches with smooth lerp transition and glow
- Per-pad compressor GR meter connected to FxPanel display
- Master panel simplified: Volume/Tune/Pan + Limiter toggle + VU meter
- Master bus chain: Vol/Pan → Output Limiter (0dB brickwall) → VU
- Pointer glow reduced to half intensity (4 layers, narrower spread)
- Smooth 8-layer arc glow with exponential opacity falloff

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
hariel1985
2026-03-23 06:42:47 +01:00
szülő 20b9fe2674
commit a0e83fa0a4
11 fájl változott, egészen pontosan 500 új sor hozzáadva és 210 régi sor törölve

Fájl megtekintése

@@ -10,6 +10,13 @@ MasterPanel::MasterPanel()
setupKnob (tuneSlider, tuneLabel, "Tune", -12.0, 12.0, 0.0, 0.1);
setupKnob (panSlider, panLabel, "Pan", -1.0, 1.0, 0.0, 0.01);
limiterToggle.setToggleState (true, juce::dontSendNotification);
limiterToggle.setButtonText ("");
addAndMakeVisible (limiterToggle);
limiterLabel.setColour (juce::Label::textColourId, InstaDrumsLookAndFeel::accent);
limiterLabel.setJustificationType (juce::Justification::centredLeft);
addAndMakeVisible (limiterLabel);
addAndMakeVisible (vuMeter);
}
@@ -45,13 +52,29 @@ void MasterPanel::resized()
float titleSize = std::max (12.0f, 16.0f * scale);
float labelSize = std::max (9.0f, 12.0f * scale);
int labelH = (int) (labelSize + 4);
int toggleW = std::max (28, (int) (36 * scale));
int toggleH = std::max (14, (int) (16 * scale));
masterTitle.setFont (juce::FontOptions (titleSize, juce::Font::bold));
masterTitle.setBounds (area.removeFromLeft ((int) (65 * scale)).reduced (0, 2));
// VU meter on right
vuMeter.setBounds (area.removeFromRight ((int) (28 * scale)).reduced (0, 2));
area.removeFromRight (4);
area.removeFromRight (6);
// Limiter toggle + label
auto limArea = area.removeFromRight ((int) (90 * scale));
{
auto center = limArea.withSizeKeepingCentre (limArea.getWidth(), toggleH + 4);
auto row = center;
limiterToggle.setBounds (row.removeFromLeft (toggleW).withSizeKeepingCentre (toggleW, toggleH));
limiterLabel.setFont (juce::FontOptions (std::max (10.0f, 13.0f * scale), juce::Font::bold));
limiterLabel.setBounds (row);
}
area.removeFromRight (6);
// Master knobs
int knobW = area.getWidth() / 3;
juce::Slider* sliders[] = { &volumeSlider, &tuneSlider, &panSlider };
juce::Label* labels[] = { &volumeLabel, &tuneLabel, &panLabel };