SegmentSMSHarmonizer.hxx
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef _SegmentSMSHarmonizer_
00024 #define _SegmentSMSHarmonizer_
00025
00026 #include "SMSPitchShift.hxx"
00027 #include "SpectrumAdder2.hxx"
00028 #include "FrameTransformation.hxx"
00029
00030
00031
00032
00033
00034 namespace CLAM{
00035
00036
00037 class SegmentSMSHarmonizer: public FrameTransformation
00038 {
00039
00043 const char *GetClassName() const {return "SegmentSMSHarmonizer";}
00044
00045 FloatInControl mIndexCtl;
00046 FloatInControl mTransCtl;
00050 FloatInControl mIgnoreResidualCtl;
00051 FloatInControl mUpdateBPFCtl;
00052 public:
00053
00054 void UpdateBPF(TControlData value)
00055 {
00056 CLAM::BPF& bpf= mConfig.GetBPF();
00057
00058 if(bpf.Size()==0)
00059 {
00060 InitBPF();
00061 }
00062
00063 bpf.SetValue((int)mIndexCtl.GetLastValue(), mTransCtl.GetLastValue());
00064 }
00065 void IgnoreResidual(TControlData value)
00066 {
00067 mPitchShift.mIgnoreResidual.DoControl(value);
00068 }
00069 public:
00071 SegmentSMSHarmonizer()
00072 : mIndexCtl("Index", this)
00073 , mTransCtl("Transposition",this)
00074 , mIgnoreResidualCtl("IgnoreResidual",this, &SegmentSMSHarmonizer::IgnoreResidual)
00075 , mUpdateBPFCtl("UpdateBPF", this, &SegmentSMSHarmonizer::UpdateBPF)
00076 {
00077 Configure(FrameTransformationConfig());
00078 mTmpFrame.AddAll();
00079 mTmpFrame.UpdateData();
00080 mTmpFund.AddElem();
00081 }
00082
00083 bool ConcreteConfigure(const ProcessingConfig& c)
00084 {
00085 CopyAsConcreteConfig( mConfig, c );
00086 InitBPF();
00087 mPitchShift.Configure(FrameTransformationConfig());
00088
00089 mIgnoreResidualCtl.DoControl(1.);
00090 return true;
00091 }
00092
00094 ~SegmentSMSHarmonizer()
00095 {}
00096
00097 bool Do()
00098 {
00099 CLAM_ASSERT(false, "Do with ports not implemented");
00100 return false;
00101 }
00102
00103 bool Do(const Frame& in, Frame& out);
00104 private:
00105 SMSPitchShift mPitchShift;
00106 SpectrumAdder2 mSpectrumAdder;
00107 void AddFrame(const Frame& in1, const Frame& in2, Frame& out);
00108 void Gain(Frame& inputFrame, TData gain);
00109
00110 Fundamental mTmpFund;
00111 Frame mTmpFrame;
00112
00113 void InitBPF()
00114 {
00115 if (!mConfig.HasBPF())
00116 {
00117 mConfig.AddBPF();
00118 mConfig.UpdateData();
00119 }
00120 if(mConfig.GetBPF().Size()==0)
00121 {
00122 BPF& bpf=mConfig.GetBPF();
00123 bpf.Resize(10);
00124 bpf.SetSize(10);
00125 int i;
00126
00127 for (i=0; i< 10; i++)
00128 {
00129 bpf.SetValue(i,1);
00130 bpf.SetXValue(i,(i-5)*6);
00131 }
00132 }
00133 }
00134
00135
00136 };
00137 };
00138
00139 #endif // _SegmentSMSHarmonizer_
00140