annotate src/testApp.cpp @ 56:4394c9490716 tip

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