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