commit 07eeb4f54f8a9a3e8ca9b1872d90e4095c6aabc2
parent 158fc8a962b107cc9f97ffe93687e5958b6ae085
Author: fundamental <[email protected]>
Date: Sat, 9 Jul 2011 17:13:25 -0400
Removing Filter_.h
Baseclass for Filters is now 'Filter'
Diffstat:
20 files changed, 49 insertions(+), 115 deletions(-)
diff --git a/src/DSP/AnalogFilter.h b/src/DSP/AnalogFilter.h
@@ -26,12 +26,12 @@
#define ANALOG_FILTER_H
#include "../globals.h"
-#include "Filter_.h"
+#include "Filter.h"
/**Implementation of Several analog filters (lowpass, highpass...)
* Implemented with IIR filters
* Coefficients generated with "Cookbook formulae for audio EQ"*/
-class AnalogFilter:public Filter_
+class AnalogFilter:public Filter
{
public:
AnalogFilter(unsigned char Ftype,
diff --git a/src/DSP/Filter.cpp b/src/DSP/Filter.cpp
@@ -24,17 +24,17 @@
#include <stdio.h>
#include "Filter.h"
-#include "Filter_.h"
#include "AnalogFilter.h"
#include "FormantFilter.h"
#include "SVFilter.h"
#include "../Params/FilterParams.h"
-Filter::Filter(FilterParams *pars)
+Filter *Filter::generate(FilterParams *pars)
{
unsigned char Ftype = pars->Ptype;
unsigned char Fstages = pars->Pstages;
+ Filter *filter;
switch(pars->Pcategory) {
case 1:
filter = new FormantFilter(pars);
@@ -53,31 +53,7 @@ Filter::Filter(FilterParams *pars)
filter->outgain = dB2rap(pars->getgain());
break;
}
-}
-
-Filter::~Filter()
-{
- delete (filter);
-}
-
-void Filter::filterout(float *smp)
-{
- filter->filterout(smp);
-}
-
-void Filter::setfreq(float frequency)
-{
- filter->setfreq(frequency);
-}
-
-void Filter::setfreq_and_q(float frequency, float q_)
-{
- filter->setfreq_and_q(frequency, q_);
-}
-
-void Filter::setq(float q_)
-{
- filter->setq(q_);
+ return filter;
}
float Filter::getrealfreq(float freqpitch)
diff --git a/src/DSP/Filter.h b/src/DSP/Filter.h
@@ -28,16 +28,18 @@
class Filter
{
public:
- Filter(class FilterParams *pars);
- ~Filter();
- void filterout(float *smp);
- void setfreq(float frequency);
- void setfreq_and_q(float frequency, float q_);
- void setq(float q_);
-
static float getrealfreq(float freqpitch);
- private:
- class Filter_ *filter;
+ static Filter *generate(class FilterParams *pars);
+
+ virtual ~Filter() {}
+ virtual void filterout(float *smp) = 0;
+ virtual void setfreq(float frequency) = 0;
+ virtual void setfreq_and_q(float frequency, float q_) = 0;
+ virtual void setq(float q_) = 0;
+ virtual void setgain(float dBgain) = 0;
+
+ protected:
+ float outgain;
};
#endif
diff --git a/src/DSP/Filter_.h b/src/DSP/Filter_.h
@@ -1,43 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Filter_.h - This class is inherited by filter classes
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- as published by the Free Software Foundation.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef FILTER__H
-#define FILTER__H
-
-#include "../globals.h"
-
-class Filter_
-{
- public:
- virtual ~Filter_() {}
- virtual void filterout(float *smp) = 0;
- virtual void setfreq(float frequency) = 0;
- virtual void setfreq_and_q(float frequency, float q_) = 0;
- virtual void setq(float q_) = 0;
- virtual void setgain(float dBgain) = 0;
- float outgain;
- private:
-};
-
-
-#endif
-
diff --git a/src/DSP/FormantFilter.cpp b/src/DSP/FormantFilter.cpp
@@ -24,6 +24,8 @@
#include <cstdio>
#include "../Misc/Util.h"
#include "FormantFilter.h"
+#include "AnalogFilter.h"
+#include "../Params/FilterParams.h"
FormantFilter::FormantFilter(FilterParams *pars)
{
diff --git a/src/DSP/FormantFilter.h b/src/DSP/FormantFilter.h
@@ -24,15 +24,13 @@
#define FORMANT_FILTER_H
#include "../globals.h"
-#include "Filter_.h"
-#include "AnalogFilter.h"
-#include "../Params/FilterParams.h"
+#include "Filter.h"
-class FormantFilter:public Filter_
+class FormantFilter:public Filter
{
public:
- FormantFilter(FilterParams *pars);
+ FormantFilter(class FilterParams *pars);
~FormantFilter();
void filterout(float *smp);
void setfreq(float frequency);
@@ -42,7 +40,7 @@ class FormantFilter:public Filter_
void cleanup();
private:
- AnalogFilter *formant[FF_MAX_FORMANTS];
+ class AnalogFilter *formant[FF_MAX_FORMANTS];
struct {
float freq, amp, q; //frequency,amplitude,Q
@@ -63,6 +61,5 @@ class FormantFilter:public Filter_
void setpos(float input);
};
-
#endif
diff --git a/src/DSP/SVFilter.h b/src/DSP/SVFilter.h
@@ -24,8 +24,8 @@
#define SV_FILTER_H
#include "../globals.h"
-#include "Filter_.h"
-class SVFilter:public Filter_
+#include "Filter.h"
+class SVFilter:public Filter
{
public:
SVFilter(unsigned char Ftype,
diff --git a/src/Effects/Distorsion.cpp b/src/Effects/Distorsion.cpp
@@ -21,6 +21,7 @@
*/
#include <cmath>
+#include "../DSP/AnalogFilter.h"
#include "Distorsion.h"
diff --git a/src/Effects/Distorsion.h b/src/Effects/Distorsion.h
@@ -24,7 +24,6 @@
#define DISTORSION_H
#include "../globals.h"
-#include "../DSP/AnalogFilter.h"
#include "Effect.h"
//Waveshaping(called by Distorsion effect and waveshape from OscilGen)
@@ -67,7 +66,7 @@ class Distorsion:public Effect
//Real Parameters
float panning, lrcross;
- AnalogFilter *lpfl, *lpfr, *hpfl, *hpfr;
+ class AnalogFilter *lpfl, *lpfr, *hpfl, *hpfr;
};
diff --git a/src/Effects/DynamicFilter.cpp b/src/Effects/DynamicFilter.cpp
@@ -22,6 +22,7 @@
#include <cmath>
#include "DynamicFilter.h"
+#include "../DSP/Filter.h"
DynamicFilter::DynamicFilter(int insertion_,
float *efxoutl_,
@@ -147,8 +148,8 @@ void DynamicFilter::reinitfilter()
delete (filterl);
if(filterr != NULL)
delete (filterr);
- filterl = new Filter(filterpars);
- filterr = new Filter(filterpars);
+ filterl = Filter::generate(filterpars);
+ filterr = Filter::generate(filterpars);
}
void DynamicFilter::setpreset(unsigned char npreset)
diff --git a/src/Effects/DynamicFilter.h b/src/Effects/DynamicFilter.h
@@ -26,7 +26,6 @@
#include "Effect.h"
#include "EffectLFO.h"
-#include "../DSP/Filter.h"
/**DynamicFilter Effect*/
class DynamicFilter:public Effect
{
@@ -61,7 +60,7 @@ class DynamicFilter:public Effect
//Internal Values
float panning, depth, ampsns, ampsmooth;
- Filter *filterl, *filterr;
+ class Filter *filterl, *filterr;
float ms1, ms2, ms3, ms4; //mean squares
};
diff --git a/src/Effects/EQ.cpp b/src/Effects/EQ.cpp
@@ -22,6 +22,7 @@
#include <cmath>
#include "EQ.h"
+#include "../DSP/AnalogFilter.h"
EQ::EQ(const int &insertion_, float *efxoutl_, float *efxoutr_)
:Effect(insertion_, efxoutl_, efxoutr_, NULL, 0)
diff --git a/src/Effects/EQ.h b/src/Effects/EQ.h
@@ -24,7 +24,6 @@
#define EQ_H
#include "../globals.h"
-#include "../DSP/AnalogFilter.h"
#include "Effect.h"
/**EQ Effect*/
@@ -49,7 +48,7 @@ class EQ:public Effect
//parameters
unsigned char Ptype, Pfreq, Pgain, Pq, Pstages;
//internal values
- AnalogFilter *l, *r;
+ class AnalogFilter *l, *r;
} filter[MAX_EQ_BANDS];
};
diff --git a/src/Effects/Reverb.cpp b/src/Effects/Reverb.cpp
@@ -23,6 +23,7 @@
#include <cmath>
#include "Reverb.h"
#include "../Misc/Util.h"
+#include "../DSP/AnalogFilter.h"
/**\todo: EarlyReflections,Prdelay,Perbalance */
diff --git a/src/Effects/Reverb.h b/src/Effects/Reverb.h
@@ -25,7 +25,6 @@
#include <math.h>
#include "../globals.h"
-#include "../DSP/AnalogFilter.h"
#include "../DSP/FFTwrapper.h"
#include "../DSP/Unison.h"
#include "Effect.h"
@@ -125,7 +124,7 @@ class Reverb:public Effect
int apk[REV_APS * 2];
float *idelay;
- AnalogFilter *lpf, *hpf; //filters
+ class AnalogFilter *lpf, *hpf; //filters
void processmono(int ch, float *output, float *inputbuf);
};
diff --git a/src/Synth/ADnote.cpp b/src/Synth/ADnote.cpp
@@ -26,6 +26,7 @@
#include "../globals.h"
#include "../Misc/Util.h"
+#include "../DSP/Filter.h"
#include "OscilGen.h"
#include "ADnote.h"
@@ -761,8 +762,8 @@ void ADnote::initparameters()
/* Voice Filter Parameters Init */
if(param.PFilterEnabled != 0) {
- vce.VoiceFilterL = new Filter(param.VoiceFilter);
- vce.VoiceFilterR = new Filter(param.VoiceFilter);
+ vce.VoiceFilterL = Filter::generate(param.VoiceFilter);
+ vce.VoiceFilterR = Filter::generate(param.VoiceFilter);
}
if(param.PFilterEnvelopeEnabled != 0)
@@ -1795,9 +1796,9 @@ void ADnote::Global::initparameters(const ADnoteGlobalParam ¶m,
Volume = 4.0 * pow(0.1, 3.0 * (1.0 - param.PVolume / 96.0)) //-60 dB .. 0 dB
* VelF(velocity, param.PAmpVelocityScaleFunction); //sensing
- GlobalFilterL = new Filter(param.GlobalFilter);
+ GlobalFilterL = Filter::generate(param.GlobalFilter);
if(stereo)
- GlobalFilterR = new Filter(param.GlobalFilter);
+ GlobalFilterR = Filter::generate(param.GlobalFilter);
FilterEnvelope = new Envelope(param.FilterEnvelope, basefreq);
FilterLfo = new LFO(param.FilterLfo, basefreq);
diff --git a/src/Synth/ADnote.h b/src/Synth/ADnote.h
@@ -26,7 +26,6 @@
#include "SynthNote.h"
#include "Envelope.h"
#include "LFO.h"
-#include "../DSP/Filter.h"
#include "../Params/ADnoteParameters.h"
#include "../Params/Controller.h"
@@ -156,7 +155,7 @@ class ADnote :public SynthNote
/******************************************
* FILTER GLOBAL PARAMETERS *
******************************************/
- Filter *GlobalFilterL, *GlobalFilterR;
+ class Filter *GlobalFilterL, *GlobalFilterR;
float FilterCenterPitch; //octaves
float FilterQ;
@@ -218,8 +217,8 @@ class ADnote :public SynthNote
* FILTER PARAMETERS *
*************************/
- Filter *VoiceFilterL;
- Filter *VoiceFilterR;
+ class Filter *VoiceFilterL;
+ class Filter *VoiceFilterR;
float FilterCenterPitch; /* Filter center Pitch*/
float FilterFreqTracking;
diff --git a/src/Synth/PADnote.cpp b/src/Synth/PADnote.cpp
@@ -21,6 +21,7 @@
#include <math.h>
#include "PADnote.h"
#include "../Misc/Config.h"
+#include "../DSP/Filter.h"
PADnote::PADnote(PADnoteParameters *parameters,
Controller *ctl_,
@@ -144,8 +145,8 @@ void PADnote::setup(float freq, float velocity,int portamento_, int midinote, bo
* NoteGlobalPar.AmpLfo->amplfoout();
if(!legato) {
- NoteGlobalPar.GlobalFilterL = new Filter(pars->GlobalFilter);
- NoteGlobalPar.GlobalFilterR = new Filter(pars->GlobalFilter);
+ NoteGlobalPar.GlobalFilterL = Filter::generate(pars->GlobalFilter);
+ NoteGlobalPar.GlobalFilterR = Filter::generate(pars->GlobalFilter);
NoteGlobalPar.FilterEnvelope = new Envelope(pars->FilterEnvelope,
basefreq);
diff --git a/src/Synth/PADnote.h b/src/Synth/PADnote.h
@@ -27,7 +27,6 @@
#include "../Params/Controller.h"
#include "Envelope.h"
#include "LFO.h"
-#include "../DSP/Filter.h"
#include "../Params/Controller.h"
/**The "pad" synthesizer*/
@@ -102,7 +101,7 @@ class PADnote :public SynthNote
/******************************************
* FILTER GLOBAL PARAMETERS *
******************************************/
- Filter *GlobalFilterL, *GlobalFilterR;
+ class Filter *GlobalFilterL, *GlobalFilterR;
float FilterCenterPitch; //octaves
float FilterQ;
diff --git a/src/Synth/SUBnote.cpp b/src/Synth/SUBnote.cpp
@@ -356,9 +356,9 @@ void SUBnote::initparameters(float freq)
BandWidthEnvelope = NULL;
if(pars->PGlobalFilterEnabled != 0) {
globalfiltercenterq = pars->GlobalFilter->getq();
- GlobalFilterL = new Filter(pars->GlobalFilter);
- if(stereo != 0)
- GlobalFilterR = new Filter(pars->GlobalFilter);
+ GlobalFilterL = Filter::generate(pars->GlobalFilter);
+ if(stereo)
+ GlobalFilterR = Filter::generate(pars->GlobalFilter);
GlobalFilterEnvelope = new Envelope(pars->GlobalFilterEnvelope,
freq);
GlobalFilterFreqTracking = pars->GlobalFilter->getfreqtracking(basefreq);