forked from bartvdbraak/blender
Audaspace:
Implemented forgotten Calculator classes from boost migration.
This commit is contained in:
parent
e1100cb655
commit
245345fba5
@ -34,6 +34,7 @@ set(INC_SYS
|
||||
set(SRC
|
||||
FX/AUD_AccumulatorFactory.cpp
|
||||
FX/AUD_BaseIIRFilterReader.cpp
|
||||
FX/AUD_ButterworthCalculator.cpp
|
||||
FX/AUD_ButterworthFactory.cpp
|
||||
FX/AUD_CallbackIIRFilterReader.cpp
|
||||
FX/AUD_DelayFactory.cpp
|
||||
@ -47,6 +48,7 @@ set(SRC
|
||||
FX/AUD_EnvelopeFactory.cpp
|
||||
FX/AUD_FaderFactory.cpp
|
||||
FX/AUD_FaderReader.cpp
|
||||
FX/AUD_HighpassCalculator.cpp
|
||||
FX/AUD_HighpassFactory.cpp
|
||||
FX/AUD_IIRFilterFactory.cpp
|
||||
FX/AUD_IIRFilterReader.cpp
|
||||
@ -54,6 +56,7 @@ set(SRC
|
||||
FX/AUD_LimiterReader.cpp
|
||||
FX/AUD_LoopFactory.cpp
|
||||
FX/AUD_LoopReader.cpp
|
||||
FX/AUD_LowpassCalculator.cpp
|
||||
FX/AUD_LowpassFactory.cpp
|
||||
FX/AUD_PingPongFactory.cpp
|
||||
FX/AUD_PitchFactory.cpp
|
||||
@ -145,6 +148,7 @@ set(SRC
|
||||
|
||||
FX/AUD_AccumulatorFactory.h
|
||||
FX/AUD_BaseIIRFilterReader.h
|
||||
FX/AUD_ButterworthCalculator.h
|
||||
FX/AUD_ButterworthFactory.h
|
||||
FX/AUD_CallbackIIRFilterReader.h
|
||||
FX/AUD_DelayFactory.h
|
||||
@ -159,6 +163,7 @@ set(SRC
|
||||
FX/AUD_EnvelopeFactory.h
|
||||
FX/AUD_FaderFactory.h
|
||||
FX/AUD_FaderReader.h
|
||||
FX/AUD_HighpassCalculator.h
|
||||
FX/AUD_HighpassFactory.h
|
||||
FX/AUD_IIRFilterFactory.h
|
||||
FX/AUD_IIRFilterReader.h
|
||||
@ -166,6 +171,7 @@ set(SRC
|
||||
FX/AUD_LimiterReader.h
|
||||
FX/AUD_LoopFactory.h
|
||||
FX/AUD_LoopReader.h
|
||||
FX/AUD_LowpassCalculator.h
|
||||
FX/AUD_LowpassFactory.h
|
||||
FX/AUD_PingPongFactory.h
|
||||
FX/AUD_PitchFactory.h
|
||||
|
5
intern/audaspace/FX/AUD_BandpassCalculator.cpp
Normal file
5
intern/audaspace/FX/AUD_BandpassCalculator.cpp
Normal file
@ -0,0 +1,5 @@
|
||||
#include "AUD_BandpassCalculator.h"
|
||||
|
||||
AUD_BandpassCalculator::AUD_BandpassCalculator()
|
||||
{
|
||||
}
|
10
intern/audaspace/FX/AUD_BandpassCalculator.h
Normal file
10
intern/audaspace/FX/AUD_BandpassCalculator.h
Normal file
@ -0,0 +1,10 @@
|
||||
#ifndef AUD_BANDPASSCALCULATOR_H
|
||||
#define AUD_BANDPASSCALCULATOR_H
|
||||
|
||||
class AUD_BandpassCalculator
|
||||
{
|
||||
public:
|
||||
AUD_BandpassCalculator();
|
||||
};
|
||||
|
||||
#endif // AUD_BANDPASSCALCULATOR_H
|
38
intern/audaspace/FX/AUD_ButterworthCalculator.cpp
Normal file
38
intern/audaspace/FX/AUD_ButterworthCalculator.cpp
Normal file
@ -0,0 +1,38 @@
|
||||
#include "AUD_ButterworthCalculator.h"
|
||||
|
||||
#include <cmath>
|
||||
|
||||
#ifndef M_PI
|
||||
#define M_PI 3.14159265358979323846
|
||||
#endif
|
||||
|
||||
#define BWPB41 0.76536686473
|
||||
#define BWPB42 1.84775906502
|
||||
|
||||
AUD_ButterworthCalculator::AUD_ButterworthCalculator(float frequency) :
|
||||
m_frequency(frequency)
|
||||
{
|
||||
}
|
||||
|
||||
void AUD_ButterworthCalculator::recalculateCoefficients(AUD_SampleRate rate, std::vector<float> &b, std::vector<float> &a)
|
||||
{
|
||||
float omega = 2 * tan(m_frequency * M_PI / rate);
|
||||
float o2 = omega * omega;
|
||||
float o4 = o2 * o2;
|
||||
float x1 = o2 + 2.0f * (float)BWPB41 * omega + 4.0f;
|
||||
float x2 = o2 + 2.0f * (float)BWPB42 * omega + 4.0f;
|
||||
float y1 = o2 - 2.0f * (float)BWPB41 * omega + 4.0f;
|
||||
float y2 = o2 - 2.0f * (float)BWPB42 * omega + 4.0f;
|
||||
float o228 = 2.0f * o2 - 8.0f;
|
||||
float norm = x1 * x2;
|
||||
a.push_back(1);
|
||||
a.push_back((x1 + x2) * o228 / norm);
|
||||
a.push_back((x1 * y2 + x2 * y1 + o228 * o228) / norm);
|
||||
a.push_back((y1 + y2) * o228 / norm);
|
||||
a.push_back(y1 * y2 / norm);
|
||||
b.push_back(o4 / norm);
|
||||
b.push_back(4 * o4 / norm);
|
||||
b.push_back(6 * o4 / norm);
|
||||
b.push_back(b[1]);
|
||||
b.push_back(b[0]);
|
||||
}
|
20
intern/audaspace/FX/AUD_ButterworthCalculator.h
Normal file
20
intern/audaspace/FX/AUD_ButterworthCalculator.h
Normal file
@ -0,0 +1,20 @@
|
||||
#ifndef AUD_BUTTERWORTHCALCULATOR_H
|
||||
#define AUD_BUTTERWORTHCALCULATOR_H
|
||||
|
||||
#include "AUD_IDynamicIIRFilterCalculator.h"
|
||||
|
||||
class AUD_ButterworthCalculator : public AUD_IDynamicIIRFilterCalculator
|
||||
{
|
||||
private:
|
||||
/**
|
||||
* The attack value in seconds.
|
||||
*/
|
||||
const float m_frequency;
|
||||
|
||||
public:
|
||||
AUD_ButterworthCalculator(float frequency);
|
||||
|
||||
virtual void recalculateCoefficients(AUD_SampleRate rate, std::vector<float> &b, std::vector<float> &a);
|
||||
};
|
||||
|
||||
#endif // AUD_BUTTERWORTHCALCULATOR_H
|
@ -29,44 +29,11 @@
|
||||
|
||||
#include "AUD_ButterworthFactory.h"
|
||||
#include "AUD_IIRFilterReader.h"
|
||||
|
||||
#include <cmath>
|
||||
|
||||
#ifndef M_PI
|
||||
#define M_PI 3.14159265358979323846
|
||||
#endif
|
||||
|
||||
#define BWPB41 0.76536686473
|
||||
#define BWPB42 1.84775906502
|
||||
#include "AUD_ButterworthCalculator.h"
|
||||
|
||||
AUD_ButterworthFactory::AUD_ButterworthFactory(boost::shared_ptr<AUD_IFactory> factory,
|
||||
float frequency) :
|
||||
AUD_DynamicIIRFilterFactory(factory),
|
||||
m_frequency(frequency)
|
||||
AUD_DynamicIIRFilterFactory(factory, boost::shared_ptr<AUD_IDynamicIIRFilterCalculator>(new AUD_ButterworthCalculator(frequency)))
|
||||
{
|
||||
}
|
||||
|
||||
void AUD_ButterworthFactory::recalculateCoefficients(AUD_SampleRate rate,
|
||||
std::vector<float> &b,
|
||||
std::vector<float> &a)
|
||||
{
|
||||
float omega = 2 * tan(m_frequency * M_PI / rate);
|
||||
float o2 = omega * omega;
|
||||
float o4 = o2 * o2;
|
||||
float x1 = o2 + 2.0f * (float)BWPB41 * omega + 4.0f;
|
||||
float x2 = o2 + 2.0f * (float)BWPB42 * omega + 4.0f;
|
||||
float y1 = o2 - 2.0f * (float)BWPB41 * omega + 4.0f;
|
||||
float y2 = o2 - 2.0f * (float)BWPB42 * omega + 4.0f;
|
||||
float o228 = 2.0f * o2 - 8.0f;
|
||||
float norm = x1 * x2;
|
||||
a.push_back(1);
|
||||
a.push_back((x1 + x2) * o228 / norm);
|
||||
a.push_back((x1 * y2 + x2 * y1 + o228 * o228) / norm);
|
||||
a.push_back((y1 + y2) * o228 / norm);
|
||||
a.push_back(y1 * y2 / norm);
|
||||
b.push_back(o4 / norm);
|
||||
b.push_back(4 * o4 / norm);
|
||||
b.push_back(6 * o4 / norm);
|
||||
b.push_back(b[1]);
|
||||
b.push_back(b[0]);
|
||||
}
|
||||
|
@ -38,11 +38,6 @@
|
||||
class AUD_ButterworthFactory : public AUD_DynamicIIRFilterFactory
|
||||
{
|
||||
private:
|
||||
/**
|
||||
* The attack value in seconds.
|
||||
*/
|
||||
const float m_frequency;
|
||||
|
||||
// hide copy constructor and operator=
|
||||
AUD_ButterworthFactory(const AUD_ButterworthFactory&);
|
||||
AUD_ButterworthFactory& operator=(const AUD_ButterworthFactory&);
|
||||
@ -54,10 +49,6 @@ public:
|
||||
* \param frequency The cutoff frequency.
|
||||
*/
|
||||
AUD_ButterworthFactory(boost::shared_ptr<AUD_IFactory> factory, float frequency);
|
||||
|
||||
virtual void recalculateCoefficients(AUD_SampleRate rate,
|
||||
std::vector<float>& b,
|
||||
std::vector<float>& a);
|
||||
};
|
||||
|
||||
#endif //__AUD_BUTTERWORTHFACTORY_H__
|
||||
|
@ -30,8 +30,10 @@
|
||||
#include "AUD_DynamicIIRFilterReader.h"
|
||||
|
||||
|
||||
AUD_DynamicIIRFilterFactory::AUD_DynamicIIRFilterFactory(boost::shared_ptr<AUD_IFactory> factory) :
|
||||
AUD_EffectFactory(factory)
|
||||
AUD_DynamicIIRFilterFactory::AUD_DynamicIIRFilterFactory(boost::shared_ptr<AUD_IFactory> factory,
|
||||
boost::shared_ptr<AUD_IDynamicIIRFilterCalculator> calculator) :
|
||||
AUD_EffectFactory(factory),
|
||||
m_calculator(calculator)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -49,7 +49,8 @@ public:
|
||||
* Creates a new Dynmic IIR filter factory.
|
||||
* \param factory The input factory.
|
||||
*/
|
||||
AUD_DynamicIIRFilterFactory(boost::shared_ptr<AUD_IFactory> factory);
|
||||
AUD_DynamicIIRFilterFactory(boost::shared_ptr<AUD_IFactory> factory,
|
||||
boost::shared_ptr<AUD_IDynamicIIRFilterCalculator> calculator);
|
||||
|
||||
virtual boost::shared_ptr<AUD_IReader> createReader();
|
||||
};
|
||||
|
27
intern/audaspace/FX/AUD_HighpassCalculator.cpp
Normal file
27
intern/audaspace/FX/AUD_HighpassCalculator.cpp
Normal file
@ -0,0 +1,27 @@
|
||||
#include "AUD_HighpassCalculator.h"
|
||||
|
||||
#include <cmath>
|
||||
|
||||
#ifndef M_PI
|
||||
#define M_PI 3.14159265358979323846
|
||||
#endif
|
||||
|
||||
AUD_HighpassCalculator::AUD_HighpassCalculator(float frequency, float Q) :
|
||||
m_frequency(frequency),
|
||||
m_Q(Q)
|
||||
{
|
||||
}
|
||||
|
||||
void AUD_HighpassCalculator::recalculateCoefficients(AUD_SampleRate rate, std::vector<float> &b, std::vector<float> &a)
|
||||
{
|
||||
float w0 = 2.0 * M_PI * (AUD_SampleRate)m_frequency / rate;
|
||||
float alpha = (float)(sin(w0) / (2.0 * (double)m_Q));
|
||||
float norm = 1 + alpha;
|
||||
float c = cos(w0);
|
||||
a.push_back(1);
|
||||
a.push_back(-2 * c / norm);
|
||||
a.push_back((1 - alpha) / norm);
|
||||
b.push_back((1 + c) / (2 * norm));
|
||||
b.push_back((-1 - c) / norm);
|
||||
b.push_back(b[0]);
|
||||
}
|
25
intern/audaspace/FX/AUD_HighpassCalculator.h
Normal file
25
intern/audaspace/FX/AUD_HighpassCalculator.h
Normal file
@ -0,0 +1,25 @@
|
||||
#ifndef AUD_HIGHPASSCALCULATOR_H
|
||||
#define AUD_HIGHPASSCALCULATOR_H
|
||||
|
||||
#include "AUD_IDynamicIIRFilterCalculator.h"
|
||||
|
||||
class AUD_HighpassCalculator : public AUD_IDynamicIIRFilterCalculator
|
||||
{
|
||||
private:
|
||||
/**
|
||||
* The cutoff frequency.
|
||||
*/
|
||||
const float m_frequency;
|
||||
|
||||
/**
|
||||
* The Q factor.
|
||||
*/
|
||||
const float m_Q;
|
||||
|
||||
public:
|
||||
AUD_HighpassCalculator(float frequency, float Q);
|
||||
|
||||
virtual void recalculateCoefficients(AUD_SampleRate rate, std::vector<float> &b, std::vector<float> &a);
|
||||
};
|
||||
|
||||
#endif // AUD_HIGHPASSCALCULATOR_H
|
@ -29,33 +29,11 @@
|
||||
|
||||
#include "AUD_HighpassFactory.h"
|
||||
#include "AUD_IIRFilterReader.h"
|
||||
|
||||
#include <cmath>
|
||||
|
||||
#ifndef M_PI
|
||||
#define M_PI 3.14159265358979323846
|
||||
#endif
|
||||
#include "AUD_HighpassCalculator.h"
|
||||
|
||||
AUD_HighpassFactory::AUD_HighpassFactory(boost::shared_ptr<AUD_IFactory> factory, float frequency,
|
||||
float Q) :
|
||||
AUD_DynamicIIRFilterFactory(factory),
|
||||
m_frequency(frequency),
|
||||
m_Q(Q)
|
||||
AUD_DynamicIIRFilterFactory(factory, boost::shared_ptr<AUD_IDynamicIIRFilterCalculator>(new AUD_HighpassCalculator(frequency, Q)))
|
||||
{
|
||||
}
|
||||
|
||||
void AUD_HighpassFactory::recalculateCoefficients(AUD_SampleRate rate,
|
||||
std::vector<float> &b,
|
||||
std::vector<float> &a)
|
||||
{
|
||||
float w0 = 2.0 * M_PI * (AUD_SampleRate)m_frequency / rate;
|
||||
float alpha = (float)(sin(w0) / (2.0 * (double)m_Q));
|
||||
float norm = 1 + alpha;
|
||||
float c = cos(w0);
|
||||
a.push_back(1);
|
||||
a.push_back(-2 * c / norm);
|
||||
a.push_back((1 - alpha) / norm);
|
||||
b.push_back((1 + c) / (2 * norm));
|
||||
b.push_back((-1 - c) / norm);
|
||||
b.push_back(b[0]);
|
||||
}
|
||||
|
@ -38,16 +38,6 @@
|
||||
class AUD_HighpassFactory : public AUD_DynamicIIRFilterFactory
|
||||
{
|
||||
private:
|
||||
/**
|
||||
* The cutoff frequency.
|
||||
*/
|
||||
const float m_frequency;
|
||||
|
||||
/**
|
||||
* The Q factor.
|
||||
*/
|
||||
const float m_Q;
|
||||
|
||||
// hide copy constructor and operator=
|
||||
AUD_HighpassFactory(const AUD_HighpassFactory&);
|
||||
AUD_HighpassFactory& operator=(const AUD_HighpassFactory&);
|
||||
@ -60,8 +50,6 @@ public:
|
||||
* \param Q The Q factor.
|
||||
*/
|
||||
AUD_HighpassFactory(boost::shared_ptr<AUD_IFactory> factory, float frequency, float Q = 1.0f);
|
||||
|
||||
virtual void recalculateCoefficients(AUD_SampleRate rate, std::vector<float> &b, std::vector<float> &a);
|
||||
};
|
||||
|
||||
#endif //__AUD_HIGHPASSFACTORY_H__
|
||||
|
@ -29,6 +29,8 @@
|
||||
#ifndef AUD_IDYNAMICIIRFILTERCALCULATOR_H
|
||||
#define AUD_IDYNAMICIIRFILTERCALCULATOR_H
|
||||
|
||||
#include "AUD_Space.h"
|
||||
|
||||
#include <vector>
|
||||
|
||||
/**
|
||||
|
27
intern/audaspace/FX/AUD_LowpassCalculator.cpp
Normal file
27
intern/audaspace/FX/AUD_LowpassCalculator.cpp
Normal file
@ -0,0 +1,27 @@
|
||||
#include "AUD_LowpassCalculator.h"
|
||||
|
||||
#include <cmath>
|
||||
|
||||
#ifndef M_PI
|
||||
#define M_PI 3.14159265358979323846
|
||||
#endif
|
||||
|
||||
AUD_LowpassCalculator::AUD_LowpassCalculator(float frequency, float Q) :
|
||||
m_frequency(frequency),
|
||||
m_Q(Q)
|
||||
{
|
||||
}
|
||||
|
||||
void AUD_LowpassCalculator::recalculateCoefficients(AUD_SampleRate rate, std::vector<float> &b, std::vector<float> &a)
|
||||
{
|
||||
float w0 = 2 * M_PI * m_frequency / rate;
|
||||
float alpha = sin(w0) / (2 * m_Q);
|
||||
float norm = 1 + alpha;
|
||||
float c = cos(w0);
|
||||
a.push_back(1);
|
||||
a.push_back(-2 * c / norm);
|
||||
a.push_back((1 - alpha) / norm);
|
||||
b.push_back((1 - c) / (2 * norm));
|
||||
b.push_back((1 - c) / norm);
|
||||
b.push_back(b[0]);
|
||||
}
|
25
intern/audaspace/FX/AUD_LowpassCalculator.h
Normal file
25
intern/audaspace/FX/AUD_LowpassCalculator.h
Normal file
@ -0,0 +1,25 @@
|
||||
#ifndef AUD_LOWPASSCALCULATOR_H
|
||||
#define AUD_LOWPASSCALCULATOR_H
|
||||
|
||||
#include "AUD_IDynamicIIRFilterCalculator.h"
|
||||
|
||||
class AUD_LowpassCalculator : public AUD_IDynamicIIRFilterCalculator
|
||||
{
|
||||
private:
|
||||
/**
|
||||
* The cutoff frequency.
|
||||
*/
|
||||
const float m_frequency;
|
||||
|
||||
/**
|
||||
* The Q factor.
|
||||
*/
|
||||
const float m_Q;
|
||||
|
||||
public:
|
||||
AUD_LowpassCalculator(float frequency, float Q);
|
||||
|
||||
virtual void recalculateCoefficients(AUD_SampleRate rate, std::vector<float> &b, std::vector<float> &a);
|
||||
};
|
||||
|
||||
#endif // AUD_LOWPASSCALCULATOR_H
|
@ -29,33 +29,10 @@
|
||||
|
||||
#include "AUD_LowpassFactory.h"
|
||||
#include "AUD_IIRFilterReader.h"
|
||||
|
||||
#include <cmath>
|
||||
|
||||
#ifndef M_PI
|
||||
#define M_PI 3.14159265358979323846
|
||||
#endif
|
||||
#include "AUD_LowpassCalculator.h"
|
||||
|
||||
AUD_LowpassFactory::AUD_LowpassFactory(boost::shared_ptr<AUD_IFactory> factory, float frequency,
|
||||
float Q) :
|
||||
AUD_DynamicIIRFilterFactory(factory),
|
||||
m_frequency(frequency),
|
||||
m_Q(Q)
|
||||
AUD_DynamicIIRFilterFactory(factory, boost::shared_ptr<AUD_IDynamicIIRFilterCalculator>(new AUD_LowpassCalculator(frequency, Q)))
|
||||
{
|
||||
}
|
||||
|
||||
void AUD_LowpassFactory::recalculateCoefficients(AUD_SampleRate rate,
|
||||
std::vector<float> &b,
|
||||
std::vector<float> &a)
|
||||
{
|
||||
float w0 = 2 * M_PI * m_frequency / rate;
|
||||
float alpha = sin(w0) / (2 * m_Q);
|
||||
float norm = 1 + alpha;
|
||||
float c = cos(w0);
|
||||
a.push_back(1);
|
||||
a.push_back(-2 * c / norm);
|
||||
a.push_back((1 - alpha) / norm);
|
||||
b.push_back((1 - c) / (2 * norm));
|
||||
b.push_back((1 - c) / norm);
|
||||
b.push_back(b[0]);
|
||||
}
|
||||
|
@ -38,16 +38,6 @@
|
||||
class AUD_LowpassFactory : public AUD_DynamicIIRFilterFactory
|
||||
{
|
||||
private:
|
||||
/**
|
||||
* The cutoff frequency.
|
||||
*/
|
||||
const float m_frequency;
|
||||
|
||||
/**
|
||||
* The Q factor.
|
||||
*/
|
||||
const float m_Q;
|
||||
|
||||
// hide copy constructor and operator=
|
||||
AUD_LowpassFactory(const AUD_LowpassFactory&);
|
||||
AUD_LowpassFactory& operator=(const AUD_LowpassFactory&);
|
||||
@ -60,8 +50,6 @@ public:
|
||||
* \param Q The Q factor.
|
||||
*/
|
||||
AUD_LowpassFactory(boost::shared_ptr<AUD_IFactory> factory, float frequency, float Q = 1.0f);
|
||||
|
||||
virtual void recalculateCoefficients(AUD_SampleRate rate, std::vector<float> &b, std::vector<float> &a);
|
||||
};
|
||||
|
||||
#endif //__AUD_LOWPASSFACTORY_H__
|
||||
|
Loading…
Reference in New Issue
Block a user