andrew@1: /* andrew@1: * RecordedMultitrackAudio.cpp andrew@1: * MultipleAudioMathcher andrew@1: * andrew@1: * Created by Andrew on 31/01/2012. andrew@1: * Copyright 2012 QMUL. All rights reserved. andrew@1: * andrew@1: */ andrew@1: andrew@1: #include "RecordedMultitrackAudio.h" andrew@1: andrew@1: andrew@1: void RecordedMultitrackAudio::loadTestAudio(){ andrew@1: andrew@23: andrew@1: andrew@6: //"../../../data/sound/basicClavScale.wav"; andrew@1: andrew@1: //LoadedAudioHolder lah; andrew@1: // lah.loadAudioFile(infilename); andrew@1: // loadedAudioFiles.push_back(lah); andrew@1: andrew@7: trackScreenHeight = 0.15; andrew@1: //Take care here - we need a pointer to create new instance andrew@1: //but not then delete the instance before the vector of all audio tracks has been used andrew@1: //the above code using lah has problem that it deletes objects once out of the scope of testApp.setup() andrew@1: //when lah is in theory no longer used - something like that possible? - at least pointers to onset detection seem deleted andrew@23: /* andrew@2: loadedAudioPtr = new LoadedAudioHolder(); andrew@10: loadedAudioPtr->loadAudioFile(kickfilename); andrew@1: loadedAudioFiles[0] = *loadedAudioPtr; andrew@7: loadedAudioFiles[0].fileLoader.onsetDetect.window.setToRelativeSize(0, 0.0, 1, trackScreenHeight); andrew@2: loadedAudioFiles[0].setTrackType(0);// fileLoader.onsetDetect.trackType = 0; andrew@23: */ andrew@1: // printf("Loaded audio %i\n", (int)numberOfAudioTracks); andrew@1: printf("loaded max val is %f\n", loadedAudioFiles[0].fileLoader.onsetDetect.onsetDetector.maximumDetectionValue); andrew@1: andrew@1: printf("BEFORE LOADING 1\n"); andrew@1: printInfo(); andrew@1: andrew@23: setDifferentMultitracks(1); andrew@7: andrew@1: printf("AFTER LOADING 1\n"); andrew@1: printInfo(); andrew@1: andrew@7: numberOfAudioTracks = 3; andrew@1: andrew@1: andrew@1: } andrew@1: andrew@23: void RecordedMultitrackAudio::setDifferentMultitracks(const int& setToLoad){ andrew@23: const char *kickfilename ;//= "../../../data/sound/LiveDues/kick_liveDues.wav"; andrew@23: const char *bassfilename ;//"../../../data/sound/LiveDues/bass_upsideLive.wav"; andrew@23: const char *snarefilename ; andrew@23: andrew@23: switch (setToLoad) { andrew@23: case 0: andrew@23: andrew@23: kickfilename = "../../../data/sound/LiveDues/kick_liveDues.wav"; andrew@23: bassfilename = "../../../data/sound/LiveDues/bass_upsideLive.wav"; andrew@23: snarefilename = "../../../data/sound/LiveDues/snare_liveDues.wav"; andrew@23: andrew@23: andrew@23: andrew@23: break; andrew@23: case 1: andrew@23: andrew@23: kickfilename = "../../../data/sound/DiamondMatch1/kick_bip.wav"; andrew@23: bassfilename = "../../../data/sound/DiamondMatch1/bass_bip.wav"; andrew@23: snarefilename = "../../../data/sound/DiamondMatch1/snare_bip.wav"; andrew@23: andrew@23: andrew@23: case 2: andrew@23: kickfilename = "../../../data/sound/LiveIdiot2/02kick_bip.wav"; andrew@23: bassfilename = "../../../data/sound/LiveIdiot2/01bass_bip.wav"; andrew@23: snarefilename = "../../../data/sound/LiveIdiot2/03snare_bip.wav"; andrew@23: andrew@23: break; andrew@23: case 3: andrew@23: andrew@23: kickfilename = "../../../data/sound/UistLive1/02kick_bip.wav"; andrew@23: bassfilename = "../../../data/sound/UistLive1/01bass_bip.wav"; andrew@23: snarefilename = "../../../data/sound/UistLive1/03snare_bip.wav"; andrew@23: andrew@23: break; andrew@23: } andrew@23: loadAudioTrack(kickfilename, 0); andrew@23: loadAudioTrack(bassfilename, 1); andrew@23: loadAudioTrack(snarefilename, 2); andrew@23: andrew@23: andrew@23: } andrew@23: andrew@23: void RecordedMultitrackAudio::loadAudioTrack(std::string name, const int& channel){ andrew@23: //kick - track type 0 andrew@23: //bass - type 1 andrew@23: //snare type 2 andrew@23: if (channel >= 0 && channel <= 4){ andrew@23: loadedAudioPtr = new LoadedAudioHolder; andrew@23: loadedAudioPtr->loadAudioFile(name); andrew@23: loadedAudioFiles[channel] = *loadedAudioPtr; andrew@23: loadedAudioFiles[channel].fileLoader.onsetDetect.window.setToRelativeSize(0, trackScreenHeight*channel, 1, trackScreenHeight); andrew@23: loadedAudioFiles[channel].setTrackType(channel); andrew@23: } andrew@23: } andrew@23: andrew@1: andrew@1: andrew@1: void RecordedMultitrackAudio::drawTracks(){ andrew@1: andrew@1: for (int i = 0;i < numberOfAudioTracks;i++){ andrew@1: loadedAudioFiles[i].draw(); andrew@1: } andrew@1: } andrew@1: andrew@1: andrew@1: void RecordedMultitrackAudio::updatePosition(){ andrew@1: for (int i = 0;i < numberOfAudioTracks;i++) andrew@1: loadedAudioFiles[i].updateToPlayPosition(); andrew@1: } andrew@1: andrew@9: void RecordedMultitrackAudio::updatePositionToMillis(const double& millis){ andrew@9: for (int i = 0;i < numberOfAudioTracks;i++) andrew@9: loadedAudioFiles[i].updateToMillisPosition(millis); andrew@9: } andrew@2: andrew@1: void RecordedMultitrackAudio::switchScreens(){ andrew@1: for (int i = 0;i < numberOfAudioTracks;i++) andrew@1: loadedAudioFiles[i].switchScreens(); andrew@1: } andrew@1: andrew@1: andrew@1: void RecordedMultitrackAudio::togglePlay(){ andrew@1: for (int i = 0;i < numberOfAudioTracks;i++) andrew@1: loadedAudioFiles[i].togglePlay(); andrew@1: } andrew@1: andrew@1: void RecordedMultitrackAudio::stop(){ andrew@1: for (int i = 0;i < numberOfAudioTracks;i++) andrew@1: loadedAudioFiles[i].stop(); andrew@1: } andrew@1: andrew@1: andrew@1: void RecordedMultitrackAudio::printInfo(){ andrew@1: loadedAudioFiles[0].fileLoader.onsetDetect.printChromaInfo(); andrew@1: loadedAudioFiles[0].printEvents(); andrew@1: } andrew@1: andrew@1: void RecordedMultitrackAudio::windowResized(const int& w, const int& h){ andrew@1: for (int i = 0;i < numberOfAudioTracks;i++) andrew@1: loadedAudioFiles[i].windowResized(w, h); andrew@1: } andrew@1: andrew@1: void RecordedMultitrackAudio::zoomIn(){ andrew@1: for (int i = 0;i < numberOfAudioTracks;i++) andrew@1: loadedAudioFiles[i].fileLoader.zoomIn(); andrew@1: } andrew@1: andrew@1: void RecordedMultitrackAudio::zoomOut(){ andrew@1: for (int i = 0;i < numberOfAudioTracks;i++) andrew@1: loadedAudioFiles[i].fileLoader.zoomOut(); andrew@1: } andrew@1: andrew@1: