From 199f81a761d07597a9260f4c201f5743b470cbda Mon Sep 17 00:00:00 2001 From: Nathan Singer Date: Mon, 7 Jul 2025 14:38:46 -0400 Subject: [PATCH] tone complete? --- Source/PluginProcessor.cpp | 76 +++++++++++++++++++++++++++++--------- Source/PluginProcessor.h | 5 ++- 2 files changed, 63 insertions(+), 18 deletions(-) diff --git a/Source/PluginProcessor.cpp b/Source/PluginProcessor.cpp index a67f7c0..a2ccf8f 100644 --- a/Source/PluginProcessor.cpp +++ b/Source/PluginProcessor.cpp @@ -95,9 +95,21 @@ void ReverbAudioProcessor::prepareToPlay (double sampleRate, int samplesPerBlock // Use this method as the place to do any pre-playback // initialisation that you need.. verb.reset(); + + juce::IIRFilter* one_l = new juce::IIRFilter(); + juce::IIRFilter* one_r = new juce::IIRFilter(); + juce::IIRFilter* two_l = new juce::IIRFilter(); + juce::IIRFilter* two_r = new juce::IIRFilter(); + juce::IIRFilter* three_l = new juce::IIRFilter(); + juce::IIRFilter* three_r = new juce::IIRFilter(); - filter_l = new juce::IIRFilter(); - filter_r = new juce::IIRFilter(); + filters_l.push_back(one_l); + filters_l.push_back(two_l); + filters_l.push_back(three_l); + + filters_r.push_back(one_r); + filters_r.push_back(two_r); + filters_r.push_back(three_r); } @@ -168,14 +180,18 @@ void ReverbAudioProcessor::processBlock (juce::AudioBuffer& buffer, juce: num_samples); setup_filter(); - filter_l->processSamples(channel_one, num_samples); - filter_r->processSamples(channel_two, num_samples); + for (int i = 0; i < 3; i++) { + filters_l[i]->processSamples(channel_one, num_samples); + filters_r[i]->processSamples(channel_two, num_samples); + } + + //filter_l->processSamples(channel_one, num_samples); + //filter_r->processSamples(channel_two, num_samples); for (auto i = 0; i < num_samples; i++) { *buffer.getWritePointer(0, i) = (*buffer.getReadPointer(0, i)) * out->get(); *buffer.getWritePointer(1, i) = (*buffer.getReadPointer(1, i)) * out->get(); - } } @@ -183,20 +199,46 @@ void ReverbAudioProcessor::processBlock (juce::AudioBuffer& buffer, juce: void ReverbAudioProcessor::setup_filter() { juce::IIRCoefficients coef = juce::IIRCoefficients(); - if (lofi) { - filter_l->setCoefficients(coef.makeBandPass(sample_rate, tone_val->get() * 24000)); - filter_r->setCoefficients(coef.makeBandPass(sample_rate, tone_val->get() * 24000)); - - } else { - if (tone_val->get() == 0.5) { - filter_l->makeInactive(); - filter_r->makeInactive(); - - } else { - filter_l->makeInactive(); - filter_r->makeInactive(); + if (lofi->get()) { + for (int i = 0; i < 3; i++) { + //filters_l[i]->reset(); + //filters_r[i]->reset(); } + filters_l[0]->setCoefficients(coef.makeBandPass(sample_rate, tone_val->get() * 24000)); + filters_r[0]->setCoefficients(coef.makeBandPass(sample_rate, tone_val->get() * 24000)); + + for (int i = 1; i < 3; i++) { + filters_r[i]->makeInactive(); + filters_l[i]->makeInactive(); + } + } else { + for (int i = 0; i < 3; i++) { + //filters_l[i]->reset(); + //filters_r[i]->reset(); + } + + filters_l[0]->setCoefficients(coef.makeHighPass(sample_rate, 85.0)); + filters_r[0]->setCoefficients(coef.makeHighPass(sample_rate, 85.0)); + + float expanded_freq = 0; + if (tone_val->get() == 0.5) { + expanded_freq = 12000.0; + } else if (tone_val->get() < 0.5) { + expanded_freq = (tone_val->get() * 2) * (12000 - 5000) + 5000; // need to expand the normalized range + } else { + expanded_freq = ((tone_val->get() - 0.5) * 2) * (20000 - 12000) + 12000; // need to expand the normalized range + } + + filters_l[1]->setCoefficients(coef.makeLowPass(sample_rate, expanded_freq)); + filters_r[1]->setCoefficients(coef.makeLowPass(sample_rate, expanded_freq)); + + //filters_l[2]->setCoefficients(coef.makePeakFilter(sample_rate, 6000, 0.4, 1)); + //filters_r[2]->setCoefficients(coef.makePeakFilter(sample_rate, 6000, 0.4, 1)); + + filters_l[2]->makeInactive(); // band boost for later? + filters_r[2]->makeInactive(); + } } diff --git a/Source/PluginProcessor.h b/Source/PluginProcessor.h index c34d784..df038d0 100644 --- a/Source/PluginProcessor.h +++ b/Source/PluginProcessor.h @@ -75,6 +75,9 @@ private: juce::IIRFilter* filter_l; juce::IIRFilter* filter_r; - //============================================================================== + + std::vector filters_l; + std::vector filters_r; + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ReverbAudioProcessor) };