/* ============================================================================== RingMod.h Created: 24 Jul 2026 Author: Armin ============================================================================== */ #pragma once #include #include "Effect.h" /** Ring modulation effect driven by the LFO waveform. */ class RingModEffect final : public Effect { public: void initialize(int /*numChannels*/, int /*fxSampleRate*/) override { } void setMix(float m) { mix = juce::jlimit(0.f, 1.f, m); } void updateParams(const SamplerParameters& samplerSound, bool /*modulating*/) override { setMix(samplerSound.modRingModMix->get()); } /** Process with a pre-computed LFO buffer for ring modulation. */ void processWithLFO(juce::AudioBuffer& buffer, int numSamples, const float* lfoBuffer) { for (int ch = 0; ch < buffer.getNumChannels(); ch++) { auto* data = buffer.getWritePointer(ch); for (int i = 0; i < numSamples; i++) { float dry = data[i]; float modulated = dry * lfoBuffer[i]; data[i] = dry + (modulated - dry) * mix; } } } void process(juce::AudioBuffer& /*buffer*/, int /*numSamples*/, int /*startSample*/ = 0) override { // No-op without LFO buffer } private: float mix{ 0.5f }; };