comparison dsp/onsets/DetectionFunction.cpp @ 289:befe5aa6b450

* Refactor FFT a little bit so as to separate construction and processing rather than have a single static method -- will make it easier to use a different implementation * pull in KissFFT implementation (not hooked up yet)
author Chris Cannam <c.cannam@qmul.ac.uk>
date Wed, 13 May 2009 09:19:12 +0000
parents 9c403afdd9e9
children e5907ae6de17
comparison
equal deleted inserted replaced
288:86c70067c723 289:befe5aa6b450
56 memset(m_phaseHistoryOld,0, m_halfLength*sizeof(double)); 56 memset(m_phaseHistoryOld,0, m_halfLength*sizeof(double));
57 57
58 m_magPeaks = new double[ m_halfLength ]; 58 m_magPeaks = new double[ m_halfLength ];
59 memset(m_magPeaks,0, m_halfLength*sizeof(double)); 59 memset(m_magPeaks,0, m_halfLength*sizeof(double));
60 60
61 m_phaseVoc = new PhaseVocoder; 61 // See note in process(const double *) below
62 int actualLength = MathUtilities::previousPowerOfTwo(m_dataLength);
63 m_phaseVoc = new PhaseVocoder(actualLength);
62 64
63 m_DFWindowedFrame = new double[ m_dataLength ]; 65 m_DFWindowedFrame = new double[ m_dataLength ];
64 m_magnitude = new double[ m_halfLength ]; 66 m_magnitude = new double[ m_halfLength ];
65 m_thetaAngle = new double[ m_halfLength ]; 67 m_thetaAngle = new double[ m_halfLength ];
66 68
102 m_magnitude[i] = 0; 104 m_magnitude[i] = 0;
103 m_thetaAngle[0] = 0; 105 m_thetaAngle[0] = 0;
104 } 106 }
105 } 107 }
106 108
107 m_phaseVoc->process(actualLength, m_DFWindowedFrame, m_magnitude, m_thetaAngle); 109 m_phaseVoc->process(m_DFWindowedFrame, m_magnitude, m_thetaAngle);
108 110
109 if (m_whiten) whiten(); 111 if (m_whiten) whiten();
110 112
111 return runDF(); 113 return runDF();
112 } 114 }