Add delay and reverb FX section with full DSP

Rename the DIST section to FX and expand it with tempo-synced delay
(Time/Strength/Sync) and Schroeder reverb (Roomsize/Strength/Diffusion).
New FxProcessor runs post-voice on the stereo bus; widen the editor to
1280px to fit the new section. Add a TestHost check that the FX tail
rings out after note release.
This commit is contained in:
Armin 2026-08-06 16:35:34 +02:00
commit 342d413563
8 changed files with 505 additions and 23 deletions

View file

@ -3,6 +3,7 @@
#include <JuceHeader.h>
#include "dsp/SynthVoice.h"
#include "dsp/StepSequencer.h"
#include "dsp/FxProcessor.h"
class MonostepAudioProcessor final : public juce::AudioProcessor
{
@ -20,7 +21,7 @@ public:
const juce::String getName() const override { return "Monostep"; }
bool acceptsMidi() const override { return true; }
bool producesMidi() const override { return false; }
double getTailLengthSeconds() const override { return 0.0; }
double getTailLengthSeconds() const override { return 4.0; }
int getNumPrograms() override { return 1; }
int getCurrentProgram() override { return 0; }
@ -106,9 +107,16 @@ private:
std::atomic<float>* ringModParam = nullptr;
std::atomic<float>* accentParam = nullptr;
std::atomic<float>* seqRetrigParam = nullptr;
std::atomic<float>* delayTimeParam = nullptr;
std::atomic<float>* delayStrengthParam = nullptr;
std::atomic<float>* delaySyncParam = nullptr;
std::atomic<float>* reverbRoomParam = nullptr;
std::atomic<float>* reverbStrengthParam = nullptr;
std::atomic<float>* reverbDiffusionParam = nullptr;
monostep::StepSequencer sequencer;
monostep::SynthVoice voice;
monostep::FxProcessor fx;
juce::AudioBuffer<float> scratch;
juce::Random random;