00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef _SpectralFilterGen_
00024 #define _SpectralFilterGen_
00025
00026 #include "Processing.hxx"
00027 #include "ProcessingData.hxx"
00028 #include "OutPort.hxx"
00029 #include "InControl.hxx"
00030 #include "DataTypes.hxx"
00031 #include "Audio.hxx"
00032 #include "Spectrum.hxx"
00033 #include "Enum.hxx"
00034
00035 namespace CLAM {
00036
00037 class EFDFilterGenControls : public Enum
00038 {
00039 public:
00040
00041 EFDFilterGenControls() : Enum(ValueTable(), gain) { }
00042 EFDFilterGenControls(tValue v) : Enum(ValueTable(), v) { }
00043 EFDFilterGenControls(std::string s) : Enum(ValueTable(), s) { }
00044 ~EFDFilterGenControls() { };
00045
00046 Component * Species() const
00047 {
00048 return new EFDFilterGenControls;
00049 }
00050
00051 typedef enum
00052 {
00053 gain=0,
00054 highcutoff,
00055 lowcutoff,
00056 passbandslope,
00057 stopbandslope
00058 } tEnum;
00059
00060 static tEnumValue * ValueTable()
00061 {
00062 static tEnumValue sEnumValues[] =
00063 {
00064 { gain, "gain" },
00065 { highcutoff, "highcutoff" },
00066 { lowcutoff, "lowcutoff" },
00067 { passbandslope, "passbandslope" },
00068 { stopbandslope, "stopbandslope" },
00069 { 0, NULL }
00070 };
00071 return sEnumValues;
00072 }
00073 };
00074
00076 class EFDFilterType : public Enum
00077 {
00078 public:
00079
00080 EFDFilterType() : Enum(ValueTable(), eLowPass) {}
00081 EFDFilterType(tValue v) : Enum(ValueTable(), v) {};
00082 EFDFilterType(std::string s) : Enum(ValueTable(), s) {};
00083
00084 typedef enum {
00085 eLowPass,
00086 eHighPass,
00087 eBandPass,
00088 eStopBand
00089 };
00090
00091 virtual Component* Species() const
00092 {
00093
00094 return (Component*) new EFDFilterType(eLowPass);
00095 };
00096 static tEnumValue * ValueTable()
00097 {
00098 static tEnumValue sEnumValues[] = {
00099 {eLowPass,"Low-pass"},
00100 {eHighPass,"High-pass"},
00101 {eBandPass,"Band-pass"},
00102 {eStopBand,"Stop-Band"},
00103 {0,NULL}
00104 };
00105 return sEnumValues;
00106 }
00107 };
00108
00109
00111 class FDFilterGenConfig: public ProcessingConfig
00112 {
00113 public:
00114 DYNAMIC_TYPE_USING_INTERFACE (FDFilterGenConfig, 7, ProcessingConfig);
00115 DYN_ATTRIBUTE (0, public, EFDFilterType, Type);
00116 DYN_ATTRIBUTE (1, public, TData, SpectralRange);
00117 DYN_ATTRIBUTE (2, public, TData, Gain);
00118 DYN_ATTRIBUTE (3, public, TData, HighCutOff);
00119 DYN_ATTRIBUTE (4, public, TData, LowCutOff);
00120 DYN_ATTRIBUTE (5, public, TData, PassBandSlope);
00121 DYN_ATTRIBUTE (6, public, TData, StopBandSlope);
00122 protected:
00123 void DefaultInit(void);
00124 };
00125
00127 class FDFilterGen: public Processing
00128 {
00129 private:
00130 typedef InControlTmpl<FDFilterGen> FDFilterGenCtrl;
00131
00132 public:
00133 OutPort<Spectrum> Output;
00134
00135 FDFilterGenCtrl Gain;
00136 FDFilterGenCtrl HighCutOff;
00137 FDFilterGenCtrl LowCutOff;
00138 FDFilterGenCtrl PassBandSlope;
00139 FDFilterGenCtrl StopBandSlope;
00140
00141 private:
00142 TData SpectralRange;
00143 EFDFilterType Type;
00144
00145 FDFilterGenConfig mConfig;
00146
00147 bool mControlChanged;
00148 protected:
00149
00150
00151 int UpdateControlChangedFlag(TControlData);
00152
00153
00154 public:
00155
00156 FDFilterGen();
00157
00161 FDFilterGen(const FDFilterGenConfig &c);
00162
00163
00164 virtual ~FDFilterGen()
00165 {
00166 }
00170 bool Do(void);
00171
00180 bool Do(Spectrum &out);
00181
00183 const ProcessingConfig &GetConfig() const { return mConfig; };
00184
00185 private:
00186
00187 const char *GetClassName() const {return "FDFilterGen";}
00188
00190 bool ConcreteConfigure(const ProcessingConfig& c);
00191
00193 void SetFilterPoint(
00194 Spectrum& out,
00195 TIndex pos,
00196 TData freq,
00197 TData mag,
00198 TData phase=0
00199 );
00200
00201 };
00202
00203 }
00204
00205
00206 #endif // _FFT_
00207