annotate src/testApp.cpp @ 0:c4f9e49226eb

Initialising repository. Live osc input registered. Files analysed offline.
author Andrew N Robertson <andrew.robertson@eecs.qmul.ac.uk>
date Tue, 31 Jan 2012 13:54:17 +0000
parents
children 852173ca8365
rev   line source
andrew@0 1 #include "testApp.h"
andrew@0 2 #include "stdio.h"
andrew@0 3 //#include "aubio.h"
andrew@0 4 #include <iostream>
andrew@0 5 #include <cstring>
andrew@0 6 #include <string>
andrew@0 7 #include <cstdlib>
andrew@0 8
andrew@0 9
andrew@0 10 const double samplingFrequency = 44100.0;
andrew@0 11
andrew@0 12 //--------------------------------------------------------------
andrew@0 13 void testApp::setup(){
andrew@0 14
andrew@0 15 // 2 output channels,
andrew@0 16 // 0 input channels
andrew@0 17 // 22050 samples per second
andrew@0 18 // 256 samples per buffer
andrew@0 19 // 4 num buffers (latency)
andrew@0 20
andrew@0 21 //nb THIS CODE WOULD BE USEFUL IF WE EVER WANTED REAL-TIME INPUT - VIA ofSoundSteam
andrew@0 22
andrew@0 23 receiver.setup( PORT );
andrew@0 24
andrew@0 25 sampleRate = 44100;
andrew@0 26 ofSoundStreamSetup(2,0,this, sampleRate,256, 4);
andrew@0 27
andrew@0 28 ofSetFrameRate(30);
andrew@0 29
andrew@0 30 LoadedAudioHolder lah;
andrew@0 31 const char *infilename = "../../../data/sound/bach4_short1.wav";
andrew@0 32
andrew@0 33
andrew@0 34 // lah.loadAudioFile(infilename);
andrew@0 35 // loadedAudioFiles.push_back(lah);
andrew@0 36
andrew@0 37 //Take care here - we need a pointer to create new instance
andrew@0 38 //but not then delete the instance before the vector of all audio tracks has been used
andrew@0 39 //the above code using lah has problem that it deletes objects once out of the scope of testApp.setup()
andrew@0 40 //when lah is in theory no longer used - something like that possible? - at least pointers to onset detection seem deleted
andrew@0 41 loadedAudioPtr = new LoadedAudioHolder;
andrew@0 42 loadedAudioPtr->loadAudioFile(infilename);
andrew@0 43 // loadedAudioFiles.push_back(*loadedAudioPtr);
andrew@0 44 loadedAudioFiles[0] = *loadedAudioPtr;
andrew@0 45
andrew@0 46 loadedAudioFiles[0].fileLoader.onsetDetect.window.setToRelativeSize(0, 0.0, 1, 0.25);
andrew@0 47
andrew@0 48 // printf("Loaded audio %i\n", (int)numberOfAudioTracks);
andrew@0 49 printf("loaded max val is %f\n", loadedAudioFiles[0].fileLoader.onsetDetect.onsetDetector.maximumDetectionValue);
andrew@0 50
andrew@0 51 printf("BEFORE LOADING 1\n");
andrew@0 52 keyPressed('p');
andrew@0 53
andrew@0 54 loadedAudioPtr = new LoadedAudioHolder;
andrew@0 55 loadedAudioPtr->loadAudioFile(infilename);
andrew@0 56 // loadedAudioFiles.push_back(*loadedAudioPtr);
andrew@0 57 loadedAudioFiles[1] = *loadedAudioPtr;
andrew@0 58 loadedAudioFiles[1].fileLoader.onsetDetect.window.setToRelativeSize(0, 0.3, 1, 0.25);
andrew@0 59
andrew@0 60 printf("AFTER LOADING 1\n");
andrew@0 61 keyPressed('p');
andrew@0 62
andrew@0 63 numberOfAudioTracks = 2;
andrew@0 64
andrew@0 65
andrew@0 66 //audioFilePlayer.loadAudioFile(infilename);
andrew@0 67 }
andrew@0 68
andrew@0 69
andrew@0 70
andrew@0 71 //--------------------------------------------------------------
andrew@0 72 void testApp::update(){
andrew@0 73
andrew@0 74 for (int i = 0;i < numberOfAudioTracks;i++)
andrew@0 75 loadedAudioFiles[i].updateToPlayPosition();
andrew@0 76 // audioFilePlayer.updateToPlayPosition();
andrew@0 77
andrew@0 78 checkForOSCmessages();
andrew@0 79
andrew@0 80 }
andrew@0 81
andrew@0 82 void testApp::checkForOSCmessages(){
andrew@0 83 // check for waiting messages
andrew@0 84 while( receiver.hasWaitingMessages() )
andrew@0 85 {
andrew@0 86 // get the next message
andrew@0 87 ofxOscMessage m;
andrew@0 88 receiver.getNextMessage( &m );
andrew@0 89
andrew@0 90 // check for mouse moved message
andrew@0 91 if ( m.getAddress() == "/aubioPitch" )
andrew@0 92 {
andrew@0 93 float pitchIn = m.getArgAsFloat(0);
andrew@0 94 int timeIn = m.getArgAsInt32(1);
andrew@0 95 printf("AUBIO PITCH RECEIVED %f at time %i\n", pitchIn, timeIn);
andrew@0 96 }
andrew@0 97 }
andrew@0 98 }
andrew@0 99
andrew@0 100 //--------------------------------------------------------------
andrew@0 101 void testApp::draw(){
andrew@0 102
andrew@0 103 for (int i = 0;i < numberOfAudioTracks;i++){
andrew@0 104 loadedAudioFiles[i].draw();
andrew@0 105 }
andrew@0 106
andrew@0 107
andrew@0 108 eventMatcher.draw();
andrew@0 109
andrew@0 110 // audioFilePlayer.draw();
andrew@0 111
andrew@0 112 }
andrew@0 113
andrew@0 114
andrew@0 115
andrew@0 116 //--------------------------------------------------------------
andrew@0 117 void testApp::keyPressed (int key){
andrew@0 118 if (key == '-'){
andrew@0 119 volume -= 0.05;
andrew@0 120 volume = MAX(volume, 0);
andrew@0 121 } else if (key == '+'){
andrew@0 122 volume += 0.05;
andrew@0 123 volume = MIN(volume, 1);
andrew@0 124 }
andrew@0 125
andrew@0 126 if (key == 'q'){
andrew@0 127 for (int i = 0;i < numberOfAudioTracks;i++)
andrew@0 128 loadedAudioFiles[i].switchScreens();
andrew@0 129 // audioFilePlayer.switchScreens();
andrew@0 130 }
andrew@0 131
andrew@0 132 if (key == OF_KEY_RIGHT){
andrew@0 133 // audioFilePlayer.loadedAudio.setPosition(min(1.0, audioFilePlayer.loadedAudio.getPosition() + (audioFilePlayer.fileLoader.audioHolder.audioScaleSamples/(4.0*audioFilePlayer.fileLoader.audioHolder.audioVector.size()))) );
andrew@0 134
andrew@0 135 }
andrew@0 136
andrew@0 137 if (key == OF_KEY_LEFT){
andrew@0 138 // audioFilePlayer.loadedAudio.setPosition(max(0.0, audioFilePlayer.loadedAudio.getPosition() - (audioFilePlayer.fileLoader.audioHolder.audioScaleSamples/(4.0*audioFilePlayer.fileLoader.audioHolder.audioVector.size()))));
andrew@0 139
andrew@0 140 }
andrew@0 141
andrew@0 142
andrew@0 143 if (key == ' '){
andrew@0 144 for (int i = 0;i < numberOfAudioTracks;i++)
andrew@0 145 loadedAudioFiles[i].togglePlay();
andrew@0 146 // audioFilePlayer.togglePlay();
andrew@0 147 }
andrew@0 148
andrew@0 149 if (key == OF_KEY_RETURN){
andrew@0 150 for (int i = 0;i < numberOfAudioTracks;i++)
andrew@0 151 loadedAudioFiles[i].stop();
andrew@0 152
andrew@0 153 // audioFilePlayer.stop();
andrew@0 154 }
andrew@0 155
andrew@0 156
andrew@0 157 if (key == 'o'){
andrew@0 158 openNewAudioFileWithdialogBox();
andrew@0 159
andrew@0 160 }
andrew@0 161
andrew@0 162 if (key == 'p'){
andrew@0 163 loadedAudioFiles[0].fileLoader.onsetDetect.printChromaInfo();
andrew@0 164 loadedAudioFiles[0].printEvents();
andrew@0 165 }
andrew@0 166
andrew@0 167
andrew@0 168 if (key == OF_KEY_UP){
andrew@0 169 for (int i = 0;i < numberOfAudioTracks;i++)
andrew@0 170 loadedAudioFiles[i].fileLoader.zoomOut();
andrew@0 171 // audioFilePlayer.fileLoader.zoomOut();
andrew@0 172 }
andrew@0 173
andrew@0 174 if (key == OF_KEY_DOWN){
andrew@0 175 for (int i = 0;i < numberOfAudioTracks;i++)
andrew@0 176 loadedAudioFiles[i].fileLoader.zoomIn();
andrew@0 177
andrew@0 178 // audioFilePlayer.fileLoader.zoomIn();
andrew@0 179
andrew@0 180 }
andrew@0 181
andrew@0 182 }
andrew@0 183
andrew@0 184 //--------------------------------------------------------------
andrew@0 185 void testApp::keyReleased (int key){
andrew@0 186
andrew@0 187 }
andrew@0 188
andrew@0 189
andrew@0 190 //--------------------------------------------------------------
andrew@0 191 void testApp::mouseMoved(int x, int y ){
andrew@0 192
andrew@0 193
andrew@0 194 }
andrew@0 195
andrew@0 196 //--------------------------------------------------------------
andrew@0 197 void testApp::mouseDragged(int x, int y, int button){
andrew@0 198
andrew@0 199 }
andrew@0 200
andrew@0 201 //--------------------------------------------------------------
andrew@0 202 void testApp::mousePressed(int x, int y, int button){
andrew@0 203
andrew@0 204 }
andrew@0 205
andrew@0 206
andrew@0 207 //--------------------------------------------------------------
andrew@0 208 void testApp::mouseReleased(int x, int y, int button){
andrew@0 209
andrew@0 210 }
andrew@0 211
andrew@0 212 //--------------------------------------------------------------
andrew@0 213 void testApp::windowResized(int w, int h){
andrew@0 214 for (int i = 0;i < numberOfAudioTracks;i++)
andrew@0 215 loadedAudioFiles[i].windowResized(w, h);
andrew@0 216 //audioFilePlayer.windowResized(w, h);
andrew@0 217
andrew@0 218
andrew@0 219 }
andrew@0 220 //--------------------------------------------------------------
andrew@0 221 void testApp::audioRequested (float * output, int bufferSize, int nChannels){
andrew@0 222 //pan = 0.5f;
andrew@0 223 float leftScale = 1 - pan;
andrew@0 224 float rightScale = pan;
andrew@0 225
andrew@0 226 }
andrew@0 227
andrew@0 228
andrew@0 229
andrew@0 230 //--------------------------------------------------------------
andrew@0 231 void testApp::openNewAudioFileWithdialogBox(){
andrew@0 232 std::string filename;
andrew@0 233 getFilenameFromDialogBox(&filename);
andrew@0 234 loadNewAudio(filename);
andrew@0 235
andrew@0 236 }
andrew@0 237
andrew@0 238
andrew@0 239 void testApp::loadNewAudio(string soundFileName){
andrew@0 240
andrew@0 241 loadedAudioFiles[0].loadAudioFile(soundFileName);
andrew@0 242
andrew@0 243 // for (int i = 0;i < numberOfAudioTracks;i++)
andrew@0 244 // loadedAudioFiles[i].loadAudioFile(soundFileName);
andrew@0 245
andrew@0 246 // audioFilePlayer.loadAudioFile(soundFileName);
andrew@0 247
andrew@0 248 }
andrew@0 249
andrew@0 250
andrew@0 251 bool testApp::getFilenameFromDialogBox(std::string* fileNameToSave){
andrew@0 252 //this uses a pointer structure within the loader and returns true if the dialogue box was used successfully
andrew@0 253 // first, create a string that will hold the URL
andrew@0 254 string URL;
andrew@0 255
andrew@0 256 // openFile(string& URL) returns 1 if a file was picked
andrew@0 257 // returns 0 when something went wrong or the user pressed 'cancel'
andrew@0 258 int response = ofxFileDialogOSX::openFile(URL);
andrew@0 259 if(response){
andrew@0 260 // now you can use the URL
andrew@0 261 *fileNameToSave = URL;
andrew@0 262 //printf("\n filename is %s \n", soundFileName.c_str());
andrew@0 263 return true;
andrew@0 264 }
andrew@0 265 else {
andrew@0 266 // soundFileName = "OPEN canceled. ";
andrew@0 267 printf("\n open file cancelled \n");
andrew@0 268 return false;
andrew@0 269 }
andrew@0 270
andrew@0 271 }
andrew@0 272
andrew@0 273
andrew@0 274
andrew@0 275
andrew@0 276