Mercurial > hg > qm-dsp
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 } |