annotate src/RecordedMultitrackAudio.cpp @ 42:6a7982661703

checked pitch tracking and added reset to onset detection
author Andrew N Robertson <andrew.robertson@eecs.qmul.ac.uk>
date Wed, 25 Apr 2012 23:25:10 +0100
parents f3ac00083d5f
children b7ad807c9cde
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@26 14
andrew@7 15 trackScreenHeight = 0.15;
andrew@26 16
andrew@1 17 printf("loaded max val is %f\n", loadedAudioFiles[0].fileLoader.onsetDetect.onsetDetector.maximumDetectionValue);
andrew@1 18
andrew@41 19 int multitrackToLoad = 18;
andrew@36 20 setDifferentMultitracks(multitrackToLoad);//command to load this set of audio files - see below
andrew@26 21
andrew@31 22 //number 7 is problematic with memory
andrew@26 23
andrew@26 24 printf("AFTER LOADING: \n");
andrew@1 25 printInfo();
andrew@7 26
andrew@1 27
andrew@31 28 numberOfAudioTracks = 4;
andrew@26 29
andrew@1 30
andrew@1 31 }
andrew@1 32
andrew@23 33 void RecordedMultitrackAudio::setDifferentMultitracks(const int& setToLoad){
andrew@23 34 const char *kickfilename ;//= "../../../data/sound/LiveDues/kick_liveDues.wav";
andrew@23 35 const char *bassfilename ;//"../../../data/sound/LiveDues/bass_upsideLive.wav";
andrew@23 36 const char *snarefilename ;
andrew@31 37 const char *guitarfilename ;
andrew@23 38
andrew@23 39 switch (setToLoad) {
andrew@23 40 case 0:
andrew@23 41 kickfilename = "../../../data/sound/LiveDues/kick_liveDues.wav";
andrew@23 42 bassfilename = "../../../data/sound/LiveDues/bass_upsideLive.wav";
andrew@23 43 snarefilename = "../../../data/sound/LiveDues/snare_liveDues.wav";
andrew@23 44 break;
andrew@23 45 case 1:
andrew@23 46 kickfilename = "../../../data/sound/DiamondMatch1/kick_bip.wav";
andrew@23 47 bassfilename = "../../../data/sound/DiamondMatch1/bass_bip.wav";
andrew@23 48 snarefilename = "../../../data/sound/DiamondMatch1/snare_bip.wav";
andrew@26 49 break;
andrew@23 50 case 2:
andrew@23 51 kickfilename = "../../../data/sound/LiveIdiot2/02kick_bip.wav";
andrew@23 52 bassfilename = "../../../data/sound/LiveIdiot2/01bass_bip.wav";
andrew@23 53 snarefilename = "../../../data/sound/LiveIdiot2/03snare_bip.wav";
andrew@23 54 break;
andrew@23 55 case 3:
andrew@23 56 kickfilename = "../../../data/sound/UistLive1/02kick_bip.wav";
andrew@23 57 bassfilename = "../../../data/sound/UistLive1/01bass_bip.wav";
andrew@23 58 snarefilename = "../../../data/sound/UistLive1/03snare_bip.wav";
andrew@23 59 break;
andrew@28 60
andrew@28 61 case 4:
andrew@39 62 kickfilename = "/Volumes/Supersaurus/TractorsAlbum/tractorsIdiotDance/tractorsSetToRecord2/Bounces/TakeTwo/02kick_bip.wav";
andrew@39 63 bassfilename = "/Volumes/Supersaurus/TractorsAlbum/tractorsIdiotDance/tractorsSetToRecord2/Bounces/TakeTwo/01bass_bip.wav";
andrew@39 64 snarefilename = "/Volumes/Supersaurus/TractorsAlbum/tractorsIdiotDance/tractorsSetToRecord2/Bounces/TakeTwo/03snare_bip.wav";
andrew@39 65 guitarfilename = "/Volumes/Supersaurus/TractorsAlbum/tractorsIdiotDance/tractorsSetToRecord2/Bounces/TakeTwo/04guitar di_bip.wav";
andrew@28 66 break;
andrew@29 67 case 5:
andrew@31 68 kickfilename = "/Users/andrew/Documents/work/Alignment/MultitrackMatch/tractorsAlign/Take12/02kick_bip.wav";
andrew@31 69 bassfilename = "/Users/andrew/Documents/work/Alignment/MultitrackMatch/tractorsAlign/Take12/01bass_bip.wav";
andrew@31 70 snarefilename = "/Users/andrew/Documents/work/Alignment/MultitrackMatch/tractorsAlign/Take12/03snare_bip.wav";
andrew@32 71 guitarfilename ="/Users/andrew/Documents/work/Alignment/MultitrackMatch/tractorsAlign/Take12/04elec_bip.wav";
andrew@29 72 break;
andrew@31 73 case 6:
andrew@31 74 kickfilename = "/Users/andrew/Documents/work/Alignment/MultitrackMatch/tractorsAlign/Take13/02kick_bip.wav";
andrew@31 75 bassfilename = "/Users/andrew/Documents/work/Alignment/MultitrackMatch/tractorsAlign/Take13/01bass_bip.wav";
andrew@31 76 snarefilename = "/Users/andrew/Documents/work/Alignment/MultitrackMatch/tractorsAlign/Take13/03snare_bip.wav";
andrew@32 77 guitarfilename ="/Users/andrew/Documents/work/Alignment/MultitrackMatch/tractorsAlign/Take13/04elec_bip.wav";
andrew@31 78 break;
andrew@31 79
andrew@31 80 case 7:
andrew@31 81 kickfilename = "/Users/andrew/Documents/work/Alignment/MultitrackMatch/tractorsAlign/Take14/02kick_bip.wav";
andrew@31 82 bassfilename = "/Users/andrew/Documents/work/Alignment/MultitrackMatch/tractorsAlign/Take14/01bass_bip.wav";
andrew@31 83 snarefilename ="/Users/andrew/Documents/work/Alignment/MultitrackMatch/tractorsAlign/Take14/03snare_bip.wav";
andrew@31 84 guitarfilename ="/Users/andrew/Documents/work/Alignment/MultitrackMatch/tractorsAlign/Take14/04elec_bip.wav";
andrew@31 85 break;
andrew@31 86
andrew@31 87 case 8:
andrew@31 88 kickfilename = "/Users/andrew/Documents/work/Alignment/MultitrackMatch/tractorsAlign/DownLine4/02kick_bip.wav";
andrew@31 89 bassfilename = "/Users/andrew/Documents/work/Alignment/MultitrackMatch/tractorsAlign/DownLine4/01bass_bip.wav";
andrew@31 90 snarefilename = "/Users/andrew/Documents/work/Alignment/MultitrackMatch/tractorsAlign/DownLine4/03snare_bip.wav";
andrew@31 91 break;
andrew@31 92
andrew@31 93 case 9:
andrew@31 94 kickfilename = "/Users/andrew/Documents/work/Alignment/MultitrackMatch/tractorsAlign/DownLine5/02kick.wav";
andrew@31 95 bassfilename = "/Users/andrew/Documents/work/Alignment/MultitrackMatch/tractorsAlign/DownLine5/01bass.wav";
andrew@31 96 snarefilename = "/Users/andrew/Documents/work/Alignment/MultitrackMatch/tractorsAlign/DownLine5/03snare.wav";
andrew@31 97 break;
andrew@31 98
andrew@33 99 case 10:
andrew@33 100 kickfilename = "/Volumes/Supersaurus/Gronk/Gronkn/Bounces/MarbleArchMultitracks/Take2/02Kick_bip.wav";
andrew@33 101 bassfilename = "/Volumes/Supersaurus/Gronk/Gronkn/Bounces/MarbleArchMultitracks/Take2/01Bass.wav";
andrew@33 102 snarefilename ="/Volumes/Supersaurus/Gronk/Gronkn/Bounces/MarbleArchMultitracks/Take2/03Snare_bip.wav";
andrew@33 103 guitarfilename ="/Volumes/Supersaurus/Gronk/Gronkn/Bounces/MarbleArchMultitracks/Take2/04Elec_SM57_bip.wav";
andrew@33 104 break;
andrew@29 105
andrew@33 106 case 11:
andrew@33 107 kickfilename = "/Volumes/Supersaurus/Gronk/Gronkn/Bounces/MarbleArchMultitracks/Take3/02Kick_bip.wav";
andrew@33 108 bassfilename = "/Volumes/Supersaurus/Gronk/Gronkn/Bounces/MarbleArchMultitracks/Take3/01Bass.wav";
andrew@33 109 snarefilename ="/Volumes/Supersaurus/Gronk/Gronkn/Bounces/MarbleArchMultitracks/Take3/03Snare_bip.wav";
andrew@33 110 guitarfilename ="/Volumes/Supersaurus/Gronk/Gronkn/Bounces/MarbleArchMultitracks/Take3/04Elec_SM57_bip.wav";
andrew@33 111 break;
andrew@33 112
andrew@33 113 case 12:
andrew@33 114 kickfilename = "/Volumes/Supersaurus/Gronk/Gronkn/Bounces/MarbleArchMultitracks/Take4/02Kick_bip.wav";
andrew@33 115 bassfilename = "/Volumes/Supersaurus/Gronk/Gronkn/Bounces/MarbleArchMultitracks/Take4/01Bass.wav";
andrew@33 116 snarefilename ="/Volumes/Supersaurus/Gronk/Gronkn/Bounces/MarbleArchMultitracks/Take4/03Snare_bip.wav";
andrew@33 117 guitarfilename ="/Volumes/Supersaurus/Gronk/Gronkn/Bounces/MarbleArchMultitracks/Take4/04Elec_SM57_bip.wav";
andrew@33 118 break;
andrew@33 119
andrew@33 120 case 13:
andrew@33 121 kickfilename = "/Volumes/Supersaurus/Gronk/Gronkn/Bounces/MarbleArchMultitracks/Take6/02Kick_bip.wav";
andrew@33 122 bassfilename = "/Volumes/Supersaurus/Gronk/Gronkn/Bounces/MarbleArchMultitracks/Take6/01Bass.wav";
andrew@33 123 snarefilename ="/Volumes/Supersaurus/Gronk/Gronkn/Bounces/MarbleArchMultitracks/Take6/03Snare_bip.wav";
andrew@36 124 guitarfilename ="/Volumes/Supersaurus/Gronk/Gronkn/Bounces/MarbleArchMultitracks/Take6/04Elec_SM57_bip.wav";
andrew@33 125 break;
andrew@34 126
andrew@34 127
andrew@34 128 case 14:
andrew@35 129 kickfilename = "/Volumes/Supersaurus/Gronk/Gronkn/Bounces/StationGateMultitracks/TakeOneShorter/02Kick_bip.wav";
andrew@35 130 bassfilename = "/Volumes/Supersaurus/Gronk/Gronkn/Bounces/StationGateMultitracks/TakeOneShorter/01Bass.wav";
andrew@35 131 snarefilename ="/Volumes/Supersaurus/Gronk/Gronkn/Bounces/StationGateMultitracks/TakeOneShorter/03Snare_bip.wav";
andrew@35 132 guitarfilename ="/Volumes/Supersaurus/Gronk/Gronkn/Bounces/StationGateMultitracks/TakeOneShorter/04Elec_SM57_bip.wav";
andrew@34 133 break;
andrew@34 134
andrew@34 135 case 15:
andrew@35 136 kickfilename = "/Volumes/Supersaurus/Gronk/Gronkn/Bounces/StationGateMultitracks/TakeTwoShorter/02Kick_bip.wav";
andrew@35 137 bassfilename = "/Volumes/Supersaurus/Gronk/Gronkn/Bounces/StationGateMultitracks/TakeTwoShorter/01Bass.wav";
andrew@35 138 snarefilename ="/Volumes/Supersaurus/Gronk/Gronkn/Bounces/StationGateMultitracks/TakeTwoShorter/03Snare_bip.wav";
andrew@35 139 guitarfilename ="/Volumes/Supersaurus/Gronk/Gronkn/Bounces/StationGateMultitracks/TakeTwoShorter/04Elec_SM57_bip.wav";
andrew@36 140 break;
andrew@36 141
andrew@36 142 case 16:
andrew@36 143 kickfilename = "/Volumes/Supersaurus/SonOfMan/FollowYourLeaders/FollowYourLeaders/Bounces/FollowMultitracks/Follow_023_D/02Kick_D112_bip.wav";
andrew@39 144 // bassfilename = "/Volumes/Supersaurus/SonOfMan/FollowYourLeaders/FollowYourLeaders/Bounces/FollowMultitracks/Follow_023_D/01Bass.wav";
andrew@39 145 snarefilename = "/Volumes/Supersaurus/SonOfMan/FollowYourLeaders/FollowYourLeaders/Bounces/FollowMultitracks/Follow_023_D/03Snare_Top_bip.wav";
andrew@39 146 guitarfilename = "/Volumes/Supersaurus/SonOfMan/FollowYourLeaders/FollowYourLeaders/Bounces/FollowMultitracks/Follow_023_D/04Elec_SM57_bip.wav";
andrew@39 147
andrew@36 148 break;
andrew@36 149
andrew@39 150 case 17:
andrew@39 151 kickfilename = "/Volumes/Supersaurus/TractorsAlbum/tractorsIdiotDance/tractorsSetToRecord2/Bounces/TakeThree/02kick_bip.wav";
andrew@39 152 bassfilename = "/Volumes/Supersaurus/TractorsAlbum/tractorsIdiotDance/tractorsSetToRecord2/Bounces/TakeThree/01bass_bip.wav";
andrew@39 153 snarefilename = "/Volumes/Supersaurus/TractorsAlbum/tractorsIdiotDance/tractorsSetToRecord2/Bounces/TakeThree/03snare_bip.wav";
andrew@39 154 guitarfilename = "/Volumes/Supersaurus/TractorsAlbum/tractorsIdiotDance/tractorsSetToRecord2/Bounces/TakeThree/04guitar di_bip.wav";
andrew@39 155 break;
andrew@36 156
andrew@41 157 case 18:
andrew@42 158 bassfilename = "/Volumes/Supersaurus/TractorsAlbum/tractorsDiamondWhite/tractorsDiamondWhite/Bounces/diamondWhiteMultiTakeTwo/01bass di_bip.wav";
andrew@42 159 kickfilename = "/Volumes/Supersaurus/TractorsAlbum/tractorsDiamondWhite/tractorsDiamondWhite/Bounces/diamondWhiteMultiTakeTwo/02kick_bip.wav";
andrew@42 160 snarefilename = "/Volumes/Supersaurus/TractorsAlbum/tractorsDiamondWhite/tractorsDiamondWhite/Bounces/diamondWhiteMultiTakeTwo/03snare bottom_bip.wav";
andrew@41 161 guitarfilename = "/Volumes/Supersaurus/TractorsAlbum/tractorsDiamondWhite/tractorsDiamondWhite/Bounces/diamondWhiteMultiTakeTwo/04guitar di_bip.wav";
andrew@42 162 break;
andrew@42 163
andrew@36 164
andrew@29 165
andrew@23 166 }
andrew@39 167 if (kickfilename != NULL)
andrew@23 168 loadAudioTrack(kickfilename, 0);
andrew@39 169
andrew@39 170 if (bassfilename != NULL){
andrew@39 171 printf("BASSfilename: %s\n", bassfilename);
andrew@39 172 loadAudioTrack(bassfilename, 1);
andrew@39 173 }
andrew@39 174
andrew@39 175 if (snarefilename != NULL)
andrew@23 176 loadAudioTrack(snarefilename, 2);
andrew@31 177
andrew@31 178 if (guitarfilename != NULL)
andrew@31 179 loadAudioTrack(guitarfilename, 3);
andrew@23 180
andrew@23 181 }
andrew@23 182
andrew@23 183 void RecordedMultitrackAudio::loadAudioTrack(std::string name, const int& channel){
andrew@23 184 //kick - track type 0
andrew@23 185 //bass - type 1
andrew@23 186 //snare type 2
andrew@23 187 if (channel >= 0 && channel <= 4){
andrew@23 188 loadedAudioPtr = new LoadedAudioHolder;
andrew@38 189 //set tracktype before we do analysis
andrew@38 190 //so we dont do unnecessary chroma and pitch calculations
andrew@38 191 loadedAudioPtr->setTrackType(channel);
andrew@23 192 loadedAudioPtr->loadAudioFile(name);
andrew@38 193
andrew@23 194 loadedAudioFiles[channel] = *loadedAudioPtr;
andrew@23 195 loadedAudioFiles[channel].fileLoader.onsetDetect.window.setToRelativeSize(0, trackScreenHeight*channel, 1, trackScreenHeight);
andrew@38 196 //loadedAudioFiles[channel].setTrackType(channel);
andrew@23 197 }
andrew@23 198 }
andrew@23 199
andrew@1 200
andrew@1 201
andrew@1 202 void RecordedMultitrackAudio::drawTracks(){
andrew@1 203
andrew@1 204 for (int i = 0;i < numberOfAudioTracks;i++){
andrew@1 205 loadedAudioFiles[i].draw();
andrew@1 206 }
andrew@1 207 }
andrew@1 208
andrew@1 209
andrew@1 210 void RecordedMultitrackAudio::updatePosition(){
andrew@1 211 for (int i = 0;i < numberOfAudioTracks;i++)
andrew@1 212 loadedAudioFiles[i].updateToPlayPosition();
andrew@1 213 }
andrew@1 214
andrew@9 215 void RecordedMultitrackAudio::updatePositionToMillis(const double& millis){
andrew@9 216 for (int i = 0;i < numberOfAudioTracks;i++)
andrew@9 217 loadedAudioFiles[i].updateToMillisPosition(millis);
andrew@9 218 }
andrew@2 219
andrew@1 220 void RecordedMultitrackAudio::switchScreens(){
andrew@1 221 for (int i = 0;i < numberOfAudioTracks;i++)
andrew@1 222 loadedAudioFiles[i].switchScreens();
andrew@1 223 }
andrew@1 224
andrew@1 225
andrew@1 226 void RecordedMultitrackAudio::togglePlay(){
andrew@1 227 for (int i = 0;i < numberOfAudioTracks;i++)
andrew@1 228 loadedAudioFiles[i].togglePlay();
andrew@1 229 }
andrew@1 230
andrew@1 231 void RecordedMultitrackAudio::stop(){
andrew@1 232 for (int i = 0;i < numberOfAudioTracks;i++)
andrew@1 233 loadedAudioFiles[i].stop();
andrew@1 234 }
andrew@1 235
andrew@1 236
andrew@1 237 void RecordedMultitrackAudio::printInfo(){
andrew@1 238 loadedAudioFiles[0].fileLoader.onsetDetect.printChromaInfo();
andrew@1 239 loadedAudioFiles[0].printEvents();
andrew@1 240 }
andrew@1 241
andrew@1 242 void RecordedMultitrackAudio::windowResized(const int& w, const int& h){
andrew@1 243 for (int i = 0;i < numberOfAudioTracks;i++)
andrew@1 244 loadedAudioFiles[i].windowResized(w, h);
andrew@1 245 }
andrew@1 246
andrew@1 247 void RecordedMultitrackAudio::zoomIn(){
andrew@1 248 for (int i = 0;i < numberOfAudioTracks;i++)
andrew@1 249 loadedAudioFiles[i].fileLoader.zoomIn();
andrew@1 250 }
andrew@1 251
andrew@1 252 void RecordedMultitrackAudio::zoomOut(){
andrew@1 253 for (int i = 0;i < numberOfAudioTracks;i++)
andrew@1 254 loadedAudioFiles[i].fileLoader.zoomOut();
andrew@1 255 }
andrew@1 256
andrew@1 257