Mercurial > hg > multitrack-audio-matcher
view src/testApp.cpp @ 40:0d66ecd1f4d3
added output file writing to export alignment data
author | Andrew N Robertson <andrew.robertson@eecs.qmul.ac.uk> |
---|---|
date | Wed, 25 Apr 2012 00:24:20 +0100 |
parents | f5de07b4d733 |
children | 6a7982661703 |
line wrap: on
line source
#include "testApp.h" #include "stdio.h" //#include "aubio.h" #include <iostream> #include <cstring> #include <string> #include <cstdlib> const double samplingFrequency = 44100.0; //-------------------------------------------------------------- void testApp::setup(){ // 2 output channels, // 0 input channels // 22050 samples per second // 256 samples per buffer // 4 num buffers (latency) //nb THIS CODE WOULD BE USEFUL IF WE EVER WANTED REAL-TIME INPUT - VIA ofSoundSteam receiver.setup( PORT ); sampleRate = 44100; ofSoundStreamSetup(2,0,this, sampleRate,256, 4); ofSetFrameRate(20); eventMatcher.loadAudioFiles(); eventMatcher.setWindowDimensions(); //audioFilePlayer.loadAudioFile(infilename); } //-------------------------------------------------------------- void testApp::update(){ eventMatcher.updatePosition(); checkForOSCmessages(); outputWriter.writeOutput(eventMatcher.synchroniser.recordedPositionTimeSent, eventMatcher.synchroniser.recordedPositionMillis, eventMatcher.synchroniser.playingPositionMillis); } void testApp::checkForOSCmessages(){ // check for waiting messages while( receiver.hasWaitingMessages() ) { // get the next message ofxOscMessage m; receiver.getNextMessage( &m ); // check for mouse moved message if ( m.getAddress() == "/aubioPitch" ){ int testChannel = m.getArgAsInt32(0); float pitchIn = m.getArgAsFloat(1); int timeIn = m.getArgAsInt32(2); printf("\nAUBIO PITCH RECEIVED %f at time %i\n", pitchIn, timeIn); eventMatcher.newPitchEvent(testChannel, pitchIn, timeIn); } if ( m.getAddress() == "/kick" ){ // float pitchIn = m.getArgAsFloat(0); int testChannel = m.getArgAsInt32(0); double timeIn = m.getArgAsInt32(1); printf("\nKICK RECEIVED at time %f\n", timeIn); eventMatcher.newKickEvent(testChannel, timeIn); } if ( m.getAddress() == "/snare" ){ int testChannel = m.getArgAsInt32(0); double timeIn = m.getArgAsInt32(1); printf("\nSNARE RECEIVED at time %f\n", timeIn); eventMatcher.newSnareEvent(testChannel, timeIn); } // check for mouse moved message if ( m.getAddress() == "/elec" ){ int testChannel = m.getArgAsInt32(0); double timeIn = m.getArgAsFloat(1); float chromaIn[12]; printf("CHROMA received at time %f\n", timeIn); for (int i = 0;i < 12;i++){ chromaIn[i] = m.getArgAsFloat(i+2); // printf("chroma[%i]: %f\n", i, chromaIn[i]); } eventMatcher.newChromaEvent(testChannel, chromaIn, timeIn); } if ( m.getAddress() == "/start" ){ printf("start!\n"); printf("STRART TIME IN %i\n", ofGetElapsedTimeMillis()); eventMatcher.startPlaying(); outputWriter.openFile(); printf("TIME OUT %i\n", ofGetElapsedTimeMillis()); } if ( m.getAddress() == "/stop" ){ printf("stop!\n"); eventMatcher.stopPlaying(); outputWriter.closeFile(); } if ( m.getAddress() == "/accompanimentRatio" ){ double time = m.getArgAsFloat(0); double ratio = m.getArgAsFloat(1); eventMatcher.synchroniser.setPlayingRatio(ratio, time); } if ( m.getAddress() == "/rescue" ){ printf("rescue!\n"); eventMatcher.rescue(); } } } //-------------------------------------------------------------- void testApp::draw(){ eventMatcher.draw(); // audioFilePlayer.draw(); } //-------------------------------------------------------------- void testApp::keyPressed (int key){ if (key == '-'){ volume -= 0.05; volume = MAX(volume, 0); } else if (key == '+'){ volume += 0.05; volume = MIN(volume, 1); } if (key == 'q'){ eventMatcher.recordedTracks.switchScreens(); } if (key == OF_KEY_RIGHT){ // audioFilePlayer.loadedAudio.setPosition(min(1.0, audioFilePlayer.loadedAudio.getPosition() + (audioFilePlayer.fileLoader.audioHolder.audioScaleSamples/(4.0*audioFilePlayer.fileLoader.audioHolder.audioVector.size()))) ); } if (key == OF_KEY_LEFT){ // audioFilePlayer.loadedAudio.setPosition(max(0.0, audioFilePlayer.loadedAudio.getPosition() - (audioFilePlayer.fileLoader.audioHolder.audioScaleSamples/(4.0*audioFilePlayer.fileLoader.audioHolder.audioVector.size())))); } if (key == 'd'){ eventMatcher.useChromaDotProduct = !eventMatcher.useChromaDotProduct; printf("Use dot product is %i\n", eventMatcher.useChromaDotProduct); } if (key == ' '){ eventMatcher.recordedTracks.togglePlay(); } if (key == 'j'){ printf("dynamic vector scalar is %f\n", eventMatcher.bayesianStruct.posterior.scalar); } if (key == OF_KEY_RETURN){ eventMatcher.recordedTracks.stop(); } if (key == 'o'){ openNewAudioFileWithdialogBox(); } if (key == 'p'){ eventMatcher.bayesianStruct.posterior.printArray(); } if (key == OF_KEY_UP){ eventMatcher.recordedTracks.zoomOut(); } if (key == OF_KEY_DOWN){ eventMatcher.recordedTracks.zoomIn(); } } //-------------------------------------------------------------- void testApp::keyReleased (int key){ } //-------------------------------------------------------------- void testApp::mouseMoved(int x, int y ){ } //-------------------------------------------------------------- void testApp::mouseDragged(int x, int y, int button){ } //-------------------------------------------------------------- void testApp::mousePressed(int x, int y, int button){ } //-------------------------------------------------------------- void testApp::mouseReleased(int x, int y, int button){ } //-------------------------------------------------------------- void testApp::windowResized(int w, int h){ eventMatcher.windowResized(w, h); } //-------------------------------------------------------------- void testApp::audioRequested (float * output, int bufferSize, int nChannels){ //pan = 0.5f; float leftScale = 1 - pan; float rightScale = pan; } //-------------------------------------------------------------- void testApp::openNewAudioFileWithdialogBox(){ std::string filename; getFilenameFromDialogBox(&filename); loadNewAudio(filename); } void testApp::loadNewAudio(string soundFileName){ eventMatcher.recordedTracks.loadedAudioFiles[0].loadAudioFile(soundFileName); // for (int i = 0;i < numberOfAudioTracks;i++) // loadedAudioFiles[i].loadAudioFile(soundFileName); // audioFilePlayer.loadAudioFile(soundFileName); } bool testApp::getFilenameFromDialogBox(std::string* fileNameToSave){ //this uses a pointer structure within the loader and returns true if the dialogue box was used successfully // first, create a string that will hold the URL string URL; // openFile(string& URL) returns 1 if a file was picked // returns 0 when something went wrong or the user pressed 'cancel' int response = ofxFileDialogOSX::openFile(URL); if(response){ // now you can use the URL *fileNameToSave = URL; //printf("\n filename is %s \n", soundFileName.c_str()); return true; } else { // soundFileName = "OPEN canceled. "; printf("\n open file cancelled \n"); return false; } }