comparison TempogramPlugin.cpp @ 36:4010960c659e

* Merge with Chris' changes
author Carl Bussey <c.bussey@se10.qmul.ac.uk>
date Thu, 04 Sep 2014 14:33:36 +0100
parents 2b2e707c8c20
children df696e57a150
comparison
equal deleted inserted replaced
35:c8dd1049b2d3 36:4010960c659e
524 524
525 for (int i = 0; i < m_cyclicTempogramOctaveDivider; i++){ 525 for (int i = 0; i < m_cyclicTempogramOctaveDivider; i++){
526 float sum = 0; 526 float sum = 0;
527 527
528 for (int j = 0; j < m_cyclicTempogramNumberOfOctaves; j++){ 528 for (int j = 0; j < m_cyclicTempogramNumberOfOctaves; j++){
529 sum += tempogramDFT[block][logBins[j][i]]; 529
530 if (block >= tempogramDFT.size()) {
531 cerr << "ERROR: at block = " << block << ", i = " << i << ", j = " << j << ": block " << block << " >= tempogramDFT.size() " << tempogramDFT.size() << endl;
532 } else if (j > logBins.size()) {
533 cerr << "ERROR: at block = " << block << ", i = " << i << ", j = " << j << ": j " << j << " >= logBins.size() " << logBins.size() << endl;
534 } else if (i > logBins[j].size()) {
535 cerr << "ERROR: at block = " << block << ", i = " << i << ", j = " << j << ": i " << i << " >= logBins[j].size() " << logBins[j].size() << endl;
536 } else if (logBins[j][i] >= tempogramDFT[block].size()) {
537 cerr << "ERROR: at block = " << block << ", i = " << i << ", j = " << j << ": logBins[j][i] " << logBins[j][i] << " >= tempogramDFT[block].size() " << tempogramDFT[block].size() << endl;
538 } else {
539 sum += tempogramDFT[block][logBins[j][i]];
540 }
530 } 541 }
531 cyclicTempogramFeature.values.push_back(sum/m_cyclicTempogramNumberOfOctaves); 542 cyclicTempogramFeature.values.push_back(sum/m_cyclicTempogramNumberOfOctaves);
532 assert(!isnan(cyclicTempogramFeature.values.back())); 543 assert(!isnan(cyclicTempogramFeature.values.back()));
533 } 544 }
534 545
599 } 610 }
600 611
601 float tempogramInputSampleRate = (float)m_inputSampleRate/m_inputStepSize; 612 float tempogramInputSampleRate = (float)m_inputSampleRate/m_inputStepSize;
602 m_tempogramMinBin = (max((int)floor(((m_tempogramMinBPM/60)/tempogramInputSampleRate)*m_tempogramFftLength), 0)); 613 m_tempogramMinBin = (max((int)floor(((m_tempogramMinBPM/60)/tempogramInputSampleRate)*m_tempogramFftLength), 0));
603 m_tempogramMaxBin = (min((int)ceil(((m_tempogramMaxBPM/60)/tempogramInputSampleRate)*m_tempogramFftLength), (int)(m_tempogramFftLength/2))); 614 m_tempogramMaxBin = (min((int)ceil(((m_tempogramMaxBPM/60)/tempogramInputSampleRate)*m_tempogramFftLength), (int)(m_tempogramFftLength/2)));
615
616 if (m_tempogramMaxBin < m_tempogramMinBin) {
617 cerr << "At audio sample rate " << m_inputSampleRate
618 << ", tempogram sample rate " << tempogramInputSampleRate
619 << " with bpm range " << m_tempogramMinBPM << " -> "
620 << m_tempogramMaxBPM << ", min bin = " << m_tempogramMinBin
621 << " > max bin " << m_tempogramMaxBin
622 << ": can't proceed, failing initialise" << endl;
623 return false;
624 }
604 625
605 m_tempogramMinLag = max((int)ceil((60/(m_inputStepSize * m_tempogramMaxBPM))*m_inputSampleRate), 0); 626 m_tempogramMinLag = max((int)ceil((60/(m_inputStepSize * m_tempogramMaxBPM))*m_inputSampleRate), 0);
606 m_tempogramMaxLag = min((int)floor((60/(m_inputStepSize * m_tempogramMinBPM))*m_inputSampleRate), (int)m_tempogramWindowLength); 627 m_tempogramMaxLag = min((int)floor((60/(m_inputStepSize * m_tempogramMinBPM))*m_inputSampleRate), (int)m_tempogramWindowLength);
628
629 if (m_tempogramMaxLag < m_tempogramMinLag) {
630 cerr << "At audio sample rate " << m_inputSampleRate
631 << ", tempogram sample rate " << tempogramInputSampleRate
632 << " with bpm range " << m_tempogramMinBPM << " -> "
633 << m_tempogramMaxBPM << ", min bin = " << m_tempogramMinLag
634 << " > max bin " << m_tempogramMaxLag
635 << ": can't proceed, failing initialise" << endl;
636 return false;
637 }
607 638
608 if (m_tempogramMinBPM > m_cyclicTempogramMinBPM) m_cyclicTempogramMinBPM = m_tempogramMinBPM; //m_cyclicTempogram can't be less than default = 30 639 if (m_tempogramMinBPM > m_cyclicTempogramMinBPM) m_cyclicTempogramMinBPM = m_tempogramMinBPM; //m_cyclicTempogram can't be less than default = 30
609 float cyclicTempogramMaxBPM = 480; 640 float cyclicTempogramMaxBPM = 480;
610 if (m_tempogramMaxBPM < cyclicTempogramMaxBPM) cyclicTempogramMaxBPM = m_tempogramMaxBPM; 641 if (m_tempogramMaxBPM < cyclicTempogramMaxBPM) cyclicTempogramMaxBPM = m_tempogramMaxBPM;
611 642