comparison TempogramPlugin.cpp @ 48:8c151a9ca202

Tidy
author Chris Cannam
date Mon, 29 Sep 2014 16:22:16 +0100
parents cb79f27f0748
children b27e42b68c61
comparison
equal deleted inserted replaced
47:cb79f27f0748 48:8c151a9ca202
461 461
462 FeatureSet featureSet; 462 FeatureSet featureSet;
463 463
464 //initialise novelty curve processor 464 //initialise novelty curve processor
465 int numberOfBlocks = m_spectrogram.size(); 465 int numberOfBlocks = m_spectrogram.size();
466 //cerr << numberOfBlocks << endl; 466
467 NoveltyCurveProcessor nc(m_inputSampleRate, m_inputBlockSize, m_noveltyCurveCompressionConstant); 467 NoveltyCurveProcessor nc(m_inputSampleRate, m_inputBlockSize, m_noveltyCurveCompressionConstant);
468 vector<float> noveltyCurve = nc.spectrogramToNoveltyCurve(m_spectrogram); //calculate novelty curvefrom magnitude data 468 vector<float> noveltyCurve = nc.spectrogramToNoveltyCurve(m_spectrogram); //calculate novelty curvefrom magnitude data
469 469
470 //push novelty curve data to featureset 1 and set timestamps 470 //push novelty curve data to featureset 1 and set timestamps
471 for (int i = 0; i < numberOfBlocks; i++){ 471 for (int i = 0; i < numberOfBlocks; i++){
504 Tempogram tempogramACT = autocorrelationProcessor.process(&noveltyCurve[0], numberOfBlocks); 504 Tempogram tempogramACT = autocorrelationProcessor.process(&noveltyCurve[0], numberOfBlocks);
505 505
506 for (int block = 0; block < tempogramLength; block++){ 506 for (int block = 0; block < tempogramLength; block++){
507 Feature tempogramACTFeature; 507 Feature tempogramACTFeature;
508 508
509 // cerr << "block = " << block << ", window length = " << m_tempogramWindowLength << ", max lag = " << m_tempogramMaxLag << ", min lag = " << m_tempogramMinLag << endl;
510
511 for(int k = m_tempogramMaxLag; k >= (int)m_tempogramMinLag; k--){ 509 for(int k = m_tempogramMaxLag; k >= (int)m_tempogramMinLag; k--){
512 // cerr << "(" << block << "," << k << ") ";
513 tempogramACTFeature.values.push_back(tempogramACT[block][k]); 510 tempogramACTFeature.values.push_back(tempogramACT[block][k]);
514 } 511 }
515 // cerr << endl;
516 tempogramACTFeature.hasTimestamp = false; 512 tempogramACTFeature.hasTimestamp = false;
517 featureSet[2].push_back(tempogramACTFeature); 513 featureSet[2].push_back(tempogramACTFeature);
518 } 514 }
519 515
520 //Calculate cyclic tempogram 516 //Calculate cyclic tempogram
526 522
527 for (int i = 0; i < m_cyclicTempogramOctaveDivider; i++){ 523 for (int i = 0; i < m_cyclicTempogramOctaveDivider; i++){
528 float sum = 0; 524 float sum = 0;
529 525
530 for (int j = 0; j < m_cyclicTempogramNumberOfOctaves; j++){ 526 for (int j = 0; j < m_cyclicTempogramNumberOfOctaves; j++){
531 527 sum += tempogramDFT[block][logBins[j][i]];
532 if (block >= tempogramDFT.size()) {
533 cerr << "ERROR: at block = " << block << ", i = " << i << ", j = " << j << ": block " << block << " >= tempogramDFT.size() " << tempogramDFT.size() << endl;
534 } else if (j > logBins.size()) {
535 cerr << "ERROR: at block = " << block << ", i = " << i << ", j = " << j << ": j " << j << " >= logBins.size() " << logBins.size() << endl;
536 } else if (i > logBins[j].size()) {
537 cerr << "ERROR: at block = " << block << ", i = " << i << ", j = " << j << ": i " << i << " >= logBins[j].size() " << logBins[j].size() << endl;
538 } else if (logBins[j][i] >= tempogramDFT[block].size()) {
539 cerr << "ERROR: at block = " << block << ", i = " << i << ", j = " << j << ": logBins[j][i] " << logBins[j][i] << " >= tempogramDFT[block].size() " << tempogramDFT[block].size() << endl;
540 } else {
541 sum += tempogramDFT[block][logBins[j][i]];
542 }
543 } 528 }
544 cyclicTempogramFeature.values.push_back(sum/m_cyclicTempogramNumberOfOctaves); 529 cyclicTempogramFeature.values.push_back(sum/m_cyclicTempogramNumberOfOctaves);
545 assert(!isnan(cyclicTempogramFeature.values.back())); 530 assert(!isnan(cyclicTempogramFeature.values.back()));
546 } 531 }
547 532
554 539
555 vector< vector<unsigned int> > TempogramPlugin::calculateTempogramNearestNeighbourLogBins() const 540 vector< vector<unsigned int> > TempogramPlugin::calculateTempogramNearestNeighbourLogBins() const
556 { 541 {
557 vector< vector<unsigned int> > logBins; 542 vector< vector<unsigned int> > logBins;
558 543
559 cerr << "calculateTempogramNearestNeighbourLogBins: octaves = "
560 << m_cyclicTempogramNumberOfOctaves << endl;
561
562 for (int octave = 0; octave < (int)m_cyclicTempogramNumberOfOctaves; octave++){ 544 for (int octave = 0; octave < (int)m_cyclicTempogramNumberOfOctaves; octave++){
563 vector<unsigned int> octaveBins; 545 vector<unsigned int> octaveBins;
564
565 cerr << "octave " << octave << ":" << endl;
566 546
567 for (int bin = 0; bin < (int)m_cyclicTempogramOctaveDivider; bin++){ 547 for (int bin = 0; bin < (int)m_cyclicTempogramOctaveDivider; bin++){
568 float bpm = m_cyclicTempogramMinBPM*pow(2.0f, octave+(float)bin/m_cyclicTempogramOctaveDivider); 548 float bpm = m_cyclicTempogramMinBPM*pow(2.0f, octave+(float)bin/m_cyclicTempogramOctaveDivider);
569 octaveBins.push_back(bpmToBin(bpm)); 549 octaveBins.push_back(bpmToBin(bpm));
570 cerr << bpmToBin(bpm) << " ";
571 //cout << octaveBins.back() << endl;
572 } 550 }
573 cerr << endl;
574 logBins.push_back(octaveBins); 551 logBins.push_back(octaveBins);
575
576 } 552 }
577 553
578 return logBins; 554 return logBins;
579 } 555 }
580 556
656 return false; 632 return false;
657 } 633 }
658 634
659 m_cyclicTempogramMinBPM = max(binToBPM(m_tempogramMinBin), m_tempogramMinBPM); 635 m_cyclicTempogramMinBPM = max(binToBPM(m_tempogramMinBin), m_tempogramMinBPM);
660 float cyclicTempogramMaxBPM = min(binToBPM(m_tempogramMaxBin), m_tempogramMaxBPM); 636 float cyclicTempogramMaxBPM = min(binToBPM(m_tempogramMaxBin), m_tempogramMaxBPM);
661
662 cerr << "tempogram min bpm = " << m_tempogramMinBPM << ", cyclic min = "
663 << m_cyclicTempogramMinBPM << endl;
664 cerr << "tempogram max bpm = " << m_tempogramMaxBPM << ", cyclic max = "
665 << cyclicTempogramMaxBPM << endl;
666 637
667 m_cyclicTempogramNumberOfOctaves = floor(log2(cyclicTempogramMaxBPM/m_cyclicTempogramMinBPM)); 638 m_cyclicTempogramNumberOfOctaves = floor(log2(cyclicTempogramMaxBPM/m_cyclicTempogramMinBPM));
668 639
669 if (m_cyclicTempogramNumberOfOctaves < 1) { 640 if (m_cyclicTempogramNumberOfOctaves < 1) {
670 cerr << "At audio sample rate " << m_inputSampleRate 641 cerr << "At audio sample rate " << m_inputSampleRate