Mercurial > hg > qm-dsp
comparison dsp/keydetection/GetKeyMode.cpp @ 460:02cb97d2dee8
Remove now superfluid m_key array
author | Daniel Schürmann <daschuer@mixxx.org> |
---|---|
date | Fri, 24 May 2019 21:06:47 +0200 |
parents | b7e10277a84c |
children | 9414df58fd0e |
comparison
equal
deleted
inserted
replaced
459:b7e10277a84c | 460:02cb97d2dee8 |
---|---|
51 m_DecimatedBuffer(0), | 51 m_DecimatedBuffer(0), |
52 m_ChromaBuffer(0), | 52 m_ChromaBuffer(0), |
53 m_MeanHPCP(0), | 53 m_MeanHPCP(0), |
54 m_MajCorr(0), | 54 m_MajCorr(0), |
55 m_MinCorr(0), | 55 m_MinCorr(0), |
56 m_Keys(0), | |
57 m_MedianFilterBuffer(0), | 56 m_MedianFilterBuffer(0), |
58 m_SortedBuffer(0), | 57 m_SortedBuffer(0), |
59 m_keyStrengths(0) | 58 m_keyStrengths(0) |
60 { | 59 { |
61 m_DecimationFactor = 8; | 60 m_DecimationFactor = 8; |
102 | 101 |
103 m_MeanHPCP = new double[kBinsPerOctave]; | 102 m_MeanHPCP = new double[kBinsPerOctave]; |
104 | 103 |
105 m_MajCorr = new double[kBinsPerOctave]; | 104 m_MajCorr = new double[kBinsPerOctave]; |
106 m_MinCorr = new double[kBinsPerOctave]; | 105 m_MinCorr = new double[kBinsPerOctave]; |
107 m_Keys = new double[2*kBinsPerOctave]; | |
108 | 106 |
109 m_MedianFilterBuffer = new int[ m_MedianWinsize ]; | 107 m_MedianFilterBuffer = new int[ m_MedianWinsize ]; |
110 memset( m_MedianFilterBuffer, 0, sizeof(int)*m_MedianWinsize); | 108 memset( m_MedianFilterBuffer, 0, sizeof(int)*m_MedianWinsize); |
111 | 109 |
112 m_SortedBuffer = new int[ m_MedianWinsize ]; | 110 m_SortedBuffer = new int[ m_MedianWinsize ]; |
125 delete [] m_DecimatedBuffer; | 123 delete [] m_DecimatedBuffer; |
126 delete [] m_ChromaBuffer; | 124 delete [] m_ChromaBuffer; |
127 delete [] m_MeanHPCP; | 125 delete [] m_MeanHPCP; |
128 delete [] m_MajCorr; | 126 delete [] m_MajCorr; |
129 delete [] m_MinCorr; | 127 delete [] m_MinCorr; |
130 delete [] m_Keys; | |
131 delete [] m_MedianFilterBuffer; | 128 delete [] m_MedianFilterBuffer; |
132 delete [] m_SortedBuffer; | 129 delete [] m_SortedBuffer; |
133 | 130 delete [] m_keyStrengths; |
134 delete[] m_keyStrengths; | |
135 } | 131 } |
136 | 132 |
137 double GetKeyMode::krumCorr(double *pData1, double *pData2, unsigned int length) | 133 double GetKeyMode::krumCorr(double *pData1, double *pData2, unsigned int length) |
138 { | 134 { |
139 double retVal= 0.0; | 135 double retVal= 0.0; |
221 | 217 |
222 MathUtilities::circShift( MajProfile, kBinsPerOctave, 1 ); | 218 MathUtilities::circShift( MajProfile, kBinsPerOctave, 1 ); |
223 MathUtilities::circShift( MinProfile, kBinsPerOctave, 1 ); | 219 MathUtilities::circShift( MinProfile, kBinsPerOctave, 1 ); |
224 } | 220 } |
225 | 221 |
226 for( k = 0; k < kBinsPerOctave; k++ ) { | |
227 m_Keys[k] = m_MajCorr[k]; | |
228 m_Keys[k+kBinsPerOctave] = m_MinCorr[k]; | |
229 } | |
230 | |
231 /* | 222 /* |
232 std::cout << "raw keys: "; | 223 std::cout << "raw keys: "; |
233 for (int ii = 0; ii < 2*kBinsPerOctave; ++ii) { | 224 for (int ii = 0; ii < kBinsPerOctave; ++ii) { |
234 if (ii % (kBinsPerOctave/12) == 0) std::cout << "\n"; | 225 if (ii % (kBinsPerOctave/12) == 0) std::cout << "\n"; |
235 std::cout << m_Keys[ii] << " "; | 226 std::cout << m_MajCorr[ii] << " "; |
227 } | |
228 for (int ii = 0; ii < kBinsPerOctave; ++ii) { | |
229 if (ii % (kBinsPerOctave/12) == 0) std::cout << "\n"; | |
230 std::cout << m_MinCorr[ii] << " "; | |
236 } | 231 } |
237 std::cout << std::endl; | 232 std::cout << std::endl; |
238 */ | 233 */ |
239 | 234 |
240 double dummy; | 235 // m_MajCorr[1] is C center 1 / 3 + 1 = 1 |
241 // m_Keys[1] is C center 1 / 3 + 1 = 1 | 236 // m_MajCorr[4] is D center 4 / 3 + 1 = 2 |
242 // m_Keys[4] is D center 4 / 3 + 1 = 2 | |
243 // '+ 1' because we number keys 1-24, not 0-23. | 237 // '+ 1' because we number keys 1-24, not 0-23. |
244 key = MathUtilities::getMax( m_Keys, 2* kBinsPerOctave, &dummy ) / 3 + 1; | 238 double maxMaj; |
245 | 239 int maxMajBin = MathUtilities::getMax( m_MajCorr, kBinsPerOctave, &maxMaj ); |
240 double maxMin; | |
241 int maxMinBin = MathUtilities::getMax( m_MinCorr, kBinsPerOctave, &maxMin ); | |
242 int maxBin = (maxMaj > maxMin) ? maxMajBin : (maxMinBin + kBinsPerOctave); | |
243 key = maxBin / 3 + 1; | |
244 | |
245 // std::cout << "fractional key pre-sorting: " << (maxBin + 2) / 3.0 << std::endl; | |
246 // std::cout << "key pre-sorting: " << key << std::endl; | 246 // std::cout << "key pre-sorting: " << key << std::endl; |
247 | 247 |
248 | 248 |
249 //Median filtering | 249 //Median filtering |
250 | 250 |