comparison dsp/keydetection/GetKeyMode.cpp @ 459:b7e10277a84c

Calculate key strange during getKeyStrengths() to save CPU time if this is not needed.
author Daniel Schürmann <daschuer@mixxx.org>
date Fri, 24 May 2019 20:40:37 +0200
parents e7e36ecd7ad2
children 02cb97d2dee8
comparison
equal deleted inserted replaced
458:e7e36ecd7ad2 459:b7e10277a84c
226 for( k = 0; k < kBinsPerOctave; k++ ) { 226 for( k = 0; k < kBinsPerOctave; k++ ) {
227 m_Keys[k] = m_MajCorr[k]; 227 m_Keys[k] = m_MajCorr[k];
228 m_Keys[k+kBinsPerOctave] = m_MinCorr[k]; 228 m_Keys[k+kBinsPerOctave] = m_MinCorr[k];
229 } 229 }
230 230
231 for (k = 0; k < 24; ++k) {
232 m_keyStrengths[k] = 0;
233 }
234
235 for( k = 0; k < kBinsPerOctave*2; k++ ) {
236 int idx = k / (kBinsPerOctave/12);
237 int rem = k % (kBinsPerOctave/12);
238 if (rem == 0 || m_Keys[k] > m_keyStrengths[idx]) {
239 m_keyStrengths[idx] = m_Keys[k];
240 }
241
242 // m_keyStrengths[k/(kBinsPerOctave/12)] += m_Keys[k];
243 }
244
245 /* 231 /*
246 std::cout << "raw keys: "; 232 std::cout << "raw keys: ";
247 for (int ii = 0; ii < 2*kBinsPerOctave; ++ii) { 233 for (int ii = 0; ii < 2*kBinsPerOctave; ++ii) {
248 if (ii % (kBinsPerOctave/12) == 0) std::cout << "\n"; 234 if (ii % (kBinsPerOctave/12) == 0) std::cout << "\n";
249 std::cout << m_Keys[ii] << " "; 235 std::cout << m_Keys[ii] << " ";
250 } 236 }
251 std::cout << std::endl; 237 std::cout << std::endl;
252 238 */
253 std::cout << "key strengths: "; 239
254 for (int ii = 0; ii < 24; ++ii) {
255 if (ii % 6 == 0) std::cout << "\n";
256 std::cout << m_keyStrengths[ii] << " ";
257 }
258 std::cout << std::endl;
259 */
260 double dummy; 240 double dummy;
261 // m_Keys[1] is C center 1 / 3 + 1 = 1 241 // m_Keys[1] is C center 1 / 3 + 1 = 1
262 // m_Keys[4] is D center 4 / 3 + 1 = 2 242 // m_Keys[4] is D center 4 / 3 + 1 = 2
263 // '+ 1' because we number keys 1-24, not 0-23. 243 // '+ 1' because we number keys 1-24, not 0-23.
264 key = MathUtilities::getMax( m_Keys, 2* kBinsPerOctave, &dummy ) / 3 + 1; 244 key = MathUtilities::getMax( m_Keys, 2* kBinsPerOctave, &dummy ) / 3 + 1;
322 302
323 unsigned int getChromaSize() 303 unsigned int getChromaSize()
324 { 304 {
325 return kBinsPerOctave; 305 return kBinsPerOctave;
326 } 306 }
307
308 double* GetKeyMode::getKeyStrengths() {
309 unsigned int k;
310
311 for (k = 0; k < 24; ++k) {
312 m_keyStrengths[k] = 0;
313 }
314
315 for( k = 0; k < kBinsPerOctave; k++ )
316 {
317 int idx = k / (kBinsPerOctave/12);
318 int rem = k % (kBinsPerOctave/12);
319 if (rem == 0 || m_MajCorr[k] > m_keyStrengths[idx]) {
320 m_keyStrengths[idx] = m_MajCorr[k];
321 }
322 }
323
324 for( k = 0; k < kBinsPerOctave; k++ )
325 {
326 int idx = (k + kBinsPerOctave) / (kBinsPerOctave/12);
327 int rem = k % (kBinsPerOctave/12);
328 if (rem == 0 || m_MinCorr[k] > m_keyStrengths[idx]) {
329 m_keyStrengths[idx] = m_MinCorr[k];
330 }
331 }
332
333 /*
334 std::cout << "key strengths: ";
335 for (int ii = 0; ii < 24; ++ii) {
336 if (ii % 6 == 0) std::cout << "\n";
337 std::cout << m_keyStrengths[ii] << " ";
338 }
339 std::cout << std::endl;
340 */
341
342 return m_keyStrengths;
343 }