22 #ifndef _SMSTransformationChain_
23 #define _SMSTransformationChain_
73 for(
int i=0;i<mpTmpDataArray.
Size();i++)
74 if(mpTmpDataArray[i])
delete mpTmpDataArray[i];
75 if (mpConfig)
delete mpConfig;
86 "SMSTransformationChain: Do(): Not in execution mode");
112 printf(
"TransChain::Do() is last frame\n");
124 pCurrentData=
new Segment(*mpChainInput);
125 mpTmpDataArray.
AddElem(pCurrentData);
136 concreteObj.
AttachIn(*pCurrentData);
137 if(!(*obj)->CanProcessInplace())
139 printf(
"Can't process inplace: setting a temporal segment\n");
140 pCurrentData=
new Segment(*mpChainInput);
141 mpTmpDataArray.
AddElem(pCurrentData);
148 concreteObj.
AttachIn(*mpChainInput);
164 for(
int i=0;i<mpTmpDataArray.
Size();i++)
165 if(mpTmpDataArray[i])
166 delete mpTmpDataArray[i];
172 for(
int i=0;i<mpTmpDataArray.
Size();i++)
173 mpTmpDataArray[i]->mCurrentFrameIndex=0;
180 mOnCtrlArray[index].DoControl(1);
186 mOnCtrlArray[index].DoControl(0);
211 AddChainee((*cfg).GetConcreteClassName());
214 result&=(*obj)->Configure((*cfg).GetConcreteConfig());
216 CLAM_ASSERT(mpConfig->GetConfigurations().size()==
composite_size(),
"Number of configurations should be the same as number of children");
219 CLAM_ASSERT(mpConfig->GetOnArray().Size()==(
int)
composite_size(),
"SMSTransformationChain::ConcreteConfigure: On array does not have same size as number of configurations");
221 mOnCtrlArray.
Resize(nControls,
"OnControlArray",
this);
223 for(
int i=0;i<nControls;i++)
225 mOnCtrlArray[i].DoControl(mpConfig->GetOnArray()[i]);
237 if(name == (*obj)->GetClassName())
return dynamic_cast<SegmentTransformation*>((*obj));;
245 void AddChainee(
const std::string& classname)
256 const char * control;
258 {
"SMSFreqShift",
"Shift Steps"},
259 {
"SMSSinusoidalGain",
"Gain"},
260 {
"SMSResidualGain",
"Gain"},
261 {
"SMSPitchShift",
"PitchSteps"},
262 {
"SMSOddEvenHarmonicRatio",
"Odd Factor"},
263 {
"SMSSpectralShapeShift",
"Shift Steps"},
264 {
"SMSPitchDiscretization", 0},
265 {
"SMSGenderChange",
"Amount"},
266 {
"SMSSineFilter", 0},
269 for (Supported * processing = supported; processing->name; processing ++)
271 if (classname != processing->name)
continue;
272 FrameTransformation * transformation =
dynamic_cast<FrameTransformation*
> (proc);
274 if (processing->control)
295 SegmentTransformation* transf =
dynamic_cast<SegmentTransformation*
>((*obj));
296 if(!transf->IsLastFrame())
return false;
308 #endif // _SMSTransformationChain_