00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef _Deesser_
00025 #define _Deesser_
00026
00027 #include "InPort.hxx"
00028 #include "OutPort.hxx"
00029 #include "InControl.hxx"
00030 #include "Frame.hxx"
00031 #include "FrameTransformation.hxx"
00032 #include "FrameTransformationConfig.hxx"
00033 #include "SpectralNotch.hxx"
00034
00035 namespace CLAM{
00036
00037 class Deesser: public FrameTransformationTmpl<Spectrum>
00038 {
00039 InPort<Spectrum> mIn;
00040 OutPort<Spectrum> mOut;
00041
00042 InControl mLowCutoffFreqCtl;
00043 InControl mHighCutoffFreqCtl;
00044 InControl mThresholdCtl;
00045 public:
00046 const char* GetClassName() const
00047 {
00048 return "Deesser";
00049 }
00050
00051 Deesser()
00052 :
00053 mIn("In Spectrum", this),
00054 mOut("Out Spectrum", this) ,
00055 mLowCutoffFreqCtl("LowCutoff", this),
00056 mHighCutoffFreqCtl("HighCutoff", this),
00057 mThresholdCtl("Threshold", this)
00058 {
00059 Configure( FrameTransformationConfig() );
00060 mNotch.Configure( FrameTransformationConfig() );
00061 }
00062
00063 ~Deesser() {}
00064
00065 virtual bool InitControls()
00066 {
00067 mLowCutoffFreqCtl.DoControl(3000);
00068 mHighCutoffFreqCtl.DoControl(6000);
00069 mThresholdCtl.DoControl(-30);
00070
00071 return true;
00072 }
00073
00074 bool Do(const Frame& in, Frame& out)
00075 {
00076 return Do(in.GetSpectrum(),
00077 out.GetSpectrum());
00078 }
00079
00080 bool Do(const Spectrum& in, Spectrum& out);
00081
00082 bool Do()
00083 {
00084 bool result = Do(mIn.GetData(), mOut.GetData());
00085 mIn.Consume();
00086 mOut.Produce();
00087 return result;
00088 }
00089 private:
00090 SpectralNotch mNotch;
00091 };
00092 };
00093
00094 #endif // _Deesser_