Add FX chain: per-pad filter, master compressor/EQ/distortion/reverb, VU meter
- Per-pad low-pass filter (cutoff + resonance) applied in DrumPad render - Master bus FX chain in PluginProcessor::applyMasterFx(): - Distortion (tanh waveshaper with drive/mix) - 3-band EQ (low shelf 200Hz, peak 1kHz, high shelf 5kHz) - Compressor (juce::dsp::Compressor with threshold/ratio) - Reverb (juce::dsp::Reverb with size/decay) - Master volume + pan with constant-power pan law - VU meter: RMS level measurement with exponential smoothing - All FX panel and master panel knobs now connected to audio processing - SampleEditorPanel cutoff/reso knobs linked to DrumPad filter params Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -61,6 +61,8 @@ void SampleEditorPanel::updateFromPad()
|
||||
releaseSlider.setValue (currentPad->release, juce::dontSendNotification);
|
||||
pitchSlider.setValue (currentPad->pitch, juce::dontSendNotification);
|
||||
panSlider.setValue (currentPad->pan, juce::dontSendNotification);
|
||||
cutoffSlider.setValue (currentPad->filterCutoff, juce::dontSendNotification);
|
||||
resoSlider.setValue (currentPad->filterReso, juce::dontSendNotification);
|
||||
|
||||
auto& buf = currentPad->getSampleBuffer();
|
||||
waveform.setBuffer (&buf);
|
||||
@@ -78,8 +80,10 @@ void SampleEditorPanel::sliderValueChanged (juce::Slider* slider)
|
||||
else if (slider == &decaySlider) currentPad->decay = (float) slider->getValue();
|
||||
else if (slider == &sustainSlider) currentPad->sustain = (float) slider->getValue();
|
||||
else if (slider == &releaseSlider) currentPad->release = (float) slider->getValue();
|
||||
else if (slider == &pitchSlider) currentPad->pitch = (float) slider->getValue();
|
||||
else if (slider == &panSlider) currentPad->pan = (float) slider->getValue();
|
||||
else if (slider == &pitchSlider) currentPad->pitch = (float) slider->getValue();
|
||||
else if (slider == &panSlider) currentPad->pan = (float) slider->getValue();
|
||||
else if (slider == &cutoffSlider) currentPad->filterCutoff = (float) slider->getValue();
|
||||
else if (slider == &resoSlider) currentPad->filterReso = (float) slider->getValue();
|
||||
|
||||
// Update ADSR overlay
|
||||
waveform.setADSR (currentPad->attack, currentPad->decay, currentPad->sustain, currentPad->release);
|
||||
|
||||
Reference in New Issue
Block a user