annotate src/RecordedMultitrackAudio.cpp @ 2:179c09199b3c

bayesian vector now adding gaussians for kick onsets
author Andrew N Robertson <andrew.robertson@eecs.qmul.ac.uk>
date Tue, 31 Jan 2012 21:34:19 +0000
parents 852173ca8365
children 5e188c0035b6
rev   line source
andrew@1 1 /*
andrew@1 2 * RecordedMultitrackAudio.cpp
andrew@1 3 * MultipleAudioMathcher
andrew@1 4 *
andrew@1 5 * Created by Andrew on 31/01/2012.
andrew@1 6 * Copyright 2012 QMUL. All rights reserved.
andrew@1 7 *
andrew@1 8 */
andrew@1 9
andrew@1 10 #include "RecordedMultitrackAudio.h"
andrew@1 11
andrew@1 12
andrew@1 13 void RecordedMultitrackAudio::loadTestAudio(){
andrew@1 14
andrew@1 15
andrew@2 16 const char *infilename = "../../../data/sound/basicClavScale.wav";
andrew@1 17
andrew@1 18 //LoadedAudioHolder lah;
andrew@1 19 // lah.loadAudioFile(infilename);
andrew@1 20 // loadedAudioFiles.push_back(lah);
andrew@1 21
andrew@1 22 //Take care here - we need a pointer to create new instance
andrew@1 23 //but not then delete the instance before the vector of all audio tracks has been used
andrew@1 24 //the above code using lah has problem that it deletes objects once out of the scope of testApp.setup()
andrew@1 25 //when lah is in theory no longer used - something like that possible? - at least pointers to onset detection seem deleted
andrew@2 26 loadedAudioPtr = new LoadedAudioHolder();
andrew@1 27 loadedAudioPtr->loadAudioFile(infilename);
andrew@1 28 // loadedAudioFiles.push_back(*loadedAudioPtr);
andrew@1 29 loadedAudioFiles[0] = *loadedAudioPtr;
andrew@1 30
andrew@1 31 loadedAudioFiles[0].fileLoader.onsetDetect.window.setToRelativeSize(0, 0.0, 1, 0.25);
andrew@2 32 loadedAudioFiles[0].setTrackType(0);// fileLoader.onsetDetect.trackType = 0;
andrew@1 33
andrew@1 34 // printf("Loaded audio %i\n", (int)numberOfAudioTracks);
andrew@1 35 printf("loaded max val is %f\n", loadedAudioFiles[0].fileLoader.onsetDetect.onsetDetector.maximumDetectionValue);
andrew@1 36
andrew@1 37 printf("BEFORE LOADING 1\n");
andrew@1 38 printInfo();
andrew@1 39
andrew@2 40 infilename = "../../../data/sound/basicClavScale2.wav";
andrew@2 41
andrew@1 42 loadedAudioPtr = new LoadedAudioHolder;
andrew@1 43 loadedAudioPtr->loadAudioFile(infilename);
andrew@1 44 // loadedAudioFiles.push_back(*loadedAudioPtr);
andrew@1 45 loadedAudioFiles[1] = *loadedAudioPtr;
andrew@1 46 loadedAudioFiles[1].fileLoader.onsetDetect.window.setToRelativeSize(0, 0.3, 1, 0.25);
andrew@2 47 loadedAudioFiles[1].setTrackType(1);
andrew@2 48 // loadedAudioFiles[1].fileLoader.onsetDetect.trackType = 0;
andrew@1 49
andrew@1 50 printf("AFTER LOADING 1\n");
andrew@1 51 printInfo();
andrew@1 52
andrew@1 53 numberOfAudioTracks = 2;
andrew@1 54
andrew@1 55
andrew@1 56 }
andrew@1 57
andrew@1 58
andrew@1 59
andrew@1 60 void RecordedMultitrackAudio::drawTracks(){
andrew@1 61
andrew@1 62 for (int i = 0;i < numberOfAudioTracks;i++){
andrew@1 63 loadedAudioFiles[i].draw();
andrew@1 64 }
andrew@2 65
andrew@2 66 ofDrawBitmapString("pitch "+ofToString(recentPitch, 2), 20, 20);
andrew@1 67 }
andrew@1 68
andrew@1 69
andrew@1 70 void RecordedMultitrackAudio::updatePosition(){
andrew@1 71 for (int i = 0;i < numberOfAudioTracks;i++)
andrew@1 72 loadedAudioFiles[i].updateToPlayPosition();
andrew@1 73 }
andrew@1 74
andrew@1 75
andrew@2 76 void RecordedMultitrackAudio::matchNewPitchEvent(const int& channel, const double& pitchIn, const double& timeIn){
andrew@2 77 //start at beginning but OPTIMISE later
andrew@2 78
andrew@2 79 if (channel <= numberOfAudioTracks){
andrew@2 80 for (int i = 0;i < loadedAudioFiles[channel].fileLoader.onsetDetect.chromaOnsets.size();i++){
andrew@2 81
andrew@2 82 if (checkMatch(loadedAudioFiles[channel].fileLoader.onsetDetect.chromaOnsets[i].aubioPitch, pitchIn)) {
andrew@2 83 loadedAudioFiles[channel].fileLoader.onsetDetect.chromaOnsets[i].matched = true;
andrew@2 84 }
andrew@2 85 else{
andrew@2 86 loadedAudioFiles[channel].fileLoader.onsetDetect.chromaOnsets[i].matched = false;
andrew@2 87 }
andrew@2 88
andrew@2 89 }
andrew@2 90 }
andrew@2 91
andrew@2 92 recentPitch = pitchIn;
andrew@2 93 }
andrew@2 94
andrew@2 95 bool RecordedMultitrackAudio::checkMatch(const double& recordedPitch, const double& livePitch){
andrew@2 96 if (abs(recordedPitch - livePitch) < 40)
andrew@2 97 return true;
andrew@2 98 else
andrew@2 99 return false;
andrew@2 100 }
andrew@2 101
andrew@2 102
andrew@1 103 void RecordedMultitrackAudio::switchScreens(){
andrew@1 104 for (int i = 0;i < numberOfAudioTracks;i++)
andrew@1 105 loadedAudioFiles[i].switchScreens();
andrew@1 106 }
andrew@1 107
andrew@1 108
andrew@1 109 void RecordedMultitrackAudio::togglePlay(){
andrew@1 110 for (int i = 0;i < numberOfAudioTracks;i++)
andrew@1 111 loadedAudioFiles[i].togglePlay();
andrew@1 112 }
andrew@1 113
andrew@1 114 void RecordedMultitrackAudio::stop(){
andrew@1 115 for (int i = 0;i < numberOfAudioTracks;i++)
andrew@1 116 loadedAudioFiles[i].stop();
andrew@1 117 }
andrew@1 118
andrew@1 119
andrew@1 120 void RecordedMultitrackAudio::printInfo(){
andrew@1 121 loadedAudioFiles[0].fileLoader.onsetDetect.printChromaInfo();
andrew@1 122 loadedAudioFiles[0].printEvents();
andrew@1 123 }
andrew@1 124
andrew@1 125 void RecordedMultitrackAudio::windowResized(const int& w, const int& h){
andrew@1 126 for (int i = 0;i < numberOfAudioTracks;i++)
andrew@1 127 loadedAudioFiles[i].windowResized(w, h);
andrew@1 128 }
andrew@1 129
andrew@1 130 void RecordedMultitrackAudio::zoomIn(){
andrew@1 131 for (int i = 0;i < numberOfAudioTracks;i++)
andrew@1 132 loadedAudioFiles[i].fileLoader.zoomIn();
andrew@1 133 }
andrew@1 134
andrew@1 135 void RecordedMultitrackAudio::zoomOut(){
andrew@1 136 for (int i = 0;i < numberOfAudioTracks;i++)
andrew@1 137 loadedAudioFiles[i].fileLoader.zoomOut();
andrew@1 138 }
andrew@1 139
andrew@1 140