34 "key",
"SMSSynthesis",
35 "category",
"Synthesis",
36 "description",
"SMSSynthesis",
39 static FactoryRegistrator<ProcessingFactory, SMSSynthesis>
reg =
metadata;
43 void SMSSynthesis::AttachChildren()
57 : mInputSinSpectralPeaks(
"InputSinPeaks",this)
58 , mInputResSpectrum(
"InputResSpectrum",this)
59 , mOutputSinSpectrum(
"OutputSinSpectrum",this)
60 , mOutputSpectrum(
"OutputSpectrum",this)
61 , mOutputAudio(
"OutputAudio",this)
62 , mOutputResAudio(
"OutputResAudio",this)
63 , mOutputSinAudio(
"OutputSinAudio",this)
64 , mCurrentTimeControl(
"CurrentTime",this)
65 , mCurrentPitch(
"CurrentPitch",this)
77 bool SMSSynthesis::ConfigureChildren()
82 if(!mSpectralSynthesis.
Configure(mConfig.GetSpectralSynth()))
86 mConfig.GetSpectralSynth().SetResidual(
true);
87 if(!mResSpectralSynthesis.
Configure(mConfig.GetSpectralSynth()))
91 mConfig.GetSpectralSynth().SetResidual(
false);
92 if(!mSinSpectralSynthesis.
Configure(mConfig.GetSpectralSynth()))
96 if(!mSynthSineSpectrum.
Configure(mConfig.GetSynthSineSpectrum()))
100 if(!mPhaseMan.
Configure(mConfig.GetPhaseMan()))
110 if(!mOverlapAddSin.
Configure(mConfig.GetOverlapAddSin()))
112 if(!mOverlapAddRes.
Configure(mConfig.GetOverlapAddRes()))
114 if(!mOverlapAddGlobal.
Configure(mConfig.GetOverlapAddGlobal()))
120 void SMSSynthesis::ConfigureData()
136 bool SMSSynthesis::ConcreteConfigure(
const ProcessingConfig& c)
158 mSynthSineSpectrum.
Do(in,outSpec);
160 mSinSpectralSynthesis.
Do(outSpec,mAudioFrame);
163 return mOverlapAddSin.
Do(mAudioFrame, outAudio);
201 Audio& outputSinusoidalAudio,
202 Audio& outputResidualAudio)
210 return Do(inputSinusoidalPeaks,inputResidualSpectrum,tmpOutputSinSpec,tmpOutputSpec,
211 outputAudio,outputSinusoidalAudio,outputResidualAudio);
221 Audio& outputSinusoidalAudio,
222 Audio& outputResidualAudio)
230 TData currentTime = 0;
233 int framesize = outputAudio.
GetSize();
234 TData samplerate = inputResidualSpectrum.GetSpectralRange()*2;
235 currentTime =
TData( mCurrentFrame*framesize ) / samplerate;
245 mPhaseMan.
Do(inputSinusoidalPeaks);
254 mSpectrumAdder.
Do(outputSinusoidalSpectrum, inputResidualSpectrum, outputSpectrum);
257 mSpectralSynthesis.
Do(outputSpectrum,mAudioFrame);
261 mOverlapAddGlobal.
Do(mAudioFrame, outputAudio);
264 mResSpectralSynthesis.
Do(inputResidualSpectrum,mAudioFrame);
267 mOverlapAddRes.
Do(mAudioFrame, outputResidualAudio);
288 TData currentTime = 0;
291 int framesize = outputAudio.
GetSize();
292 TData samplerate = inputResidualSpectrum.GetSpectralRange()*2;
293 currentTime =
TData( mCurrentFrame*framesize ) / samplerate;
303 mPhaseMan.
Do(inputSinusoidalPeaks);
307 mSynthSineSpectrum.
Do(inputSinusoidalPeaks,outputSinusoidalSpectrum);
312 mSpectrumAdder.
Do(outputSinusoidalSpectrum, inputResidualSpectrum, outputSpectrum);
315 mSpectralSynthesis.
Do(outputSpectrum,mAudioFrame);
319 mOverlapAddGlobal.
Do(mAudioFrame, outputAudio);
330 bool isSynthesizeSinusoidsAndResidual =
true;
331 return Do(in, isSynthesizeSinusoidsAndResidual);
336 if(in.GetCenterTime()<0)
return false;
348 in.GetOutSpec().SetSpectralRange(in.GetResidualSpec().GetSpectralRange());
349 in.GetSinusoidalSpec().SetSpectralRange(in.GetResidualSpec().GetSpectralRange());
351 if ( isSynthesizeSinusoidsAndResidual )
353 return Do(in.GetSpectralPeakArray(),in.GetResidualSpec(),in.GetSinusoidalSpec(),in.GetOutSpec(),
354 in.GetSynthAudioFrame(),in.GetSinusoidalAudioFrame(),in.GetResidualAudioFrame());
358 return Do(in.GetSpectralPeakArray(),in.GetResidualSpec(),in.GetSinusoidalSpec(),in.GetOutSpec(),
359 in.GetSynthAudioFrame());
372 in.AddSinusoidalSpec();
373 in.AddSinusoidalAudioFrame();
374 in.AddResidualAudioFrame();
375 in.AddSynthAudioFrame();
378 in.GetSinusoidalAudioFrame().SetSize(mConfig.
GetFrameSize());
379 in.GetResidualAudioFrame().SetSize(mConfig.
GetFrameSize());
380 in.GetSynthAudioFrame().SetSize(mConfig.
GetFrameSize());