diff --git a/Source/PluginProcessor.cpp b/Source/PluginProcessor.cpp index e9f7554..a67f7c0 100644 --- a/Source/PluginProcessor.cpp +++ b/Source/PluginProcessor.cpp @@ -30,6 +30,7 @@ ReverbAudioProcessor::ReverbAudioProcessor() addParameter(freezeMode = new juce::AudioParameterFloat(juce::ParameterID("freezeMode", 5), "Freeze", 0.0, 1.0, 0.0)); addParameter(lofi = new juce::AudioParameterBool(juce::ParameterID("lofi", 6), "Tone or lofi", false)); addParameter(tone_val = new juce::AudioParameterFloat(juce::ParameterID("tone_val", 7), "Tone", 0.0, 1.0, 0.5)); + addParameter(out = new juce::AudioParameterFloat(juce::ParameterID("out", 8), "Output", 0.0, 2.0, 1.0)); verb.setSampleRate(sample_rate); } @@ -94,6 +95,10 @@ void ReverbAudioProcessor::prepareToPlay (double sampleRate, int samplesPerBlock // Use this method as the place to do any pre-playback // initialisation that you need.. verb.reset(); + + filter_l = new juce::IIRFilter(); + filter_r = new juce::IIRFilter(); + } void ReverbAudioProcessor::releaseResources() @@ -152,20 +157,47 @@ void ReverbAudioProcessor::processBlock (juce::AudioBuffer& buffer, juce: // Alternatively, you can process the samples with the channels // interleaved by keeping the same state. - /* - for (int channel = 0; channel < totalNumInputChannels; ++channel) - { - auto* channelData = buffer.getWritePointer (channel); + + + auto* channel_one = buffer.getWritePointer(0); + auto* channel_two = buffer.getWritePointer(1); + auto num_samples = buffer.getNumSamples(); - // ..do something to the data... - } - */ update_verb(); - verb.processStereo(buffer.getWritePointer(0), buffer.getWritePointer(1), - buffer.getNumSamples()); + verb.processStereo(channel_one, channel_two, + num_samples); + setup_filter(); + 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(); + } + +} + +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(); + } + + } } //============================================================================== @@ -203,6 +235,7 @@ void ReverbAudioProcessor::getStateInformation (juce::MemoryBlock& destData) stream.writeFloat(*freezeMode); stream.writeBool(*lofi); stream.writeFloat(*tone_val); + stream.writeFloat(*out); } void ReverbAudioProcessor::setStateInformation (const void* data, int sizeInBytes) @@ -215,6 +248,7 @@ void ReverbAudioProcessor::setStateInformation (const void* data, int sizeInByte freezeMode->setValueNotifyingHost(stream.readFloat()); lofi->setValueNotifyingHost(stream.readBool()); tone_val->setValueNotifyingHost(stream.readFloat()); + out->setValueNotifyingHost(stream.readFloat()); } //============================================================================== diff --git a/Source/PluginProcessor.h b/Source/PluginProcessor.h index 81e9efc..c34d784 100644 --- a/Source/PluginProcessor.h +++ b/Source/PluginProcessor.h @@ -54,7 +54,7 @@ public: void setStateInformation (const void* data, int sizeInBytes) override; void update_verb(); - + void setup_filter(); private: @@ -68,10 +68,13 @@ private: juce::AudioParameterBool* lofi; juce::AudioParameterFloat* tone_val; + juce::AudioParameterFloat* out; + juce::Reverb verb; juce::Reverb::Parameters params; - juce::IIRFilter filter; + juce::IIRFilter* filter_l; + juce::IIRFilter* filter_r; //============================================================================== JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ReverbAudioProcessor) };