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