summaryrefslogtreecommitdiff
path: root/muse_qt4_evolution/synti/zynaddsubfx/DSP/AnalogFilter.h
diff options
context:
space:
mode:
Diffstat (limited to 'muse_qt4_evolution/synti/zynaddsubfx/DSP/AnalogFilter.h')
-rw-r--r--muse_qt4_evolution/synti/zynaddsubfx/DSP/AnalogFilter.h72
1 files changed, 72 insertions, 0 deletions
diff --git a/muse_qt4_evolution/synti/zynaddsubfx/DSP/AnalogFilter.h b/muse_qt4_evolution/synti/zynaddsubfx/DSP/AnalogFilter.h
new file mode 100644
index 00000000..2e9fe68b
--- /dev/null
+++ b/muse_qt4_evolution/synti/zynaddsubfx/DSP/AnalogFilter.h
@@ -0,0 +1,72 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Analog Filter.h - Several analog filters (lowpass, highpass...)
+ 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) 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 ANALOG_FILTER_H
+#define ANALOG_FILTER_H
+
+#include "../globals.h"
+#include "Filter_.h"
+class AnalogFilter:public Filter_{
+ public:
+ AnalogFilter(unsigned char Ftype,REALTYPE Ffreq, REALTYPE Fq,unsigned char Fstages);
+ ~AnalogFilter();
+ void filterout(REALTYPE *smp);
+ void setfreq(REALTYPE frequency);
+ void setfreq_and_q(REALTYPE frequency,REALTYPE q_);
+ void setq(REALTYPE q_);
+
+ void settype(int type_);
+ void setgain(REALTYPE dBgain);
+ void setstages(int stages_);
+ void cleanup();
+
+ REALTYPE H(REALTYPE freq);//Obtains the response for a given frequency
+
+ private:
+ struct fstage{
+ REALTYPE c1,c2;
+ } x[MAX_FILTER_STAGES+1],y[MAX_FILTER_STAGES+1],
+ oldx[MAX_FILTER_STAGES+1],oldy[MAX_FILTER_STAGES+1];
+
+ void singlefilterout(REALTYPE *smp,fstage &x,fstage &y,REALTYPE *c,REALTYPE *d);
+ void computefiltercoefs();
+ int type;//The type of the filter (LPF1,HPF1,LPF2,HPF2...)
+ int stages;//how many times the filter is applied (0->1,1->2,etc.)
+ REALTYPE freq;//Frequency given in Hz
+ REALTYPE q; //Q factor (resonance or Q factor)
+ REALTYPE gain;//the gain of the filter (if are shelf/peak) filters
+
+ int order;//the order of the filter (number of poles)
+
+ REALTYPE c[3],d[3];//coefficients
+
+ REALTYPE oldc[3],oldd[3];//old coefficients(used only if some filter paremeters changes very fast, and it needs interpolation)
+
+ REALTYPE xd[3],yd[3];//used if the filter is applied more times
+ int needsinterpolation,firsttime;
+ int abovenq;//this is 1 if the frequency is above the nyquist
+ int oldabovenq;//if the last time was above nyquist (used to see if it needs interpolation)
+};
+
+
+#endif
+