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:
@@ -142,7 +142,10 @@ void InstaDrumsEditor::selectPad (int index)
|
||||
padComponents[i]->setSelected (i == index);
|
||||
|
||||
if (index >= 0 && index < processor.getNumPads())
|
||||
{
|
||||
sampleEditor.setPad (&processor.getPad (index));
|
||||
fxPanel.setPad (&processor.getPad (index));
|
||||
}
|
||||
}
|
||||
|
||||
void InstaDrumsEditor::paint (juce::Graphics& g)
|
||||
@@ -167,7 +170,7 @@ void InstaDrumsEditor::paint (juce::Graphics& g)
|
||||
// Divider lines
|
||||
auto bounds = getLocalBounds();
|
||||
int rightPanelX = (int) (bounds.getWidth() * 0.52f);
|
||||
int masterH = std::max (44, (int) (60 * sc));
|
||||
int masterH = std::max (50, (int) (65 * sc));
|
||||
int bottomPanelY = bounds.getHeight() - masterH - 4;
|
||||
|
||||
g.setColour (InstaDrumsLookAndFeel::bgLight.withAlpha (0.4f));
|
||||
@@ -199,7 +202,7 @@ void InstaDrumsEditor::resized()
|
||||
loadSampleButton.setBounds (topBar.removeFromRight (btnW).reduced (2));
|
||||
|
||||
// Bottom master bar
|
||||
int masterH = std::max (44, (int) (60 * scale));
|
||||
int masterH = std::max (50, (int) (65 * scale));
|
||||
masterPanel.setBounds (area.removeFromBottom (masterH).reduced (4, 2));
|
||||
|
||||
// Left panel: pad grid (~52% width)
|
||||
@@ -242,22 +245,19 @@ void InstaDrumsEditor::timerCallback()
|
||||
for (auto* pc : padComponents)
|
||||
pc->repaint();
|
||||
|
||||
// Sync FX panel knobs -> processor atomic params
|
||||
processor.compThreshold.store (fxPanel.getCompThreshold());
|
||||
processor.compRatio.store (fxPanel.getCompRatio());
|
||||
processor.eqLo.store (fxPanel.getEqLo());
|
||||
processor.eqMid.store (fxPanel.getEqMid());
|
||||
processor.eqHi.store (fxPanel.getEqHi());
|
||||
processor.distDrive.store (fxPanel.getDistDrive());
|
||||
processor.distMix.store (fxPanel.getDistMix());
|
||||
processor.reverbSize.store (fxPanel.getReverbSize());
|
||||
processor.reverbDecay.store (fxPanel.getReverbDecay());
|
||||
// Sync FX panel knobs -> selected pad's FX params
|
||||
fxPanel.syncToPad();
|
||||
|
||||
// Update per-pad compressor GR meter
|
||||
if (selectedPadIndex >= 0 && selectedPadIndex < processor.getNumPads())
|
||||
fxPanel.setCompGainReduction (processor.getPad (selectedPadIndex).compGainReduction.load());
|
||||
|
||||
// Sync master panel -> processor
|
||||
processor.masterVolume.store (masterPanel.getMasterVolume());
|
||||
processor.masterPan.store (masterPanel.getMasterPan());
|
||||
processor.masterTune.store (masterPanel.getMasterTune());
|
||||
processor.masterVolume.store (masterPanel.getMasterVolume());
|
||||
processor.masterPan.store (masterPanel.getMasterPan());
|
||||
processor.masterTune.store (masterPanel.getMasterTune());
|
||||
processor.outputLimiterEnabled.store (masterPanel.isLimiterEnabled());
|
||||
|
||||
// Update VU meter from processor
|
||||
// Update VU meter
|
||||
masterPanel.getVuMeter().setLevel (processor.vuLevelL.load(), processor.vuLevelR.load());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user