30 : mCurrentTime(
"CurrentTime",this)
31 , mCurrentPitch(
"CurrentPitch",this)
45 mRandomPhase.
Resize(mConfig.GetMaxSines());
46 mRandomPhase.
SetSize(mConfig.GetMaxSines());
53 mLastPeakArray.AddPhaseBuffer();
54 mLastPeakArray.AddBinWidthBuffer();
55 mLastPeakArray.AddBinPosBuffer();
56 mLastPeakArray.AddIndexArray();
76 switch(mConfig.GetType())
106 return Do(currentFrame.GetSpectralPeakArray());
114 mLastPeriodTime = 0.0;
115 mNextPeriodTime = 0.0;
135 double lastPeriodDuration = mNextPeriodTime - mLastPeriodTime;
136 mNextPeriodTime = mLastPeriodTime + newPeriodDuration;
137 double averagePeriodDuration = 0.5*lastPeriodDuration + 0.5*newPeriodDuration;
139 double timeDiff = t-mLastPeriodTime;
141 TIndex nPeriodsElapsed = (
TIndex)floor(timeDiff/averagePeriodDuration);
143 if (timeDiff-nPeriodsElapsed*averagePeriodDuration > newPeriodDuration-mFrameTime*0.5)
146 double timePeriodDiff = timeDiff - nPeriodsElapsed*averagePeriodDuration;
148 double thPeriodPosition = (timeDiff-nPeriodsElapsed*averagePeriodDuration)/newPeriodDuration;
150 timePeriodDiff = thPeriodPosition*newPeriodDuration;
152 for (
int i = 0;i<numPeaks;i++)
154 double phase1 = peakArray.
GetPhase(i);
156 phase = phase1+
TWO_PI*freq*timePeriodDiff;
161 if (nPeriodsElapsed > 0)
163 mLastPeriodTime += nPeriodsElapsed*averagePeriodDuration;
164 mNextPeriodTime = mLastPeriodTime + newPeriodDuration;
170 mNextPeriodTime = t + newPeriodDuration;
175 mLastPeriodTime = 0.0;
176 mNextPeriodTime = 0.0;
192 DataArray& lastPhase=mLastPeakArray.GetPhaseBuffer();
193 DataArray& lastFreq=mLastPeakArray.GetFreqBuffer();
201 for (i=0;i<numPeaks;i++)
210 if (prevPos == -1||prevPos>mLastPeakArray.
GetnPeaks())
212 phase = mRandomPhase[i];
226 phase = lastPeak.GetPhase() +
TWO_PI*((lastPeak.GetFreq()+freq)*0.5*mFrameTime);
231 lastPhase[prevPos]=
TData(phase);
232 lastFreq[prevPos]=
TData(phase);
246 DataArray& lastPhaseBuffer = mLastPeakArray.GetPhaseBuffer();
247 DataArray& lastFreqBuffer = mLastPeakArray.GetFreqBuffer();
248 DataArray& currentPhaseBuffer = p.GetPhaseBuffer();
249 DataArray& currentFreqBuffer = p.GetFreqBuffer();
251 TData timeDifference = t-mFrameTime;
254 TData halfPITimeDifference = timeDifference*halfPI;
257 for(i=0;i<nPeaks;i++)
265 currentPhaseBuffer[i] = lastPhaseBuffer[lastPos]+
266 halfPITimeDifference*(lastFreqBuffer[lastPos]+currentFreqBuffer[i]);
272 currentPhaseBuffer[i] = currentFreqBuffer[i]*twoPITimeDifference;
286 for (
int i = 0; i<a.
Size();i++)
295 DataArray& lastPhase=mLastPeakArray.GetPhaseBuffer();
296 DataArray& lastFreq=mLastPeakArray.GetFreqBuffer();
297 DataArray& currentPhase= peakArray.GetPhaseBuffer();
298 DataArray& currentFreq= peakArray.GetFreqBuffer();
306 for (
int i=0;i<nPeaks;i++)
308 lastPhase[i] = currentPhase[i];
309 lastFreq[i] = currentFreq[i];