annotate src/testApp.cpp @ 9:bc62266af280

Position scrolls with live input by updating the play position of onset detection to where the current best match is
author Andrew N Robertson <andrew.robertson@eecs.qmul.ac.uk>
date Fri, 03 Feb 2012 17:53:14 +0000
parents 572564b7cb85
children cbadb9d05d29
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@0 28 ofSetFrameRate(30);
andrew@0 29
andrew@1 30
andrew@1 31
andrew@1 32 eventMatcher.recordedTracks.loadTestAudio();
andrew@1 33
andrew@7 34 eventMatcher.setWindowDimensions();
andrew@1 35 //audioFilePlayer.loadAudioFile(infilename);
andrew@1 36 }
andrew@1 37
andrew@0 38
andrew@0 39 //--------------------------------------------------------------
andrew@0 40 void testApp::update(){
andrew@9 41 eventMatcher.updatePosition();
andrew@0 42
andrew@0 43 checkForOSCmessages();
andrew@0 44
andrew@0 45 }
andrew@0 46
andrew@0 47 void testApp::checkForOSCmessages(){
andrew@0 48 // check for waiting messages
andrew@0 49 while( receiver.hasWaitingMessages() )
andrew@0 50 {
andrew@0 51 // get the next message
andrew@0 52 ofxOscMessage m;
andrew@0 53 receiver.getNextMessage( &m );
andrew@0 54
andrew@0 55 // check for mouse moved message
andrew@1 56 if ( m.getAddress() == "/aubioPitch" ){
andrew@6 57 int testChannel = m.getArgAsInt32(0);
andrew@6 58 float pitchIn = m.getArgAsFloat(1);
andrew@6 59 int timeIn = m.getArgAsInt32(2);
andrew@3 60 printf("\nAUBIO PITCH RECEIVED %f at time %i\n", pitchIn, timeIn);
andrew@6 61 eventMatcher.newPitchEvent(testChannel, pitchIn, timeIn);
andrew@0 62 }
andrew@2 63
andrew@2 64 if ( m.getAddress() == "/kick" ){
andrew@6 65 // float pitchIn = m.getArgAsFloat(0);
andrew@6 66 int testChannel = m.getArgAsInt32(0);
andrew@6 67 double timeIn = m.getArgAsInt32(1);
andrew@7 68 printf("\nKICK RECEIVED at time %f\n", timeIn);
andrew@6 69 eventMatcher.newKickEvent(testChannel, timeIn);
andrew@2 70 }
andrew@2 71
andrew@2 72 if ( m.getAddress() == "/snare" ){
andrew@7 73 int testChannel = m.getArgAsInt32(0);
andrew@7 74 double timeIn = m.getArgAsInt32(1);
andrew@7 75 printf("\nSNARE RECEIVED at time %f\n", timeIn);
andrew@7 76 eventMatcher.newSnareEvent(testChannel, timeIn);
andrew@2 77 }
andrew@3 78
andrew@3 79 if ( m.getAddress() == "/start" ){
andrew@3 80 printf("start!\n");
andrew@3 81 eventMatcher.startPlaying();
andrew@3 82 }
andrew@0 83 }
andrew@0 84 }
andrew@0 85
andrew@0 86 //--------------------------------------------------------------
andrew@0 87 void testApp::draw(){
andrew@0 88
andrew@0 89 eventMatcher.draw();
andrew@0 90
andrew@0 91 // audioFilePlayer.draw();
andrew@0 92
andrew@0 93 }
andrew@0 94
andrew@0 95
andrew@0 96
andrew@0 97 //--------------------------------------------------------------
andrew@0 98 void testApp::keyPressed (int key){
andrew@0 99 if (key == '-'){
andrew@0 100 volume -= 0.05;
andrew@0 101 volume = MAX(volume, 0);
andrew@0 102 } else if (key == '+'){
andrew@0 103 volume += 0.05;
andrew@0 104 volume = MIN(volume, 1);
andrew@0 105 }
andrew@0 106
andrew@0 107 if (key == 'q'){
andrew@1 108 eventMatcher.recordedTracks.switchScreens();
andrew@0 109 }
andrew@0 110
andrew@0 111 if (key == OF_KEY_RIGHT){
andrew@0 112 // audioFilePlayer.loadedAudio.setPosition(min(1.0, audioFilePlayer.loadedAudio.getPosition() + (audioFilePlayer.fileLoader.audioHolder.audioScaleSamples/(4.0*audioFilePlayer.fileLoader.audioHolder.audioVector.size()))) );
andrew@0 113
andrew@0 114 }
andrew@0 115
andrew@0 116 if (key == OF_KEY_LEFT){
andrew@0 117 // audioFilePlayer.loadedAudio.setPosition(max(0.0, audioFilePlayer.loadedAudio.getPosition() - (audioFilePlayer.fileLoader.audioHolder.audioScaleSamples/(4.0*audioFilePlayer.fileLoader.audioHolder.audioVector.size()))));
andrew@0 118
andrew@0 119 }
andrew@0 120
andrew@0 121
andrew@0 122 if (key == ' '){
andrew@1 123
andrew@1 124 eventMatcher.recordedTracks.togglePlay();
andrew@0 125 }
andrew@0 126
andrew@0 127 if (key == OF_KEY_RETURN){
andrew@1 128
andrew@0 129
andrew@1 130 eventMatcher.recordedTracks.stop();
andrew@0 131 }
andrew@0 132
andrew@0 133
andrew@0 134 if (key == 'o'){
andrew@0 135 openNewAudioFileWithdialogBox();
andrew@0 136
andrew@0 137 }
andrew@0 138
andrew@0 139 if (key == 'p'){
andrew@3 140 eventMatcher.bayesianStruct.posterior.printArray();
andrew@0 141 }
andrew@0 142
andrew@0 143
andrew@0 144 if (key == OF_KEY_UP){
andrew@1 145 eventMatcher.recordedTracks.zoomOut();
andrew@1 146
andrew@0 147 }
andrew@0 148
andrew@0 149 if (key == OF_KEY_DOWN){
andrew@1 150 eventMatcher.recordedTracks.zoomIn();
andrew@0 151 }
andrew@0 152
andrew@0 153 }
andrew@0 154
andrew@0 155 //--------------------------------------------------------------
andrew@0 156 void testApp::keyReleased (int key){
andrew@0 157
andrew@0 158 }
andrew@0 159
andrew@0 160
andrew@0 161 //--------------------------------------------------------------
andrew@0 162 void testApp::mouseMoved(int x, int y ){
andrew@0 163
andrew@0 164
andrew@0 165 }
andrew@0 166
andrew@0 167 //--------------------------------------------------------------
andrew@0 168 void testApp::mouseDragged(int x, int y, int button){
andrew@0 169
andrew@0 170 }
andrew@0 171
andrew@0 172 //--------------------------------------------------------------
andrew@0 173 void testApp::mousePressed(int x, int y, int button){
andrew@0 174
andrew@0 175 }
andrew@0 176
andrew@0 177
andrew@0 178 //--------------------------------------------------------------
andrew@0 179 void testApp::mouseReleased(int x, int y, int button){
andrew@0 180
andrew@0 181 }
andrew@0 182
andrew@0 183 //--------------------------------------------------------------
andrew@0 184 void testApp::windowResized(int w, int h){
andrew@1 185
andrew@1 186 eventMatcher.windowResized(w, h);
andrew@0 187
andrew@0 188
andrew@0 189 }
andrew@0 190 //--------------------------------------------------------------
andrew@0 191 void testApp::audioRequested (float * output, int bufferSize, int nChannels){
andrew@0 192 //pan = 0.5f;
andrew@0 193 float leftScale = 1 - pan;
andrew@0 194 float rightScale = pan;
andrew@0 195
andrew@0 196 }
andrew@0 197
andrew@0 198
andrew@0 199
andrew@0 200 //--------------------------------------------------------------
andrew@0 201 void testApp::openNewAudioFileWithdialogBox(){
andrew@0 202 std::string filename;
andrew@0 203 getFilenameFromDialogBox(&filename);
andrew@0 204 loadNewAudio(filename);
andrew@0 205
andrew@0 206 }
andrew@0 207
andrew@0 208
andrew@0 209 void testApp::loadNewAudio(string soundFileName){
andrew@0 210
andrew@1 211 eventMatcher.recordedTracks.loadedAudioFiles[0].loadAudioFile(soundFileName);
andrew@0 212
andrew@0 213 // for (int i = 0;i < numberOfAudioTracks;i++)
andrew@0 214 // loadedAudioFiles[i].loadAudioFile(soundFileName);
andrew@0 215
andrew@0 216 // audioFilePlayer.loadAudioFile(soundFileName);
andrew@0 217
andrew@0 218 }
andrew@0 219
andrew@0 220
andrew@0 221 bool testApp::getFilenameFromDialogBox(std::string* fileNameToSave){
andrew@0 222 //this uses a pointer structure within the loader and returns true if the dialogue box was used successfully
andrew@0 223 // first, create a string that will hold the URL
andrew@0 224 string URL;
andrew@0 225
andrew@0 226 // openFile(string& URL) returns 1 if a file was picked
andrew@0 227 // returns 0 when something went wrong or the user pressed 'cancel'
andrew@0 228 int response = ofxFileDialogOSX::openFile(URL);
andrew@0 229 if(response){
andrew@0 230 // now you can use the URL
andrew@0 231 *fileNameToSave = URL;
andrew@0 232 //printf("\n filename is %s \n", soundFileName.c_str());
andrew@0 233 return true;
andrew@0 234 }
andrew@0 235 else {
andrew@0 236 // soundFileName = "OPEN canceled. ";
andrew@0 237 printf("\n open file cancelled \n");
andrew@0 238 return false;
andrew@0 239 }
andrew@0 240
andrew@0 241 }
andrew@0 242
andrew@0 243
andrew@0 244
andrew@0 245
andrew@0 246