diff options
Diffstat (limited to 'src/DSP')
| -rw-r--r-- | src/DSP/AllPassFilter.cpp | 44 | ||||
| -rw-r--r-- | src/DSP/AllPassFilter.h | 21 | ||||
| -rw-r--r-- | src/DSP/CombFilter.cpp | 37 | ||||
| -rw-r--r-- | src/DSP/CombFilter.h | 21 | ||||
| -rw-r--r-- | src/DSP/SchroederReverb.cpp | 48 | ||||
| -rw-r--r-- | src/DSP/SchroederReverb.h | 21 |
6 files changed, 103 insertions, 89 deletions
diff --git a/src/DSP/AllPassFilter.cpp b/src/DSP/AllPassFilter.cpp index 78af7c9..a051fd4 100644 --- a/src/DSP/AllPassFilter.cpp +++ b/src/DSP/AllPassFilter.cpp @@ -1,30 +1,32 @@ #include "AllPassFilter.h" -void AllPassFilter::prepare(double sampleRate, int samplesPerBlock, int delayInSamples, float gain) { - int maxDelayTimeMs = 100; - int maxDelaySamples = static_cast<int>(sampleRate * maxDelayTimeMs / 1000.0); +void +AllPassFilter::prepare(double sampleRate, int samplesPerBlock, int delayInSamples, float gain) +{ + int maxDelayTimeMs = 100; + int maxDelaySamples = static_cast<int>(sampleRate * maxDelayTimeMs / 1000.0); - delayBuffer.resize(maxDelaySamples, 0.0f); - std::fill(delayBuffer.begin(), delayBuffer.end(), 0.0f); - delayBufferWritePos = 0; - this->delayInSamples_ = delayInSamples; - this->gain = gain; + delayBuffer.resize(maxDelaySamples, 0.0f); + std::fill(delayBuffer.begin(), delayBuffer.end(), 0.0f); + delayBufferWritePos = 0; + this->delayInSamples_ = delayInSamples; + this->gain = gain; } -void AllPassFilter::process(float* sample) { - int delayBufferLength = (int)delayBuffer.size(); - int delayReadPos = - (delayBufferWritePos - delayInSamples_ + delayBufferLength) % - delayBufferLength; +void +AllPassFilter::process(float* sample) +{ + int delayBufferLength = (int)delayBuffer.size(); + int delayReadPos + = (delayBufferWritePos - delayInSamples_ + delayBufferLength) % delayBufferLength; + float delayedSample = delayBuffer[delayReadPos]; + float xn = *sample; - float delayedSample = delayBuffer[delayReadPos]; - float xn = *sample; + float bufferInput = xn + gain * delayedSample; + float yn = -gain * xn + delayedSample; - float bufferInput = xn + gain * delayedSample; - float yn = -gain * xn + delayedSample; - - delayBuffer[delayBufferWritePos] = bufferInput; - *sample = yn; - delayBufferWritePos = (delayBufferWritePos + 1) % delayBufferLength; + delayBuffer[delayBufferWritePos] = bufferInput; + *sample = yn; + delayBufferWritePos = (delayBufferWritePos + 1) % delayBufferLength; } diff --git a/src/DSP/AllPassFilter.h b/src/DSP/AllPassFilter.h index 0d9a91e..b989122 100644 --- a/src/DSP/AllPassFilter.h +++ b/src/DSP/AllPassFilter.h @@ -2,15 +2,16 @@ #include <juce_audio_processors/juce_audio_processors.h> -class AllPassFilter { -public: - void prepare(double sampleRate, int samplesPerBlock, int delayInSamples, float gain); - void reset(); - void process(float *sample); +class AllPassFilter +{ + public: + void prepare(double sampleRate, int samplesPerBlock, int delayInSamples, float gain); + void reset(); + void process(float* sample); -private: - std::vector<float> delayBuffer; - int delayBufferWritePos = 0; - int delayInSamples_ = 0; - float gain = 0.7f; + private: + std::vector<float> delayBuffer; + int delayBufferWritePos = 0; + int delayInSamples_ = 0; + float gain = 0.7f; }; diff --git a/src/DSP/CombFilter.cpp b/src/DSP/CombFilter.cpp index 3d11f2f..dc4de96 100644 --- a/src/DSP/CombFilter.cpp +++ b/src/DSP/CombFilter.cpp @@ -1,22 +1,27 @@ #include "CombFilter.h" -void CombFilter::prepare(double sampleRate, int samplesPerBlock, int delayInSamples, float gain) { - int maxDelayTimeMs = 500; - int maxDelaySamples = static_cast<int>(sampleRate * maxDelayTimeMs / 1000.0); +void +CombFilter::prepare(double sampleRate, int samplesPerBlock, int delayInSamples, float gain) +{ + int maxDelayTimeMs = 500; + int maxDelaySamples = static_cast<int>(sampleRate * maxDelayTimeMs / 1000.0); - delayBuffer.resize(maxDelaySamples, 0.0f); - std::fill(delayBuffer.begin(), delayBuffer.end(), 0.0f); - delayBufferWritePos = 0; - this->delayInSamples_ = delayInSamples; - this->gain = gain; + delayBuffer.resize(maxDelaySamples, 0.0f); + std::fill(delayBuffer.begin(), delayBuffer.end(), 0.0f); + delayBufferWritePos = 0; + this->delayInSamples_ = delayInSamples; + this->gain = gain; } -void CombFilter::process(float* sample) { - int delayBufferLength = (int)delayBuffer.size(); - int delayReadPos = (delayBufferWritePos - delayInSamples_ + delayBufferLength) % delayBufferLength; - float delayedSample = delayBuffer[delayReadPos]; - float yn = *sample + gain * delayedSample; - delayBuffer[delayBufferWritePos] = yn; - delayBufferWritePos = (delayBufferWritePos + 1) % delayBufferLength; - *sample = delayedSample; +void +CombFilter::process(float* sample) +{ + int delayBufferLength = (int)delayBuffer.size(); + int delayReadPos + = (delayBufferWritePos - delayInSamples_ + delayBufferLength) % delayBufferLength; + float delayedSample = delayBuffer[delayReadPos]; + float yn = *sample + gain * delayedSample; + delayBuffer[delayBufferWritePos] = yn; + delayBufferWritePos = (delayBufferWritePos + 1) % delayBufferLength; + *sample = delayedSample; } diff --git a/src/DSP/CombFilter.h b/src/DSP/CombFilter.h index 5568fec..4e435cd 100644 --- a/src/DSP/CombFilter.h +++ b/src/DSP/CombFilter.h @@ -2,15 +2,16 @@ #include <juce_audio_processors/juce_audio_processors.h> -class CombFilter { -public: - void prepare(double sampleRate, int samplesPerBlock, int delayInSamples, float gain); - void reset(); - void process(float* sample); +class CombFilter +{ + public: + void prepare(double sampleRate, int samplesPerBlock, int delayInSamples, float gain); + void reset(); + void process(float* sample); -private: - std::vector<float> delayBuffer; - int delayBufferWritePos = 0; - int delayInSamples_ = 0; - float gain = 0.7f; + private: + std::vector<float> delayBuffer; + int delayBufferWritePos = 0; + int delayInSamples_ = 0; + float gain = 0.7f; }; diff --git a/src/DSP/SchroederReverb.cpp b/src/DSP/SchroederReverb.cpp index 785e84c..202c24d 100644 --- a/src/DSP/SchroederReverb.cpp +++ b/src/DSP/SchroederReverb.cpp @@ -1,30 +1,34 @@ #include "SchroederReverb.h" -void SchroederReverb::prepare(double sampleRate, int samplesPerBlock) { - combFilter0.prepare(sampleRate, samplesPerBlock, 4799, 0.742f); - combFilter1.prepare(sampleRate, samplesPerBlock, 4999, 0.733f); - combFilter2.prepare(sampleRate, samplesPerBlock, 5399, 0.715f); - combFilter3.prepare(sampleRate, samplesPerBlock, 5801, 0.697f); - allPassFilter0.prepare(sampleRate, samplesPerBlock, 1051, 0.7f); - allPassFilter1.prepare(sampleRate, samplesPerBlock, 337, 0.7f); +void +SchroederReverb::prepare(double sampleRate, int samplesPerBlock) +{ + combFilter0.prepare(sampleRate, samplesPerBlock, 4799, 0.742f); + combFilter1.prepare(sampleRate, samplesPerBlock, 4999, 0.733f); + combFilter2.prepare(sampleRate, samplesPerBlock, 5399, 0.715f); + combFilter3.prepare(sampleRate, samplesPerBlock, 5801, 0.697f); + allPassFilter0.prepare(sampleRate, samplesPerBlock, 1051, 0.7f); + allPassFilter1.prepare(sampleRate, samplesPerBlock, 337, 0.7f); } -void SchroederReverb::process(float *sample) { - juce::ScopedNoDenormals noDenormals; - - float in0 = *sample; - float in1 = *sample; - float in2 = *sample; - float in3 = *sample; +void +SchroederReverb::process(float* sample) +{ + juce::ScopedNoDenormals noDenormals; - combFilter0.process(&in0); - combFilter1.process(&in1); - combFilter2.process(&in2); - combFilter3.process(&in3); + float in0 = *sample; + float in1 = *sample; + float in2 = *sample; + float in3 = *sample; - float allPassIn = 0.25f * (in0 + in1 + in2 + in3); - allPassFilter0.process(&allPassIn); - allPassFilter1.process(&allPassIn); + combFilter0.process(&in0); + combFilter1.process(&in1); + combFilter2.process(&in2); + combFilter3.process(&in3); - *sample = allPassIn; + float allPassIn = 0.25f * (in0 + in1 + in2 + in3); + allPassFilter0.process(&allPassIn); + allPassFilter1.process(&allPassIn); + + *sample = allPassIn; } diff --git a/src/DSP/SchroederReverb.h b/src/DSP/SchroederReverb.h index 8c4567a..a5b3038 100644 --- a/src/DSP/SchroederReverb.h +++ b/src/DSP/SchroederReverb.h @@ -1,16 +1,17 @@ #pragma once -#include <juce_audio_processors/juce_audio_processors.h> -#include "CombFilter.h" #include "AllPassFilter.h" +#include "CombFilter.h" +#include <juce_audio_processors/juce_audio_processors.h> -class SchroederReverb { -public: - void prepare(double sampleRate, int samplesPerBlock); - void reset(); - void process(float* sample); +class SchroederReverb +{ + public: + void prepare(double sampleRate, int samplesPerBlock); + void reset(); + void process(float* sample); -private: - CombFilter combFilter0, combFilter1, combFilter2, combFilter3; - AllPassFilter allPassFilter0, allPassFilter1; + private: + CombFilter combFilter0, combFilter1, combFilter2, combFilter3; + AllPassFilter allPassFilter0, allPassFilter1; }; |
