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 _Vocoder_
00025 #define _Vocoder_
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 "SimpleOscillator.hxx"
00034
00035 namespace CLAM{
00036
00037 class Vocoder: public FrameTransformationTmpl<Spectrum>
00038 {
00039 InPort<Spectrum> mIn;
00040 OutPort<Spectrum> mOut;
00041
00042 InControl mBand0GainCtl;
00043 InControl mBand1GainCtl;
00044 InControl mBand2GainCtl;
00045 InControl mBand3GainCtl;
00046 InControl mNumBandsCtl;
00047 InControl mFreqShiftCtl;
00048
00049 public:
00050 const char* GetClassName() const
00051 {
00052 return "Vocoder";
00053 }
00054
00055 Vocoder()
00056 : mIn("In Spectrum", this)
00057 , mOut("Out Spectrum", this)
00058 , mBand0GainCtl("Band0Gain", this)
00059 , mBand1GainCtl("Band1Gain", this)
00060 , mBand2GainCtl("Band2Gain", this)
00061 , mBand3GainCtl("Band3Gain", this)
00062 , mNumBandsCtl("NumBands", this)
00063 , mFreqShiftCtl("FreqShift", this)
00064 {
00065 Configure( FrameTransformationConfig() );
00066 }
00067
00068 ~Vocoder() {}
00069
00070 bool InitControls()
00071 {
00072 mNumBandsCtl.DoControl(50);
00073 return true;
00074 }
00075
00076 bool Do(const Frame& in, Frame& out)
00077 {
00078 return Do(in.GetSpectrum(),
00079 out.GetSpectrum());
00080 }
00081
00082 bool Do(const Spectrum& in, Spectrum& out);
00083
00084 bool Do()
00085 {
00086 bool result = Do(mIn.GetData(), mOut.GetData());
00087 mIn.Consume();
00088 mOut.Produce();
00089 return result;
00090 }
00091 private:
00092 DataArray mMagBuffer;
00093 };
00094 };
00095
00096 #endif // _Vocoder_
00097