diff options
Diffstat (limited to 'intern/audaspace/FX/AUD_SquareFactory.cpp')
-rw-r--r-- | intern/audaspace/FX/AUD_SquareFactory.cpp | 45 |
1 files changed, 25 insertions, 20 deletions
diff --git a/intern/audaspace/FX/AUD_SquareFactory.cpp b/intern/audaspace/FX/AUD_SquareFactory.cpp index 638acaa9a32..c321a13d79a 100644 --- a/intern/audaspace/FX/AUD_SquareFactory.cpp +++ b/intern/audaspace/FX/AUD_SquareFactory.cpp @@ -24,34 +24,39 @@ */ #include "AUD_SquareFactory.h" -#include "AUD_SquareReader.h" +#include "AUD_CallbackIIRFilterReader.h" -AUD_SquareFactory::AUD_SquareFactory(AUD_IFactory* factory, float threshold) : - AUD_EffectFactory(factory), - m_threshold(threshold) {} - -AUD_SquareFactory::AUD_SquareFactory(float threshold) : - AUD_EffectFactory(0), - m_threshold(threshold) {} - -float AUD_SquareFactory::getThreshold() +sample_t squareFilter(AUD_CallbackIIRFilterReader* reader, float* threshold) { - return m_threshold; + float in = reader->x(0); + if(in >= *threshold) + return 1; + else if(in <= -*threshold) + return -1; + else + return 0; } -void AUD_SquareFactory::setThreshold(float threshold) +void endSquareFilter(float* threshold) { - m_threshold = threshold; + delete threshold; } -AUD_IReader* AUD_SquareFactory::createReader() +AUD_SquareFactory::AUD_SquareFactory(AUD_IFactory* factory, float threshold) : + AUD_EffectFactory(factory), + m_threshold(threshold) { - AUD_IReader* reader = getReader(); +} - if(reader != 0) - { - reader = new AUD_SquareReader(reader, m_threshold); AUD_NEW("reader") - } +float AUD_SquareFactory::getThreshold() const +{ + return m_threshold; +} - return reader; +AUD_IReader* AUD_SquareFactory::createReader() const +{ + return new AUD_CallbackIIRFilterReader(getReader(), 1, 1, + (doFilterIIR) squareFilter, + (endFilterIIR) endSquareFilter, + new float(m_threshold)); } |