annotate src/testApp.cpp @ 2:fa2af670b5c5 tip

SoundFileLoader might have moved
author Andrew N Robertson <andrew.robertson@eecs.qmul.ac.uk>
date Fri, 06 Jan 2012 00:23:26 +0000
parents ba2a17cf81bf
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@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 ofBackground(255,255,255);
andrew@0 16
andrew@1 17
andrew@0 18 // 2 output channels,
andrew@0 19 // 0 input channels
andrew@0 20 // 22050 samples per second
andrew@0 21 // 256 samples per buffer
andrew@0 22 // 4 num buffers (latency)
andrew@0 23
andrew@0 24 //nb THIS CODE WOULD BE USEFUL IF WE EVER WANTED REAL-TIME INPUT - VIA ofSoundSteam
andrew@0 25
andrew@0 26
andrew@0 27 // ofSetDataPathRoot("../bin/data/");
andrew@0 28
andrew@0 29 //DONT NEED ANY OF THIS
andrew@0 30 sampleRate = 44100;
andrew@0 31 // phase = 0;
andrew@0 32 // phaseAdder = 0.0f;
andrew@0 33 // phaseAdderTarget = 0.0f;
andrew@0 34 volume = 0.1f;
andrew@0 35 bNoise = false;
andrew@0 36 lAudio = new float[256];
andrew@0 37 rAudio = new float[256];
andrew@0 38 ofSoundStreamSetup(2,0,this, sampleRate,256, 4);
andrew@0 39 //UNTIL HERE
andrew@0 40
andrew@0 41
andrew@0 42 ofSetFrameRate(60);
andrew@0 43
andrew@1 44 // fvec_t * my_fvec_t;
andrew@1 45 // aubio_onset_t* my_aubio_result;
andrew@1 46 // aubio_onsetdetection_t * my_onset_detection;
andrew@0 47
andrew@0 48 audioScale = 1000.0;
andrew@0 49
andrew@1 50
andrew@0 51
andrew@0 52 //int readcount = 0; // counts number of samples read from sound file
andrew@0 53
andrew@0 54 //string inputFilename = "sound/GetIntoTheGroove.wav";// input file name placed in bin
andrew@0 55
andrew@1 56
andrew@0 57
andrew@0 58 moveOn = true;
andrew@0 59
andrew@0 60 //loading audio files
andrew@0 61
andrew@0 62 const char *infilename = "../../../data/sound/bach4_short1.wav";
andrew@0 63 loadNewAudio(infilename);
andrew@0 64
andrew@0 65 audioPlaying = false;
andrew@0 66
andrew@0 67 drawSpectralDifferenceFunction = false;
andrew@0 68
andrew@0 69 screenToDraw = 1;
andrew@0 70
andrew@0 71
andrew@0 72 }
andrew@0 73
andrew@0 74
andrew@0 75 void testApp::initialiseVariables(){
andrew@0 76
andrew@1 77 // chromoGramm.initialise(FRAMESIZE,2048);//framesize 512 and hopsize 2048
andrew@0 78 }
andrew@0 79
andrew@0 80
andrew@0 81 //--------------------------------------------------------------
andrew@0 82 void testApp::update(){
andrew@0 83
andrew@1 84 audioPosition = loadedAudio.getPosition() * fileLoader.totalNumberOfFrames;//frameIndex;//the position in number of frames
andrew@1 85 fileLoader.chromaAnalysis.currentPlayingFrame = audioPosition;
andrew@1 86 audioPosition = (int) audioPosition % fileLoader.chromaAnalysis.scrollWidth ;
andrew@1 87 audioPosition /= fileLoader.chromaAnalysis.scrollWidth;
andrew@0 88
andrew@1 89 fileLoader.audioHolder.playPosition = loadedAudio.getPosition() * fileLoader.audioHolder.audioVector.size();
andrew@0 90 }
andrew@0 91
andrew@0 92 //--------------------------------------------------------------
andrew@0 93 void testApp::draw(){
andrew@0 94 switch (screenToDraw){
andrew@0 95 case 0:
andrew@0 96 if (drawSpectralDifferenceFunction)
andrew@1 97 fileLoader.chromaAnalysis.drawSpectralDifference();
andrew@0 98 else
andrew@1 99 drawDoubleMatrix(&fileLoader.chromaAnalysis.chromaMatrix);
andrew@0 100
andrew@1 101 fileLoader.chromaAnalysis.drawEnergyVectorFromPointer();
andrew@1 102
andrew@0 103 ofSetColor(0xFFFFFF);
andrew@0 104 ofLine(audioPosition*width, 0, audioPosition*width, height);
andrew@0 105 break;
andrew@0 106 case 1:
andrew@0 107 // audioHolder.drawAudioVectorMillis(1000, 1000+audioScale);
andrew@1 108 fileLoader.audioHolder.drawAudioVectorSamples(fileLoader.audioHolder.playPosition - fileLoader.audioHolder.audioScaleSamples*0.5, fileLoader.audioHolder.playPosition+fileLoader.audioHolder.audioScaleSamples*0.5);
andrew@0 109 ofSetColor(100,100,100);
andrew@0 110 ofLine(width/2, 0, width/2, height);
andrew@0 111 break;
andrew@0 112 }
andrew@0 113
andrew@0 114
andrew@0 115
andrew@0 116 //ofSetColor(255,0,0);
andrew@0 117 //drawEnergyVectorFromPointer(&audioVector);
andrew@0 118
andrew@0 119
andrew@0 120
andrew@0 121 ofDrawBitmapString(soundFileName,80,480);
andrew@0 122
andrew@0 123 }
andrew@0 124
andrew@0 125
andrew@0 126
andrew@0 127 void testApp::drawDoubleMatrix(DoubleMatrix* dMatrix){
andrew@0 128 //used to draw the chromagram matrix
andrew@0 129 int matrixSize = (*dMatrix).size();
andrew@0 130 if (matrixSize > 0){
andrew@0 131
andrew@0 132 float screenHeight = ofGetHeight() ;
andrew@0 133 float screenWidth = ofGetWidth();
andrew@0 134 float heightFactor = 8;
andrew@0 135 int i, j, startingFrame;
andrew@1 136 startingFrame = fileLoader.chromaAnalysis.currentPlayingFrame / fileLoader.chromaAnalysis.scrollWidth;//i.e. number of scroll widths in
andrew@1 137 startingFrame *= fileLoader.chromaAnalysis.scrollWidth;//starting frame in terms of energy frames
andrew@0 138 startingFrame /= CHROMA_CONVERSION_FACTOR; //in terms of chroma frames
andrew@0 139
andrew@1 140 float chromoLength = fileLoader.chromaAnalysis.scrollWidth/CHROMA_CONVERSION_FACTOR;
andrew@0 141 for (i = 0; i < chromoLength; i++){
andrew@0 142 j = i + startingFrame;
andrew@0 143 for (int y = 0;y < 12;y++){
andrew@0 144
andrew@0 145 if (j < matrixSize)
andrew@0 146 ofSetColor(0,0,255 * (*dMatrix)[j][11-y]);
andrew@0 147 else
andrew@0 148 ofSetColor(0,0,0);
andrew@0 149
andrew@0 150 ofRect(i*screenWidth/chromoLength,y*screenHeight/12,screenWidth/chromoLength,screenHeight/12);
andrew@0 151 }//end y
andrew@0 152 }//end i
andrew@0 153
andrew@0 154 }///end if matrix has content
andrew@0 155 else{
andrew@0 156 printf("Error - please load audio first");
andrew@0 157 }
andrew@0 158
andrew@0 159
andrew@0 160 }
andrew@0 161
andrew@0 162
andrew@0 163
andrew@1 164 /*
andrew@0 165 void testApp::loadLibSndFile(const char *infilename){
andrew@0 166
andrew@0 167 if (!sf_close(infile)){
andrew@0 168 printf("closed sndfile okay \n");
andrew@0 169 }
andrew@0 170
andrew@0 171 // Open Input File with lib snd file
andrew@0 172 if (! (infile = sf_open (infilename, SFM_READ, &sfinfo)))
andrew@0 173 { // Open failed
andrew@0 174 printf ("SF OPEN routine Not able to open input file %s.\n", infilename) ;
andrew@0 175 // Print the error message from libsndfile.
andrew@0 176 puts (sf_strerror (NULL)) ;
andrew@0 177
andrew@0 178 } else{
andrew@0 179 printf("SF OPEN : file %s okay, ", infilename);
andrew@0 180 printf("number of channels is %i\n", sfinfo.channels);
andrew@0 181 sndfileInfoString = "Opened okay ";
andrew@0 182
andrew@0 183 };
andrew@0 184
andrew@0 185 }
andrew@1 186 */
andrew@1 187 /*
andrew@0 188 void testApp::processAudioToDoubleMatrix(Chromagram* chromaG, DoubleMatrix* myDoubleMatrix, DoubleVector* energyVector){
andrew@0 189
andrew@0 190 myDoubleMatrix->clear();
andrew@0 191 energyVector->clear();
andrew@0 192
andrew@0 193 audioHolder.audioVector.clear();
andrew@0 194 audioHolder.audioMatrix.clear();
andrew@0 195
andrew@0 196 // energyIndex = 0;
andrew@0 197 // frameIndex = 0;
andrew@0 198 // chromaIndex = 0;// WHY NEED THIS?
andrew@0 199 chromaG->initialise(FRAMESIZE,2048);//framesize 512 and hopsize 2048
andrew@0 200 chromaG->maximumChromaValue = 0;
andrew@0 201
andrew@0 202
andrew@0 203
andrew@0 204
andrew@0 205 // HERE IS THE CLASSIC LOADING FILE CODE
andrew@0 206 //DEALS WITH MORE THAN MONO
andrew@0 207 int channels = sfinfo.channels;
andrew@0 208 int blocksize = FRAMESIZE;
andrew@0 209
andrew@0 210 float buf [channels * blocksize] ;
andrew@0 211 int k, m, readcount ;
andrew@0 212
andrew@0 213 DoubleVector d;
andrew@0 214 while ((readcount = sf_readf_float (infile, buf, blocksize)) > 0){
andrew@0 215 for (k = 0 ; k < readcount ; k++){
andrew@0 216 d.clear();
andrew@0 217 for (m = 0 ; m < channels ; m++){
andrew@0 218 d.push_back(buf [k * channels + m]);
andrew@0 219 // fprintf (outfile, " % 12.10f", buf [k * channels + m]) ;
andrew@0 220 // fprintf (outfile, "\n") ;
andrew@0 221 if (m == 0){
andrew@0 222 //makes the vector hold the mono file
andrew@0 223 //this is the one we use for chromagram analysis etc
andrew@0 224 audioHolder.audioVector.push_back(buf[k * channels + 0]);
andrew@0 225 frame[k] = buf[k*channels + 0];
andrew@0 226 }
andrew@0 227
andrew@0 228 }
andrew@0 229 audioHolder.audioMatrix.push_back(d);
andrew@0 230 //storing the full soundfile in multiple channels in the audioMatrix
andrew@0 231 }
andrew@0 232
andrew@0 233
andrew@0 234 chromaG->processframe(frame);
andrew@0 235
andrew@0 236 if (chromaG->chromaready)
andrew@0 237 {
andrew@0 238 DoubleVector d;
andrew@0 239
andrew@0 240 for (int i = 0;i<12;i++){
andrew@0 241 //chromoGramVector[chromaIndex][i] = chromoGramm.rawChroma[i] / chromoGramm.maximumChromaValue;
andrew@0 242 d.push_back(chromaG->rawChroma[i]);// / chromaG->maximumChromaValue);
andrew@0 243
andrew@0 244 }
andrew@0 245
andrew@0 246 myDoubleMatrix->push_back(d);
andrew@0 247
andrew@0 248 //There was a method to detect chord but deleted
andrew@0 249 // chord.C_Detect(chromoGramm.chroma,chromoGramm.chroma_low);
andrew@0 250 // rootChord[chromaIndex] = chord.root;
andrew@0 251
andrew@0 252
andrew@0 253 }//end if chromagRamm ready
andrew@0 254
andrew@0 255 // frameIndex++;
andrew@0 256
andrew@0 257 //get energy of the current frame and wait
andrew@0 258 double energyValue = getEnergyOfFrame();
andrew@0 259 energyVector->push_back(energyValue);
andrew@0 260
andrew@0 261
andrew@0 262
andrew@0 263 }//end readcount
andrew@0 264
andrew@0 265
andrew@0 266
andrew@0 267 printf("Max chroma value is %f \n", chromaG->maximumChromaValue);
andrew@0 268
andrew@0 269
andrew@0 270
andrew@0 271 //normalise
andrew@0 272 int length = myDoubleMatrix->size();
andrew@0 273 printf("length of chromagram is %d frames\n", length);
andrew@0 274 length = ((*myDoubleMatrix)[0]).size();
andrew@0 275 printf("height of dmatrix is %d\n", length);
andrew@0 276
andrew@0 277 for (int i = 0; i < myDoubleMatrix->size();i++){
andrew@0 278 for (int j = 0; j < ((*myDoubleMatrix)[0]).size();j++){
andrew@0 279 (*myDoubleMatrix)[i][j] /= chromaG->maximumChromaValue;
andrew@0 280 }
andrew@0 281 }
andrew@0 282
andrew@0 283
andrew@0 284 printf("size of energy vector is %d \n", (int) energyVector->size());
andrew@0 285
andrew@0 286 totalNumberOfFrames = (int) energyVector->size();//frameIndex;//used to use this - but switch to energy vector's size instead
andrew@0 287
andrew@0 288 // printf("Total frames %i energy index %i and Chroma index %i \n", frameIndex, energyIndex, chromaIndex);
andrew@0 289
andrew@0 290 printf("audio vector size is %i\n", (int) audioHolder.audioVector.size());
andrew@0 291 audioHolder.length = (int) audioHolder.audioVector.size();
andrew@0 292 }
andrew@0 293
andrew@1 294 */
andrew@0 295 //--------------------------------------------------------------
andrew@0 296 void testApp::keyPressed (int key){
andrew@0 297 if (key == '-'){
andrew@0 298 volume -= 0.05;
andrew@0 299 volume = MAX(volume, 0);
andrew@0 300 } else if (key == '+'){
andrew@0 301 volume += 0.05;
andrew@0 302 volume = MIN(volume, 1);
andrew@0 303 }
andrew@0 304
andrew@0 305 if (key == 'q')
andrew@0 306 screenToDraw = 1 - screenToDraw;
andrew@0 307
andrew@0 308 if (key == OF_KEY_DOWN){
andrew@1 309 if (fileLoader.chromaAnalysis.scrollWidth > 600)
andrew@1 310 fileLoader.chromaAnalysis.scrollWidth += 400;
andrew@0 311 else
andrew@1 312 fileLoader.chromaAnalysis.scrollWidth *= 2;
andrew@0 313 }
andrew@0 314
andrew@0 315 if (key == OF_KEY_RIGHT){
andrew@1 316 loadedAudio.setPosition(min(1.0, loadedAudio.getPosition() + (fileLoader.audioHolder.audioScaleSamples/(4.0*fileLoader.audioHolder.audioVector.size()))) );
andrew@0 317 // audioHolder.playPosition = loadedAudio.getPosition() * audioHolder.audioVector.size();
andrew@0 318 }
andrew@0 319
andrew@0 320 if (key == OF_KEY_LEFT){
andrew@1 321 loadedAudio.setPosition(max(0.0, loadedAudio.getPosition() - (fileLoader.audioHolder.audioScaleSamples/(4.0*fileLoader.audioHolder.audioVector.size()))));
andrew@0 322 // audioHolder.playPosition = loadedAudio.getPosition() * audioHolder.audioVector.size();
andrew@0 323 }
andrew@0 324
andrew@0 325
andrew@0 326 if (key == OF_KEY_UP){
andrew@1 327 if (fileLoader.chromaAnalysis.scrollWidth > 600)
andrew@1 328 fileLoader.chromaAnalysis.scrollWidth -= 400;
andrew@0 329 else
andrew@1 330 fileLoader.chromaAnalysis.scrollWidth /= 2;
andrew@0 331 }
andrew@0 332
andrew@0 333 if (key == ' '){
andrew@0 334 if (!audioPlaying) {
andrew@0 335 loadedAudio.play();
andrew@0 336 loadedAudio.setPaused(false);
andrew@0 337 audioPlaying = true;
andrew@0 338 audioPaused = false;
andrew@0 339 }
andrew@0 340 else{
andrew@0 341 audioPaused = !audioPaused;
andrew@0 342 loadedAudio.setPaused(audioPaused);
andrew@0 343 }
andrew@0 344
andrew@0 345 }
andrew@0 346
andrew@0 347 if (key == OF_KEY_RETURN){
andrew@0 348 audioPlaying = false;
andrew@0 349 loadedAudio.setPaused(true);
andrew@0 350 loadedAudio.setPosition(0.0);
andrew@0 351 }
andrew@0 352
andrew@0 353
andrew@0 354 if (key == 'o'){
andrew@0 355 openNewAudioFileWithdialogBox();
andrew@0 356 }
andrew@0 357
andrew@0 358
andrew@0 359 if (key == 'd'){
andrew@0 360 drawSpectralDifferenceFunction = !drawSpectralDifferenceFunction;
andrew@0 361 }
andrew@0 362
andrew@0 363 if (key == 'u'){
andrew@0 364 audioScale *= 2.;
andrew@1 365 fileLoader.audioHolder.audioScaleSamples *= 2.;
andrew@0 366 }
andrew@0 367
andrew@0 368 if (key == 'j'){
andrew@0 369 audioScale /= 2.;
andrew@1 370 fileLoader.audioHolder.audioScaleSamples /= 2.;
andrew@0 371 }
andrew@0 372 }
andrew@0 373
andrew@0 374 //--------------------------------------------------------------
andrew@0 375 void testApp::keyReleased (int key){
andrew@0 376
andrew@0 377 }
andrew@0 378
andrew@0 379 void testApp::openNewAudioFileWithdialogBox(){
andrew@0 380
andrew@0 381 //open audio file
andrew@0 382 string *filePtr;
andrew@0 383 filePtr = &soundFileName;
andrew@0 384
andrew@0 385 if (getFilenameFromDialogBox(filePtr)){
andrew@0 386 printf("Mainfile: Loaded name okay :\n'%s' \n", soundFileName.c_str());
andrew@0 387 }
andrew@0 388
andrew@0 389 loadNewAudio(soundFileName);
andrew@0 390
andrew@0 391 }
andrew@0 392
andrew@0 393 //--------------------------------------------------------------
andrew@0 394 void testApp::mouseMoved(int x, int y ){
andrew@0 395 width = ofGetWidth();
andrew@0 396 pan = (float)x / (float)width;
andrew@0 397 float height = (float)ofGetHeight();
andrew@0 398 float heightPct = ((height-y) / height);
andrew@1 399 xIndex = (int)(pan*fileLoader.chromaAnalysis.energyVector.size());
andrew@0 400 }
andrew@0 401
andrew@0 402 //--------------------------------------------------------------
andrew@0 403 void testApp::mouseDragged(int x, int y, int button){
andrew@0 404 width = ofGetWidth();
andrew@0 405 pan = (float)x / (float)width;
andrew@0 406 }
andrew@0 407
andrew@0 408 //--------------------------------------------------------------
andrew@0 409 void testApp::mousePressed(int x, int y, int button){
andrew@0 410 bNoise = true;
andrew@0 411 moveOn = true;
andrew@0 412 }
andrew@0 413
andrew@0 414
andrew@0 415 //--------------------------------------------------------------
andrew@0 416 void testApp::mouseReleased(int x, int y, int button){
andrew@0 417 bNoise = false;
andrew@0 418 }
andrew@0 419
andrew@0 420 //--------------------------------------------------------------
andrew@0 421 void testApp::windowResized(int w, int h){
andrew@0 422 width = w;
andrew@0 423 height = h;
andrew@0 424 }
andrew@0 425 //--------------------------------------------------------------
andrew@0 426 void testApp::audioRequested (float * output, int bufferSize, int nChannels){
andrew@0 427 //pan = 0.5f;
andrew@0 428 float leftScale = 1 - pan;
andrew@0 429 float rightScale = pan;
andrew@0 430
andrew@0 431 }
andrew@0 432
andrew@0 433
andrew@0 434 //--------------------------------------------------------------
andrew@0 435
andrew@0 436
andrew@0 437 bool testApp::getFilenameFromDialogBox(string* fileNameToSave){
andrew@0 438 //this uses a pointer structure within the loader and returns true if the dialogue box was used successfully
andrew@0 439 // first, create a string that will hold the URL
andrew@0 440 string URL;
andrew@0 441
andrew@0 442 // openFile(string& URL) returns 1 if a file was picked
andrew@0 443 // returns 0 when something went wrong or the user pressed 'cancel'
andrew@0 444 int response = ofxFileDialogOSX::openFile(URL);
andrew@0 445 if(response){
andrew@0 446 // now you can use the URL
andrew@0 447 *fileNameToSave = URL;
andrew@0 448 //printf("\n filename is %s \n", soundFileName.c_str());
andrew@0 449 return true;
andrew@0 450 }
andrew@0 451 else {
andrew@0 452 // soundFileName = "OPEN canceled. ";
andrew@0 453 printf("\n open file cancelled \n");
andrew@0 454 return false;
andrew@0 455 }
andrew@0 456
andrew@0 457 }
andrew@0 458
andrew@0 459 void testApp::openFileDialogBox(){
andrew@0 460
andrew@0 461 // first, create a string that will hold the URL
andrew@0 462 string URL;
andrew@0 463
andrew@0 464 // openFile(string& URL) returns 1 if a file was picked
andrew@0 465 // returns 0 when something went wrong or the user pressed 'cancel'
andrew@0 466 int response = ofxFileDialogOSX::openFile(URL);
andrew@0 467 if(response){
andrew@0 468 // now you can use the URL
andrew@0 469 soundFileName = URL;//"URL to open: \n "+URL;
andrew@0 470 }else {
andrew@0 471 soundFileName = "OPEN canceled. ";
andrew@0 472 }
andrew@0 473
andrew@0 474
andrew@0 475
andrew@0 476 }
andrew@0 477
andrew@0 478
andrew@0 479 void testApp::loadNewAudio(string soundFileName){
andrew@0 480
andrew@0 481 loadedAudio.loadSound(soundFileName);
andrew@0 482
andrew@0 483 //snd file method
andrew@0 484 const char *infilename = soundFileName.c_str() ;
andrew@1 485 fileLoader.loadLibSndFile(infilename);
andrew@0 486
andrew@1 487
andrew@0 488
andrew@0 489 audioPlaying = false;
andrew@0 490 }
andrew@0 491
andrew@0 492
andrew@0 493
andrew@0 494
andrew@0 495
andrew@1 496 /*
andrew@1 497
andrew@0 498 double testApp::getEnergyOfFrame(){
andrew@0 499
andrew@0 500 float totalEnergyInFrame = 0;
andrew@0 501
andrew@0 502 for (int i = 0;i<FRAMESIZE;i++){
andrew@0 503
andrew@0 504 totalEnergyInFrame += (frame[i] * frame[i]);
andrew@0 505
andrew@0 506 }
andrew@0 507 totalEnergyInFrame = sqrt(totalEnergyInFrame);
andrew@0 508
andrew@0 509 return totalEnergyInFrame;
andrew@0 510 }
andrew@0 511
andrew@1 512 */
andrew@0 513
andrew@0 514
andrew@0 515 //JUNK METHODS BEFORE SWITCHING TO VECTORS TO HOLD ENERGY AND CHROMA
andrew@0 516 //THESE ARE BETTER AS THEY ARE DYNAMIC
andrew@0 517
andrew@0 518 /*
andrew@0 519 void testApp::drawChromoGram(){
andrew@0 520 float screenHeight = ofGetHeight() ;
andrew@0 521 float screenWidth = ofGetWidth();
andrew@0 522 float heightFactor = 8;
andrew@0 523 int i, j, startingFrame;
andrew@0 524 startingFrame = currentPlayingFrame / scrollWidth;//i.e. number of scroll widths in
andrew@0 525 startingFrame *= scrollWidth;//starting frame in terms of energy frames
andrew@0 526 startingFrame /= CHROMA_CONVERSION_FACTOR; //in terms of chroma frames
andrew@0 527
andrew@0 528 float chromoLength = scrollWidth/CHROMA_CONVERSION_FACTOR;
andrew@0 529 for (i = 0; i < chromoLength; i++){
andrew@0 530 j = i + startingFrame;
andrew@0 531 for (int y = 0;y < 12;y++){
andrew@0 532 ofSetColor(255*chromoGramVector[j][11-y],0,0);
andrew@0 533 ofRect(i*screenWidth/chromoLength,y*screenHeight/12,screenWidth/chromoLength,screenHeight/12);
andrew@0 534 }//end y
andrew@0 535 }//end i
andrew@0 536
andrew@0 537 }
andrew@0 538 */
andrew@0 539
andrew@0 540
andrew@0 541
andrew@0 542 /*
andrew@0 543 void testApp::drawChromaMatrix(){
andrew@0 544 float screenHeight = ofGetHeight() ;
andrew@0 545 float screenWidth = ofGetWidth();
andrew@0 546 float heightFactor = 8;
andrew@0 547 int i, j, startingFrame;
andrew@0 548 startingFrame = currentPlayingFrame / scrollWidth;//i.e. number of scroll widths in
andrew@0 549 startingFrame *= scrollWidth;//starting frame in terms of energy frames
andrew@0 550 startingFrame /= CHROMA_CONVERSION_FACTOR; //in terms of chroma frames
andrew@0 551
andrew@0 552 float chromoLength = scrollWidth/CHROMA_CONVERSION_FACTOR;
andrew@0 553 for (i = 0; i < chromoLength; i++){
andrew@0 554 j = i + startingFrame;
andrew@0 555 for (int y = 0;y < 12;y++){
andrew@0 556 ofSetColor(0,255*chromaMatrix[j][11-y],0);
andrew@0 557 ofRect(i*screenWidth/chromoLength,y*screenHeight/12,screenWidth/chromoLength,screenHeight/12);
andrew@0 558 }//end y
andrew@0 559 }//end i
andrew@0 560
andrew@0 561 }
andrew@0 562 */
andrew@0 563
andrew@0 564
andrew@0 565
andrew@0 566
andrew@0 567 /*
andrew@0 568
andrew@0 569
andrew@0 570 int readcount = 1; // counts number of samples read from sound file
andrew@0 571 printf("processing audio from doublematrix \n");
andrew@0 572
andrew@0 573 while(readcount != 0 && moveOn == true)
andrew@0 574 {
andrew@0 575
andrew@0 576 // read FRAMESIZE samples from 'infile' and save in 'data'
andrew@0 577 readcount = sf_read_float(infile, frame, FRAMESIZE);
andrew@0 578
andrew@0 579
andrew@0 580 for (int i = 0;i < FRAMESIZE;i++)
andrew@0 581 audioHolder.audioVector.push_back(frame[i]);
andrew@0 582
andrew@0 583 printf("frame%f\n", frame[0]);
andrew@0 584 //processing frame - downsampled to 11025Hz
andrew@0 585 //8192 samples per chroma frame
andrew@0 586 chromaG->processframe(frame);
andrew@0 587
andrew@0 588 if (chromaG->chromaready)
andrew@0 589 {
andrew@0 590 DoubleVector d;
andrew@0 591
andrew@0 592 for (int i = 0;i<12;i++){
andrew@0 593 //chromoGramVector[chromaIndex][i] = chromoGramm.rawChroma[i] / chromoGramm.maximumChromaValue;
andrew@0 594 d.push_back(chromaG->rawChroma[i]);// / chromaG->maximumChromaValue);
andrew@0 595
andrew@0 596 }
andrew@0 597
andrew@0 598 myDoubleMatrix->push_back(d);
andrew@0 599
andrew@0 600 //There was a method to detect chord but deleted
andrew@0 601 // chord.C_Detect(chromoGramm.chroma,chromoGramm.chroma_low);
andrew@0 602 // rootChord[chromaIndex] = chord.root;
andrew@0 603
andrew@0 604
andrew@0 605 }//end if chromagRamm ready
andrew@0 606
andrew@0 607 //printf("calling drawSndFile %i", frameIndex);
andrew@0 608 // frameIndex++;
andrew@0 609
andrew@0 610 //get energy of the current frame and wait
andrew@0 611 double energyValue = getEnergyOfFrame();
andrew@0 612 energyVector->push_back(energyValue);
andrew@0 613
andrew@0 614
andrew@0 615 }//end while readcount
andrew@0 616
andrew@0 617
andrew@1 618 void testApp::drawEnergyVectorFromPointer(DoubleVector* energyVec){
andrew@1 619
andrew@1 620 ofSetColor(0xFF0066);
andrew@1 621 float screenHeight = ofGetHeight() ;
andrew@1 622 float screenWidth = ofGetWidth();
andrew@1 623 float heightFactor = 8;
andrew@1 624 int i, j, startingFrame;
andrew@1 625 startingFrame = currentPlayingFrame / scrollWidth;//i.e. number of scroll widths in
andrew@1 626 startingFrame *= scrollWidth;
andrew@1 627
andrew@1 628 for (i = 0; i < scrollWidth - 1; i++){
andrew@1 629 j = i + startingFrame;
andrew@1 630 if (j < (*energyVec).size())
andrew@1 631 ofLine(i*screenWidth/scrollWidth, screenHeight - ((*energyVec)[j]*screenHeight/heightFactor),
andrew@1 632 screenWidth*(i+1)/scrollWidth, screenHeight - ((*energyVec)[j+1]*screenHeight/heightFactor));
andrew@1 633
andrew@1 634 }
andrew@1 635 }
andrew@1 636
andrew@1 637 void testApp::drawSpectralDifference(DoubleMatrix* dMatrix){
andrew@1 638 int matrixSize = (*dMatrix).size();
andrew@1 639 if (matrixSize > 0){
andrew@1 640
andrew@1 641 float screenHeight = ofGetHeight() ;
andrew@1 642 float screenWidth = ofGetWidth();
andrew@1 643 float heightFactor = 8;
andrew@1 644 double difference;
andrew@1 645 int i, j, startingFrame;
andrew@1 646 startingFrame = currentPlayingFrame / scrollWidth;//i.e. number of scroll widths in
andrew@1 647 startingFrame *= scrollWidth;//starting frame in terms of energy frames
andrew@1 648 startingFrame /= CHROMA_CONVERSION_FACTOR; //in terms of chroma frames
andrew@1 649
andrew@1 650 float chromoLength = scrollWidth/CHROMA_CONVERSION_FACTOR;
andrew@1 651 for (i = 1; i < chromoLength; i++){//changed to add 1
andrew@1 652 j = i + startingFrame;
andrew@1 653 for (int y = 0;y < 12;y++){
andrew@1 654
andrew@1 655 if (j < matrixSize)
andrew@1 656 difference = (*dMatrix)[j][11-y] - (*dMatrix)[j-1][11-y];
andrew@1 657 else
andrew@1 658 difference = 0;
andrew@1 659
andrew@1 660 if (difference < 0)
andrew@1 661 difference = 0;//half wave rectify
andrew@1 662
andrew@1 663 ofSetColor(0,0,255 * difference);//, 0;
andrew@1 664 ofRect(i*screenWidth/chromoLength,y*screenHeight/12,screenWidth/chromoLength,screenHeight/12);
andrew@1 665 }//end y
andrew@1 666 }//end i
andrew@1 667
andrew@1 668 }///end if matrix has content
andrew@1 669 else{
andrew@1 670 printf("Error - please load audio first");
andrew@1 671 }
andrew@1 672
andrew@1 673 }
andrew@1 674
andrew@0 675 */