33 "key",
"SpectralSynthesis",
34 "category",
"Synthesis",
35 "description",
"SpectralSynthesis",
38 static FactoryRegistrator<ProcessingFactory, SpectralSynthesis>
reg =
metadata;
41 void SpectralSynthesis::AttachChildren()
47 mPO_IFFT.SetParent(
this);
52 : mInput(
"Input",this),
53 mOutput(
"Output",this)
60 : mInput(
"Input",this),
61 mOutput(
"Output",this)
72 bool SpectralSynthesis::ConfigureChildren()
76 if(!mPO_AnalWindowGen.
Configure(mConfig.GetAnalWindowGenerator()))
80 if(!mPO_SynthWindowGen.
Configure(mConfig.GetSynthWindowGenerator()))
84 if(!mPO_CircularShift.
Configure(mConfig.GetCircularShift()))
90 IFFTCFG.SetAudioSize(mConfig.GetIFFT().GetAudioSize());
91 if(!mPO_IFFT.Configure(IFFTCFG))
97 void SpectralSynthesis::ConfigureData()
104 mAudio0.
SetSize(mConfig.GetIFFT().GetAudioSize());
113 Audio tmpWindow,tmpWindow2;
118 mPO_AnalWindowGen.
Start();
119 mPO_AnalWindowGen.
Do(tmpWindow);
120 mPO_AnalWindowGen.
Stop();
131 mPO_SynthWindowGen.
Start();
132 mPO_SynthWindowGen.
Do(tmpWindow);
133 mPO_SynthWindowGen.
Stop();
137 mPO_AudioProduct.
Do(tmpWindow,mSynthWindow,mSynthWindow);
147 bool SpectralSynthesis::ConcreteConfigure(
const ProcessingConfig& c)
179 mPO_IFFT.Do(in, mAudio0);
181 mPO_CircularShift.
Do(mAudio0,mAudio0);
183 int centerSample = analWindowSize*0.5;
184 mAudio0.
GetAudioChunk(centerSample-hopSize,centerSample+hopSize-1,mAudio2,
false);
186 mPO_AudioProduct.
Do(mAudio2, mSynthWindow,out);
195 if(mConfig.GetResidual())
196 return Do(in.GetSpectrum(),in.GetAudioFrame());
198 return Do(in.GetResidualSpec(),in.GetResidualAudioFrame());
206 TInt32 SpectralSynthesis::CalculatePowerOfTwo(
TInt32 size)
212 outputSize=outputSize << 1;
215 if(outputSize == size << 1)
216 outputSize = outputSize >> 1;