diff options
Diffstat (limited to 'intern/audaspace/FX/AUD_ButterworthFactory.cpp')
-rw-r--r-- | intern/audaspace/FX/AUD_ButterworthFactory.cpp | 16 |
1 files changed, 6 insertions, 10 deletions
diff --git a/intern/audaspace/FX/AUD_ButterworthFactory.cpp b/intern/audaspace/FX/AUD_ButterworthFactory.cpp index ea957c81ed3..4b45512ffa6 100644 --- a/intern/audaspace/FX/AUD_ButterworthFactory.cpp +++ b/intern/audaspace/FX/AUD_ButterworthFactory.cpp @@ -41,19 +41,18 @@ #define BWPB41 0.76536686473 #define BWPB42 1.84775906502 -AUD_ButterworthFactory::AUD_ButterworthFactory(AUD_IFactory* factory, +AUD_ButterworthFactory::AUD_ButterworthFactory(AUD_Reference<AUD_IFactory> factory, float frequency) : - AUD_EffectFactory(factory), + AUD_DynamicIIRFilterFactory(factory), m_frequency(frequency) { } -AUD_IReader* AUD_ButterworthFactory::createReader() const +void AUD_ButterworthFactory::recalculateCoefficients(AUD_SampleRate rate, + std::vector<float> &b, + std::vector<float> &a) { - AUD_IReader* reader = getReader(); - - // calculate coefficients - float omega = 2 * tan(m_frequency * M_PI / reader->getSpecs().rate); + float omega = 2 * tan(m_frequency * M_PI / rate); float o2 = omega * omega; float o4 = o2 * o2; float x1 = o2 + 2 * BWPB41 * omega + 4; @@ -62,7 +61,6 @@ AUD_IReader* AUD_ButterworthFactory::createReader() const float y2 = o2 - 2 * BWPB42 * omega + 4; float o228 = 2 * o2 - 8; float norm = x1 * x2; - std::vector<float> a, b; a.push_back(1); a.push_back((x1 + x2) * o228 / norm); a.push_back((x1 * y2 + x2 * y1 + o228 * o228) / norm); @@ -73,6 +71,4 @@ AUD_IReader* AUD_ButterworthFactory::createReader() const b.push_back(6 * o4 / norm); b.push_back(b[1]); b.push_back(b[0]); - - return new AUD_IIRFilterReader(reader, b, a); } |