zynaddsubfx

ZynAddSubFX open source synthesizer
Log | Files | Refs | Submodules | LICENSE

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:
Msrc/DSP/AnalogFilter.h | 4++--
Msrc/DSP/Filter.cpp | 30+++---------------------------
Msrc/DSP/Filter.h | 20+++++++++++---------
Dsrc/DSP/Filter_.h | 43-------------------------------------------
Msrc/DSP/FormantFilter.cpp | 2++
Msrc/DSP/FormantFilter.h | 11++++-------
Msrc/DSP/SVFilter.h | 4++--
Msrc/Effects/Distorsion.cpp | 1+
Msrc/Effects/Distorsion.h | 3+--
Msrc/Effects/DynamicFilter.cpp | 5+++--
Msrc/Effects/DynamicFilter.h | 3+--
Msrc/Effects/EQ.cpp | 1+
Msrc/Effects/EQ.h | 3+--
Msrc/Effects/Reverb.cpp | 1+
Msrc/Effects/Reverb.h | 3+--
Msrc/Synth/ADnote.cpp | 9+++++----
Msrc/Synth/ADnote.h | 7+++----
Msrc/Synth/PADnote.cpp | 5+++--
Msrc/Synth/PADnote.h | 3+--
Msrc/Synth/SUBnote.cpp | 6+++---
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 &param, 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);