36 #ifndef DSPFILTERS_FILTER_H
37 #define DSPFILTERS_FILTER_H
40 #include "MathSupplement.h"
60 virtual Kind getKind ()
const = 0;
62 virtual const std::string getName ()
const = 0;
64 virtual int getNumParams ()
const = 0;
66 virtual ParamInfo getParamInfo (
int index)
const = 0;
68 Params getDefaultParams()
const;
70 const Params& getParams()
const
75 double getParam (
int paramIndex)
const
77 assert (paramIndex >= 0 && paramIndex <= getNumParams());
78 return m_params[paramIndex];
81 void setParam (
int paramIndex,
double nativeValue)
83 assert (paramIndex >= 0 && paramIndex <= getNumParams());
84 m_params[paramIndex] = nativeValue;
85 doSetParams (m_params);
88 int findParamId (
int paramId);
90 void setParamById (
int paramId,
double nativeValue);
92 void setParams (
const Params& parameters)
94 m_params = parameters;
95 doSetParams (parameters);
103 virtual std::vector<PoleZeroPair> getPoleZeros()
const = 0;
105 virtual complex_t response (
double normalizedFrequency)
const = 0;
107 virtual int getNumChannels() = 0;
108 virtual void reset () = 0;
109 virtual void process (
int numSamples,
float*
const* arrayOfChannels) = 0;
110 virtual void process (
int numSamples,
double*
const* arrayOfChannels) = 0;
113 virtual void doSetParams (
const Params& parameters) = 0;
131 template <
class DesignClass>
135 Kind getKind ()
const
137 return m_design.getKind ();
140 const std::string getName ()
const
142 return m_design.getName ();
145 int getNumParams ()
const
147 return DesignClass::NumParams;
150 Params getDefaultParams()
const
152 return m_design.getDefaultParams();
159 case 0:
return m_design.getParamInfo_0 ();
160 case 1:
return m_design.getParamInfo_1 ();
161 case 2:
return m_design.getParamInfo_2 ();
162 case 3:
return m_design.getParamInfo_3 ();
163 case 4:
return m_design.getParamInfo_4 ();
164 case 5:
return m_design.getParamInfo_5 ();
165 case 6:
return m_design.getParamInfo_6 ();
166 case 7:
return m_design.getParamInfo_7 ();
172 std::vector<PoleZeroPair> getPoleZeros()
const
174 return m_design.getPoleZeros();
177 complex_t response (
double normalizedFrequency)
const
179 return m_design.response (normalizedFrequency);
183 void doSetParams (
const Params& parameters)
185 m_design.setParams (parameters);
189 DesignClass m_design;
194 template <
class DesignClass,
214 void process (
int numSamples,
float*
const* arrayOfChannels)
216 m_state.process (numSamples, arrayOfChannels,
220 void process (
int numSamples,
double*
const* arrayOfChannels)
222 m_state.process (numSamples, arrayOfChannels,
228 typename DesignClass::template State <StateType> > m_state;
240 template <
class FilterClass,
256 template <
typename Sample>
257 void process (
int numSamples, Sample*
const* arrayOfChannels)
259 m_state.process (numSamples, arrayOfChannels, *((FilterClass*)
this));
264 typename FilterClass::template State <StateType> > m_state;