andrew@0: #include "testApp.h" andrew@0: #include "stdio.h" andrew@0: //#include "aubio.h" andrew@0: #include andrew@0: #include andrew@0: #include andrew@0: #include andrew@0: andrew@0: andrew@0: const double samplingFrequency = 44100.0; andrew@0: andrew@0: //-------------------------------------------------------------- andrew@0: void testApp::setup(){ andrew@0: andrew@0: // 2 output channels, andrew@0: // 0 input channels andrew@0: // 22050 samples per second andrew@0: // 256 samples per buffer andrew@0: // 4 num buffers (latency) andrew@0: andrew@0: //nb THIS CODE WOULD BE USEFUL IF WE EVER WANTED REAL-TIME INPUT - VIA ofSoundSteam andrew@0: andrew@0: receiver.setup( PORT ); andrew@0: andrew@0: sampleRate = 44100; andrew@0: ofSoundStreamSetup(2,0,this, sampleRate,256, 4); andrew@0: andrew@0: ofSetFrameRate(30); andrew@0: andrew@0: LoadedAudioHolder lah; andrew@0: const char *infilename = "../../../data/sound/bach4_short1.wav"; andrew@0: andrew@0: andrew@0: // lah.loadAudioFile(infilename); andrew@0: // loadedAudioFiles.push_back(lah); andrew@0: andrew@0: //Take care here - we need a pointer to create new instance andrew@0: //but not then delete the instance before the vector of all audio tracks has been used andrew@0: //the above code using lah has problem that it deletes objects once out of the scope of testApp.setup() andrew@0: //when lah is in theory no longer used - something like that possible? - at least pointers to onset detection seem deleted andrew@0: loadedAudioPtr = new LoadedAudioHolder; andrew@0: loadedAudioPtr->loadAudioFile(infilename); andrew@0: // loadedAudioFiles.push_back(*loadedAudioPtr); andrew@0: loadedAudioFiles[0] = *loadedAudioPtr; andrew@0: andrew@0: loadedAudioFiles[0].fileLoader.onsetDetect.window.setToRelativeSize(0, 0.0, 1, 0.25); andrew@0: andrew@0: // printf("Loaded audio %i\n", (int)numberOfAudioTracks); andrew@0: printf("loaded max val is %f\n", loadedAudioFiles[0].fileLoader.onsetDetect.onsetDetector.maximumDetectionValue); andrew@0: andrew@0: printf("BEFORE LOADING 1\n"); andrew@0: keyPressed('p'); andrew@0: andrew@0: loadedAudioPtr = new LoadedAudioHolder; andrew@0: loadedAudioPtr->loadAudioFile(infilename); andrew@0: // loadedAudioFiles.push_back(*loadedAudioPtr); andrew@0: loadedAudioFiles[1] = *loadedAudioPtr; andrew@0: loadedAudioFiles[1].fileLoader.onsetDetect.window.setToRelativeSize(0, 0.3, 1, 0.25); andrew@0: andrew@0: printf("AFTER LOADING 1\n"); andrew@0: keyPressed('p'); andrew@0: andrew@0: numberOfAudioTracks = 2; andrew@0: andrew@0: andrew@0: //audioFilePlayer.loadAudioFile(infilename); andrew@0: } andrew@0: andrew@0: andrew@0: andrew@0: //-------------------------------------------------------------- andrew@0: void testApp::update(){ andrew@0: andrew@0: for (int i = 0;i < numberOfAudioTracks;i++) andrew@0: loadedAudioFiles[i].updateToPlayPosition(); andrew@0: // audioFilePlayer.updateToPlayPosition(); andrew@0: andrew@0: checkForOSCmessages(); andrew@0: andrew@0: } andrew@0: andrew@0: void testApp::checkForOSCmessages(){ andrew@0: // check for waiting messages andrew@0: while( receiver.hasWaitingMessages() ) andrew@0: { andrew@0: // get the next message andrew@0: ofxOscMessage m; andrew@0: receiver.getNextMessage( &m ); andrew@0: andrew@0: // check for mouse moved message andrew@0: if ( m.getAddress() == "/aubioPitch" ) andrew@0: { andrew@0: float pitchIn = m.getArgAsFloat(0); andrew@0: int timeIn = m.getArgAsInt32(1); andrew@0: printf("AUBIO PITCH RECEIVED %f at time %i\n", pitchIn, timeIn); andrew@0: } andrew@0: } andrew@0: } andrew@0: andrew@0: //-------------------------------------------------------------- andrew@0: void testApp::draw(){ andrew@0: andrew@0: for (int i = 0;i < numberOfAudioTracks;i++){ andrew@0: loadedAudioFiles[i].draw(); andrew@0: } andrew@0: andrew@0: andrew@0: eventMatcher.draw(); andrew@0: andrew@0: // audioFilePlayer.draw(); andrew@0: andrew@0: } andrew@0: andrew@0: andrew@0: andrew@0: //-------------------------------------------------------------- andrew@0: void testApp::keyPressed (int key){ andrew@0: if (key == '-'){ andrew@0: volume -= 0.05; andrew@0: volume = MAX(volume, 0); andrew@0: } else if (key == '+'){ andrew@0: volume += 0.05; andrew@0: volume = MIN(volume, 1); andrew@0: } andrew@0: andrew@0: if (key == 'q'){ andrew@0: for (int i = 0;i < numberOfAudioTracks;i++) andrew@0: loadedAudioFiles[i].switchScreens(); andrew@0: // audioFilePlayer.switchScreens(); andrew@0: } andrew@0: andrew@0: if (key == OF_KEY_RIGHT){ andrew@0: // audioFilePlayer.loadedAudio.setPosition(min(1.0, audioFilePlayer.loadedAudio.getPosition() + (audioFilePlayer.fileLoader.audioHolder.audioScaleSamples/(4.0*audioFilePlayer.fileLoader.audioHolder.audioVector.size()))) ); andrew@0: andrew@0: } andrew@0: andrew@0: if (key == OF_KEY_LEFT){ andrew@0: // audioFilePlayer.loadedAudio.setPosition(max(0.0, audioFilePlayer.loadedAudio.getPosition() - (audioFilePlayer.fileLoader.audioHolder.audioScaleSamples/(4.0*audioFilePlayer.fileLoader.audioHolder.audioVector.size())))); andrew@0: andrew@0: } andrew@0: andrew@0: andrew@0: if (key == ' '){ andrew@0: for (int i = 0;i < numberOfAudioTracks;i++) andrew@0: loadedAudioFiles[i].togglePlay(); andrew@0: // audioFilePlayer.togglePlay(); andrew@0: } andrew@0: andrew@0: if (key == OF_KEY_RETURN){ andrew@0: for (int i = 0;i < numberOfAudioTracks;i++) andrew@0: loadedAudioFiles[i].stop(); andrew@0: andrew@0: // audioFilePlayer.stop(); andrew@0: } andrew@0: andrew@0: andrew@0: if (key == 'o'){ andrew@0: openNewAudioFileWithdialogBox(); andrew@0: andrew@0: } andrew@0: andrew@0: if (key == 'p'){ andrew@0: loadedAudioFiles[0].fileLoader.onsetDetect.printChromaInfo(); andrew@0: loadedAudioFiles[0].printEvents(); andrew@0: } andrew@0: andrew@0: andrew@0: if (key == OF_KEY_UP){ andrew@0: for (int i = 0;i < numberOfAudioTracks;i++) andrew@0: loadedAudioFiles[i].fileLoader.zoomOut(); andrew@0: // audioFilePlayer.fileLoader.zoomOut(); andrew@0: } andrew@0: andrew@0: if (key == OF_KEY_DOWN){ andrew@0: for (int i = 0;i < numberOfAudioTracks;i++) andrew@0: loadedAudioFiles[i].fileLoader.zoomIn(); andrew@0: andrew@0: // audioFilePlayer.fileLoader.zoomIn(); andrew@0: andrew@0: } andrew@0: andrew@0: } andrew@0: andrew@0: //-------------------------------------------------------------- andrew@0: void testApp::keyReleased (int key){ andrew@0: andrew@0: } andrew@0: andrew@0: andrew@0: //-------------------------------------------------------------- andrew@0: void testApp::mouseMoved(int x, int y ){ andrew@0: andrew@0: andrew@0: } andrew@0: andrew@0: //-------------------------------------------------------------- andrew@0: void testApp::mouseDragged(int x, int y, int button){ andrew@0: andrew@0: } andrew@0: andrew@0: //-------------------------------------------------------------- andrew@0: void testApp::mousePressed(int x, int y, int button){ andrew@0: andrew@0: } andrew@0: andrew@0: andrew@0: //-------------------------------------------------------------- andrew@0: void testApp::mouseReleased(int x, int y, int button){ andrew@0: andrew@0: } andrew@0: andrew@0: //-------------------------------------------------------------- andrew@0: void testApp::windowResized(int w, int h){ andrew@0: for (int i = 0;i < numberOfAudioTracks;i++) andrew@0: loadedAudioFiles[i].windowResized(w, h); andrew@0: //audioFilePlayer.windowResized(w, h); andrew@0: andrew@0: andrew@0: } andrew@0: //-------------------------------------------------------------- andrew@0: void testApp::audioRequested (float * output, int bufferSize, int nChannels){ andrew@0: //pan = 0.5f; andrew@0: float leftScale = 1 - pan; andrew@0: float rightScale = pan; andrew@0: andrew@0: } andrew@0: andrew@0: andrew@0: andrew@0: //-------------------------------------------------------------- andrew@0: void testApp::openNewAudioFileWithdialogBox(){ andrew@0: std::string filename; andrew@0: getFilenameFromDialogBox(&filename); andrew@0: loadNewAudio(filename); andrew@0: andrew@0: } andrew@0: andrew@0: andrew@0: void testApp::loadNewAudio(string soundFileName){ andrew@0: andrew@0: loadedAudioFiles[0].loadAudioFile(soundFileName); andrew@0: andrew@0: // for (int i = 0;i < numberOfAudioTracks;i++) andrew@0: // loadedAudioFiles[i].loadAudioFile(soundFileName); andrew@0: andrew@0: // audioFilePlayer.loadAudioFile(soundFileName); andrew@0: andrew@0: } andrew@0: andrew@0: andrew@0: bool testApp::getFilenameFromDialogBox(std::string* fileNameToSave){ andrew@0: //this uses a pointer structure within the loader and returns true if the dialogue box was used successfully andrew@0: // first, create a string that will hold the URL andrew@0: string URL; andrew@0: andrew@0: // openFile(string& URL) returns 1 if a file was picked andrew@0: // returns 0 when something went wrong or the user pressed 'cancel' andrew@0: int response = ofxFileDialogOSX::openFile(URL); andrew@0: if(response){ andrew@0: // now you can use the URL andrew@0: *fileNameToSave = URL; andrew@0: //printf("\n filename is %s \n", soundFileName.c_str()); andrew@0: return true; andrew@0: } andrew@0: else { andrew@0: // soundFileName = "OPEN canceled. "; andrew@0: printf("\n open file cancelled \n"); andrew@0: return false; andrew@0: } andrew@0: andrew@0: } andrew@0: andrew@0: andrew@0: andrew@0: andrew@0: