41 SetUseSpectralShape(
false);
46 : mMagInterpolationFactorCtl(
"MagInterpolationFactor",this),
47 mFreqInterpolationFactorCtl(
"FreqInterpolationFactor",this),
48 mPitchInterpolationFactorCtl(
"PitchInterpolationFactor",this),
49 mPitch1Ctl(
"Pitch1",this),
50 mPitch2Ctl(
"Pitch2",this),
51 mIsHarmonicCtl(
"IsHarmonic",this),
61 bool SpectralPeakArrayInterpolator::ConcreteConfigure(
const ProcessingConfig&c)
77 "SpectralPeakArrayInterpolator::Do(): Not in execution mode");
88 if(magFactor>0.99&&freqFactor>0.99&&pitchFactor>0.99)
94 if(magFactor<0.01&&freqFactor<0.01&&pitchFactor<0.01)
113 if(nPeaks1==0||nPeaks2==0)
126 DataArray& in1Freq=tmpIn1.GetFreqBuffer();
127 DataArray& in2Freq=tmpIn2.GetFreqBuffer();
139 TData newPitch=pitch1*(1-pitchFactor)+pitch2*pitchFactor;
151 outMag[i]=in1Mag[i]*(1-magFactor)+in2Mag[posIn2]*magFactor;
152 outFreq[i]=in1Freq[i]*(1-freqFactor)+in2Freq[posIn2]*freqFactor;
158 outMag[i]=in1Mag[i]*(1-magFactor);
159 outFreq[i]=in1Freq[i];
174 else if(FindHarmonic(in2Index,in1Index[i],pos))
177 outMag[i]=in1Mag[i]*(1-magFactor)+in2Mag[pos]*magFactor;
178 outFreq[i]=((in1Freq[i]/pitch1)*(1-freqFactor)+(in2Freq[pos]/pitch2)*freqFactor)*newPitch;
193 outMag[i]=
TData(0.0000000001);
194 outFreq[i]=lastFreq+=100;
209 "SpectralPeakArrayInterpolator::Do(): Not in execution mode");
229 if(nPeaks1==0||nPeaks2==0)
242 DataArray& in1Freq=tmpIn1.GetFreqBuffer();
243 DataArray& in2Freq=tmpIn2.GetFreqBuffer();
255 TData newPitch=pitch1*(1-pitchFactor)+pitch2*pitchFactor;
265 outFreq[i]=in1Freq[i]*(1-freqFactor)+in2Freq[
int(i*factor2) ]*freqFactor;
269 magFactor=spectralShape.
GetMag(outFreq[i]);
270 if(magFactor>1) magFactor=1;
271 if(magFactor<0) magFactor=0;
272 outMag[i]=in1Mag[i]*(1-magFactor)+in2Mag[
int(i*factor2) ]*magFactor;
278 else if(FindHarmonic(in2Index,in1Index[i],pos))
282 outFreq[i]=((in1Freq[i]/pitch1)*(1-freqFactor)+(in2Freq[pos]/pitch2)*freqFactor)*newPitch;
286 magFactor=spectralShape.
GetMag(outFreq[i]);
287 if(magFactor>1) magFactor=1;
288 if(magFactor<0) magFactor=0;
289 outMag[i]=in1Mag[i]*(1-magFactor)+in2Mag[pos]*magFactor;
302 outMag[i]=
TData(0.0000000001);
303 outFreq[i]=lastFreq+=100;
316 if(mConfig.GetUseSpectralShape())
324 bool SpectralPeakArrayInterpolator::FindHarmonic(
const IndexArray& indexArray,
int index,
int& lastPosition)
328 int nPeaks=indexArray.
Size();
329 for(i=lastPosition;i<nPeaks;i++)
331 if(indexArray[i]==index)