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