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@10
|
16 // const char *kickfilename = "../../../data/sound/LiveDues/kick_liveDues.wav";
|
andrew@10
|
17 // const char *bassfilename = "../../../data/sound/LiveDues/bass_upsideLive.wav";
|
andrew@10
|
18 // const char *snarefilename = "../../../data/sound/LiveDues/snare_liveDues.wav";
|
andrew@10
|
19
|
andrew@10
|
20 const char *kickfilename = "../../../data/sound/DiamondMatch1/kick_bip.wav";
|
andrew@10
|
21 const char *bassfilename = "../../../data/sound/DiamondMatch1/bass_bip.wav";
|
andrew@10
|
22 const char *snarefilename = "../../../data/sound/DiamondMatch1/snare_bip.wav";
|
andrew@10
|
23
|
andrew@10
|
24
|
andrew@10
|
25
|
andrew@6
|
26 //"../../../data/sound/basicClavScale.wav";
|
andrew@1
|
27
|
andrew@1
|
28 //LoadedAudioHolder lah;
|
andrew@1
|
29 // lah.loadAudioFile(infilename);
|
andrew@1
|
30 // loadedAudioFiles.push_back(lah);
|
andrew@1
|
31
|
andrew@7
|
32 trackScreenHeight = 0.15;
|
andrew@1
|
33 //Take care here - we need a pointer to create new instance
|
andrew@1
|
34 //but not then delete the instance before the vector of all audio tracks has been used
|
andrew@1
|
35 //the above code using lah has problem that it deletes objects once out of the scope of testApp.setup()
|
andrew@1
|
36 //when lah is in theory no longer used - something like that possible? - at least pointers to onset detection seem deleted
|
andrew@2
|
37 loadedAudioPtr = new LoadedAudioHolder();
|
andrew@10
|
38 loadedAudioPtr->loadAudioFile(kickfilename);
|
andrew@1
|
39 // loadedAudioFiles.push_back(*loadedAudioPtr);
|
andrew@1
|
40 loadedAudioFiles[0] = *loadedAudioPtr;
|
andrew@1
|
41
|
andrew@7
|
42 loadedAudioFiles[0].fileLoader.onsetDetect.window.setToRelativeSize(0, 0.0, 1, trackScreenHeight);
|
andrew@2
|
43 loadedAudioFiles[0].setTrackType(0);// fileLoader.onsetDetect.trackType = 0;
|
andrew@1
|
44
|
andrew@1
|
45 // printf("Loaded audio %i\n", (int)numberOfAudioTracks);
|
andrew@1
|
46 printf("loaded max val is %f\n", loadedAudioFiles[0].fileLoader.onsetDetect.onsetDetector.maximumDetectionValue);
|
andrew@1
|
47
|
andrew@1
|
48 printf("BEFORE LOADING 1\n");
|
andrew@1
|
49 printInfo();
|
andrew@1
|
50
|
andrew@1
|
51 loadedAudioPtr = new LoadedAudioHolder;
|
andrew@10
|
52 loadedAudioPtr->loadAudioFile(bassfilename);
|
andrew@1
|
53 // loadedAudioFiles.push_back(*loadedAudioPtr);
|
andrew@1
|
54 loadedAudioFiles[1] = *loadedAudioPtr;
|
andrew@7
|
55 loadedAudioFiles[1].fileLoader.onsetDetect.window.setToRelativeSize(0, trackScreenHeight, 1, trackScreenHeight);
|
andrew@2
|
56 loadedAudioFiles[1].setTrackType(1);
|
andrew@7
|
57
|
andrew@10
|
58
|
andrew@7
|
59
|
andrew@7
|
60 loadedAudioPtr = new LoadedAudioHolder;
|
andrew@10
|
61 loadedAudioPtr->loadAudioFile(snarefilename);
|
andrew@7
|
62 // loadedAudioFiles.push_back(*loadedAudioPtr);
|
andrew@7
|
63 loadedAudioFiles[2] = *loadedAudioPtr;
|
andrew@7
|
64 loadedAudioFiles[2].fileLoader.onsetDetect.window.setToRelativeSize(0, trackScreenHeight*2, 1, trackScreenHeight);
|
andrew@7
|
65 loadedAudioFiles[2].setTrackType(2);
|
andrew@7
|
66
|
andrew@1
|
67
|
andrew@1
|
68 printf("AFTER LOADING 1\n");
|
andrew@1
|
69 printInfo();
|
andrew@1
|
70
|
andrew@7
|
71 numberOfAudioTracks = 3;
|
andrew@1
|
72
|
andrew@1
|
73
|
andrew@1
|
74 }
|
andrew@1
|
75
|
andrew@1
|
76
|
andrew@1
|
77
|
andrew@1
|
78 void RecordedMultitrackAudio::drawTracks(){
|
andrew@1
|
79
|
andrew@1
|
80 for (int i = 0;i < numberOfAudioTracks;i++){
|
andrew@1
|
81 loadedAudioFiles[i].draw();
|
andrew@1
|
82 }
|
andrew@1
|
83 }
|
andrew@1
|
84
|
andrew@1
|
85
|
andrew@1
|
86 void RecordedMultitrackAudio::updatePosition(){
|
andrew@1
|
87 for (int i = 0;i < numberOfAudioTracks;i++)
|
andrew@1
|
88 loadedAudioFiles[i].updateToPlayPosition();
|
andrew@1
|
89 }
|
andrew@1
|
90
|
andrew@9
|
91 void RecordedMultitrackAudio::updatePositionToMillis(const double& millis){
|
andrew@9
|
92 for (int i = 0;i < numberOfAudioTracks;i++)
|
andrew@9
|
93 loadedAudioFiles[i].updateToMillisPosition(millis);
|
andrew@9
|
94 }
|
andrew@2
|
95
|
andrew@1
|
96 void RecordedMultitrackAudio::switchScreens(){
|
andrew@1
|
97 for (int i = 0;i < numberOfAudioTracks;i++)
|
andrew@1
|
98 loadedAudioFiles[i].switchScreens();
|
andrew@1
|
99 }
|
andrew@1
|
100
|
andrew@1
|
101
|
andrew@1
|
102 void RecordedMultitrackAudio::togglePlay(){
|
andrew@1
|
103 for (int i = 0;i < numberOfAudioTracks;i++)
|
andrew@1
|
104 loadedAudioFiles[i].togglePlay();
|
andrew@1
|
105 }
|
andrew@1
|
106
|
andrew@1
|
107 void RecordedMultitrackAudio::stop(){
|
andrew@1
|
108 for (int i = 0;i < numberOfAudioTracks;i++)
|
andrew@1
|
109 loadedAudioFiles[i].stop();
|
andrew@1
|
110 }
|
andrew@1
|
111
|
andrew@1
|
112
|
andrew@1
|
113 void RecordedMultitrackAudio::printInfo(){
|
andrew@1
|
114 loadedAudioFiles[0].fileLoader.onsetDetect.printChromaInfo();
|
andrew@1
|
115 loadedAudioFiles[0].printEvents();
|
andrew@1
|
116 }
|
andrew@1
|
117
|
andrew@1
|
118 void RecordedMultitrackAudio::windowResized(const int& w, const int& h){
|
andrew@1
|
119 for (int i = 0;i < numberOfAudioTracks;i++)
|
andrew@1
|
120 loadedAudioFiles[i].windowResized(w, h);
|
andrew@1
|
121 }
|
andrew@1
|
122
|
andrew@1
|
123 void RecordedMultitrackAudio::zoomIn(){
|
andrew@1
|
124 for (int i = 0;i < numberOfAudioTracks;i++)
|
andrew@1
|
125 loadedAudioFiles[i].fileLoader.zoomIn();
|
andrew@1
|
126 }
|
andrew@1
|
127
|
andrew@1
|
128 void RecordedMultitrackAudio::zoomOut(){
|
andrew@1
|
129 for (int i = 0;i < numberOfAudioTracks;i++)
|
andrew@1
|
130 loadedAudioFiles[i].fileLoader.zoomOut();
|
andrew@1
|
131 }
|
andrew@1
|
132
|
andrew@1
|
133
|