annotate src/testApp.cpp @ 52:e359b9bad811

Added exporting of image and text data
author Andrew N Robertson <andrew.robertson@eecs.qmul.ac.uk>
date Tue, 17 Jul 2012 22:12:20 +0100
parents 6f6461b0d07f
children 5274e3b5479d
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@20 28 ofSetFrameRate(20);
andrew@0 29
andrew@1 30
andrew@16 31 eventMatcher.loadAudioFiles();
andrew@1 32
andrew@7 33 eventMatcher.setWindowDimensions();
andrew@52 34
andrew@52 35 outputWriter.openFile("../../../data/output.txt");
andrew@52 36
andrew@1 37 //audioFilePlayer.loadAudioFile(infilename);
andrew@1 38 }
andrew@1 39
andrew@0 40
andrew@0 41 //--------------------------------------------------------------
andrew@0 42 void testApp::update(){
andrew@9 43 eventMatcher.updatePosition();
andrew@39 44
andrew@0 45 checkForOSCmessages();
andrew@0 46
andrew@40 47 outputWriter.writeOutput(eventMatcher.synchroniser.recordedPositionTimeSent, eventMatcher.synchroniser.recordedPositionMillis, eventMatcher.synchroniser.playingPositionMillis);
andrew@40 48
andrew@0 49 }
andrew@0 50
andrew@0 51 void testApp::checkForOSCmessages(){
andrew@0 52 // check for waiting messages
andrew@0 53 while( receiver.hasWaitingMessages() )
andrew@0 54 {
andrew@0 55 // get the next message
andrew@0 56 ofxOscMessage m;
andrew@0 57 receiver.getNextMessage( &m );
andrew@0 58
andrew@0 59 // check for mouse moved message
andrew@1 60 if ( m.getAddress() == "/aubioPitch" ){
andrew@6 61 int testChannel = m.getArgAsInt32(0);
andrew@6 62 float pitchIn = m.getArgAsFloat(1);
andrew@6 63 int timeIn = m.getArgAsInt32(2);
andrew@3 64 printf("\nAUBIO PITCH RECEIVED %f at time %i\n", pitchIn, timeIn);
andrew@6 65 eventMatcher.newPitchEvent(testChannel, pitchIn, timeIn);
andrew@0 66 }
andrew@2 67
andrew@2 68 if ( m.getAddress() == "/kick" ){
andrew@6 69 // float pitchIn = m.getArgAsFloat(0);
andrew@6 70 int testChannel = m.getArgAsInt32(0);
andrew@6 71 double timeIn = m.getArgAsInt32(1);
andrew@7 72 printf("\nKICK RECEIVED at time %f\n", timeIn);
andrew@10 73
andrew@6 74 eventMatcher.newKickEvent(testChannel, timeIn);
andrew@10 75
andrew@2 76 }
andrew@2 77
andrew@2 78 if ( m.getAddress() == "/snare" ){
andrew@7 79 int testChannel = m.getArgAsInt32(0);
andrew@7 80 double timeIn = m.getArgAsInt32(1);
andrew@7 81 printf("\nSNARE RECEIVED at time %f\n", timeIn);
andrew@10 82
andrew@7 83 eventMatcher.newSnareEvent(testChannel, timeIn);
andrew@2 84 }
andrew@3 85
andrew@31 86 // check for mouse moved message
andrew@31 87 if ( m.getAddress() == "/elec" ){
andrew@32 88 int testChannel = m.getArgAsInt32(0);
andrew@32 89 double timeIn = m.getArgAsFloat(1);
andrew@32 90 float chromaIn[12];
andrew@37 91
andrew@32 92 printf("CHROMA received at time %f\n", timeIn);
andrew@31 93 for (int i = 0;i < 12;i++){
andrew@32 94 chromaIn[i] = m.getArgAsFloat(i+2);
andrew@37 95 // printf("chroma[%i]: %f\n", i, chromaIn[i]);
andrew@31 96 }
andrew@32 97 eventMatcher.newChromaEvent(testChannel, chromaIn, timeIn);
andrew@31 98 }
andrew@31 99
andrew@31 100
andrew@42 101 if (m.getAddress() == "/startWindow"){
andrew@42 102 eventMatcher.bayesianStruct.startingWindowWidth = m.getArgAsFloat(0);
andrew@42 103 }
andrew@42 104
andrew@42 105
andrew@3 106 if ( m.getAddress() == "/start" ){
andrew@3 107 printf("start!\n");
andrew@10 108 printf("STRART TIME IN %i\n", ofGetElapsedTimeMillis());
andrew@45 109 outputWriter.openFile();
andrew@3 110 eventMatcher.startPlaying();
andrew@10 111 printf("TIME OUT %i\n", ofGetElapsedTimeMillis());
andrew@3 112 }
andrew@15 113
andrew@15 114 if ( m.getAddress() == "/stop" ){
andrew@15 115 printf("stop!\n");
andrew@15 116 eventMatcher.stopPlaying();
andrew@40 117 outputWriter.closeFile();
andrew@15 118 }
andrew@15 119
andrew@50 120 if (m.getAddress() == "/marker"){
andrew@50 121 eventMatcher.goToMarker(m.getArgAsInt32(0));
andrew@50 122 }
andrew@50 123
andrew@16 124 if ( m.getAddress() == "/accompanimentRatio" ){
andrew@16 125 double time = m.getArgAsFloat(0);
andrew@16 126 double ratio = m.getArgAsFloat(1);
andrew@16 127 eventMatcher.synchroniser.setPlayingRatio(ratio, time);
andrew@16 128 }
andrew@16 129
andrew@22 130 if ( m.getAddress() == "/rescue" ){
andrew@22 131 printf("rescue!\n");
andrew@22 132 eventMatcher.rescue();
andrew@22 133 }
andrew@36 134
andrew@0 135 }
andrew@0 136 }
andrew@0 137
andrew@0 138 //--------------------------------------------------------------
andrew@0 139 void testApp::draw(){
andrew@0 140
andrew@0 141 eventMatcher.draw();
andrew@0 142
andrew@0 143 // audioFilePlayer.draw();
andrew@0 144
andrew@0 145 }
andrew@0 146
andrew@0 147
andrew@0 148
andrew@0 149 //--------------------------------------------------------------
andrew@0 150 void testApp::keyPressed (int key){
andrew@0 151 if (key == '-'){
andrew@0 152 volume -= 0.05;
andrew@0 153 volume = MAX(volume, 0);
andrew@0 154 } else if (key == '+'){
andrew@0 155 volume += 0.05;
andrew@0 156 volume = MIN(volume, 1);
andrew@0 157 }
andrew@0 158
andrew@0 159 if (key == 'q'){
andrew@1 160 eventMatcher.recordedTracks.switchScreens();
andrew@0 161 }
andrew@0 162
andrew@0 163 if (key == OF_KEY_RIGHT){
andrew@0 164 // audioFilePlayer.loadedAudio.setPosition(min(1.0, audioFilePlayer.loadedAudio.getPosition() + (audioFilePlayer.fileLoader.audioHolder.audioScaleSamples/(4.0*audioFilePlayer.fileLoader.audioHolder.audioVector.size()))) );
andrew@0 165
andrew@0 166 }
andrew@0 167
andrew@0 168 if (key == OF_KEY_LEFT){
andrew@0 169 // audioFilePlayer.loadedAudio.setPosition(max(0.0, audioFilePlayer.loadedAudio.getPosition() - (audioFilePlayer.fileLoader.audioHolder.audioScaleSamples/(4.0*audioFilePlayer.fileLoader.audioHolder.audioVector.size()))));
andrew@0 170
andrew@0 171 }
andrew@0 172
andrew@50 173 if (key == 'c'){
andrew@35 174 eventMatcher.useChromaDotProduct = !eventMatcher.useChromaDotProduct;
andrew@35 175 printf("Use dot product is %i\n", eventMatcher.useChromaDotProduct);
andrew@35 176 }
andrew@0 177
andrew@0 178 if (key == ' '){
andrew@50 179 if (!eventMatcher.startedPlaying){
andrew@50 180 eventMatcher.recordedTracks.togglePlay();
andrew@50 181 }
andrew@50 182 }
andrew@50 183 //Marker commands
andrew@50 184 if (key == 'm'){
andrew@50 185 eventMatcher.addMarkerNow();
andrew@50 186 }
andrew@50 187
andrew@52 188 if (key == 'f'){
andrew@50 189 eventMatcher.deleteMarkers();
andrew@50 190 }
andrew@50 191 if (key == 'd'){
andrew@50 192 eventMatcher.deleteNearestMarker();
andrew@50 193 }
andrew@51 194 // if (key == 's'){
andrew@51 195 // eventMatcher.markedPoints.saveMarkers();
andrew@51 196 // }
andrew@51 197
andrew@51 198 if (key == 's')
andrew@51 199 eventMatcher.markedPoints.saveFile();
andrew@50 200
andrew@51 201 if (key == 'l')
andrew@51 202 eventMatcher.markedPoints.loadFile();
andrew@50 203
andrew@50 204
andrew@50 205 if (key == '.'){
andrew@50 206 eventMatcher.moveToNextMarker();
andrew@50 207 }
andrew@50 208 if (key == ','){
andrew@50 209 eventMatcher.moveToPreviousMarker();
andrew@0 210 }
andrew@36 211
andrew@36 212 if (key == 'j'){
andrew@36 213 printf("dynamic vector scalar is %f\n", eventMatcher.bayesianStruct.posterior.scalar);
andrew@36 214 }
andrew@0 215
andrew@0 216 if (key == OF_KEY_RETURN){
andrew@1 217
andrew@0 218
andrew@1 219 eventMatcher.recordedTracks.stop();
andrew@0 220 }
andrew@0 221
andrew@0 222
andrew@0 223 if (key == 'o'){
andrew@0 224 openNewAudioFileWithdialogBox();
andrew@0 225
andrew@0 226 }
andrew@0 227
andrew@0 228 if (key == 'p'){
andrew@3 229 eventMatcher.bayesianStruct.posterior.printArray();
andrew@0 230 }
andrew@0 231
andrew@0 232
andrew@0 233 if (key == OF_KEY_UP){
andrew@1 234 eventMatcher.recordedTracks.zoomOut();
andrew@1 235
andrew@0 236 }
andrew@0 237
andrew@0 238 if (key == OF_KEY_DOWN){
andrew@1 239 eventMatcher.recordedTracks.zoomIn();
andrew@0 240 }
andrew@0 241
andrew@51 242 if (key == 'k')
andrew@50 243 eventMatcher.drawLikelihoods = !eventMatcher.drawLikelihoods;
andrew@52 244
andrew@52 245 if (key == 'g'){
andrew@52 246 eventMatcher.writeAllDistributions();
andrew@52 247 }
andrew@50 248
andrew@0 249 }
andrew@0 250
andrew@0 251 //--------------------------------------------------------------
andrew@0 252 void testApp::keyReleased (int key){
andrew@0 253
andrew@0 254 }
andrew@0 255
andrew@0 256
andrew@0 257 //--------------------------------------------------------------
andrew@0 258 void testApp::mouseMoved(int x, int y ){
andrew@0 259
andrew@0 260
andrew@0 261 }
andrew@0 262
andrew@0 263 //--------------------------------------------------------------
andrew@0 264 void testApp::mouseDragged(int x, int y, int button){
andrew@0 265
andrew@0 266 }
andrew@0 267
andrew@0 268 //--------------------------------------------------------------
andrew@0 269 void testApp::mousePressed(int x, int y, int button){
andrew@50 270 eventMatcher.mousePressed(x);
andrew@0 271 }
andrew@0 272
andrew@0 273
andrew@0 274 //--------------------------------------------------------------
andrew@0 275 void testApp::mouseReleased(int x, int y, int button){
andrew@0 276
andrew@0 277 }
andrew@0 278
andrew@0 279 //--------------------------------------------------------------
andrew@0 280 void testApp::windowResized(int w, int h){
andrew@1 281
andrew@1 282 eventMatcher.windowResized(w, h);
andrew@0 283
andrew@0 284
andrew@0 285 }
andrew@0 286 //--------------------------------------------------------------
andrew@0 287 void testApp::audioRequested (float * output, int bufferSize, int nChannels){
andrew@0 288 //pan = 0.5f;
andrew@0 289 float leftScale = 1 - pan;
andrew@0 290 float rightScale = pan;
andrew@0 291
andrew@0 292 }
andrew@0 293
andrew@0 294
andrew@0 295
andrew@0 296 //--------------------------------------------------------------
andrew@0 297 void testApp::openNewAudioFileWithdialogBox(){
andrew@0 298 std::string filename;
andrew@0 299 getFilenameFromDialogBox(&filename);
andrew@0 300 loadNewAudio(filename);
andrew@0 301
andrew@0 302 }
andrew@0 303
andrew@0 304
andrew@0 305 void testApp::loadNewAudio(string soundFileName){
andrew@0 306
andrew@1 307 eventMatcher.recordedTracks.loadedAudioFiles[0].loadAudioFile(soundFileName);
andrew@0 308
andrew@0 309 // for (int i = 0;i < numberOfAudioTracks;i++)
andrew@0 310 // loadedAudioFiles[i].loadAudioFile(soundFileName);
andrew@0 311
andrew@0 312 // audioFilePlayer.loadAudioFile(soundFileName);
andrew@0 313
andrew@0 314 }
andrew@0 315
andrew@0 316
andrew@0 317 bool testApp::getFilenameFromDialogBox(std::string* fileNameToSave){
andrew@0 318 //this uses a pointer structure within the loader and returns true if the dialogue box was used successfully
andrew@0 319 // first, create a string that will hold the URL
andrew@0 320 string URL;
andrew@0 321
andrew@0 322 // openFile(string& URL) returns 1 if a file was picked
andrew@0 323 // returns 0 when something went wrong or the user pressed 'cancel'
andrew@0 324 int response = ofxFileDialogOSX::openFile(URL);
andrew@0 325 if(response){
andrew@0 326 // now you can use the URL
andrew@0 327 *fileNameToSave = URL;
andrew@0 328 //printf("\n filename is %s \n", soundFileName.c_str());
andrew@0 329 return true;
andrew@0 330 }
andrew@0 331 else {
andrew@0 332 // soundFileName = "OPEN canceled. ";
andrew@0 333 printf("\n open file cancelled \n");
andrew@0 334 return false;
andrew@0 335 }
andrew@0 336
andrew@0 337 }
andrew@0 338
andrew@0 339
andrew@0 340
andrew@0 341
andrew@0 342