#include "testApp.h" //-------------------------------------------------------------- void testApp::setup(){ int midiPort=0; midiChannel=0; if( !XML.loadFile("settings.xml") ){ printf("unable to load settings.xml check data/ folder\n"); }else{ printf("settings loaded!\n"); midiPort=ofToInt(XML.getAttribute("liveEngine", "port", "0")); //default to 0/all midiChannel=ofToInt(XML.getAttribute("liveEngine", "channel", "0")); if (midiChannel) printf("listening on port %d, midi channel %d\n",midiPort,midiChannel); else printf("listening on port %d, all midi channels\n",midiPort); } midiIn.listPorts(); midiIn.openPort(midiPort); midiIn.addListener(this); // to register only to one controller pass the id as first argument // midiIn.addListener(84,this); // to debug // midiIn.setVerbose(true); controllers=new unsigned char[NUM_CONTROLLERS]; memset(controllers,NUM_CONTROLLERS,0); note=0; makeColours(); controlColours=false; grab.allocate(1024,768,GL_RGB); //ofGetWidth(), ofGetHeight(),GL_RGB); //grab.setUseTexture(true); showFPS=false; ofBackground(0,0,0); ofSetBackgroundAuto(false); xshift=-1; yshift=-1; fadetime=0; mode=BLOCKS; lastnoteTime=ofGetElapsedTimef(); decayTime=2.0f; //ofSetVerticalSync(true); deosn't seem effective //glXSwapIntervalSGI(1); /* printf("hue of red is %f\n",ofColor(255,0,0).getHue()); printf("hue of green is %f\n",ofColor(0,255,0).getHue()); printf("hue of blue is %f\n",ofColor(0,0,255).getHue()); hue is float from 0.0-255.0 */ ofSetFrameRate(60); rotate=0; scale=1.0f; } void testApp::makeColours() { controller_colours=new ofColor[NUM_CONTROLLERS]; for (int i=0;iupdate(); } //-------------------------------------------------------------- void testApp::draw(){ grab.loadScreenData( 0, 0, ofGetWidth(), ofGetHeight() ); /* can this work? grab.setAnchorPoint(xshift,yshift); grab.setTextureWrap( GL_WRAP_BORDER, GL_WRAP_BORDER); grab.draw(0,0); // xshift,yshift); */ ofSetColor(255-fadetime,255-fadetime,255-fadetime); for (int i=(xshift>0?xshift-ofGetWidth():xshift);i0?yshift-ofGetHeight():yshift);j0) { switch(mode) { case BLOCKS: for (int i=0;i>7,(controller_colours[i].g*controllers[i])>>7,(controller_colours[i].b*controllers[i])>>7)); ofRect((note-START_NOTE)*notewidth,i*noteheight,notewidth,noteheight); } break; case LIST: if (list.lock()) { //if playlist is loaded ofPushMatrix(); ofTranslate(ofGetWidth()/2,ofGetHeight()/2); ofScale(scale,scale,scale); ofRotate(rotate); ofTranslate(-ofGetWidth()/2,-ofGetHeight()/2); if (list.layers.find(note)!=list.layers.end()) { if (controlColours) list.layers[note]->draw(lamda,controllers); else list.layers[note]->draw(lamda); } ofPopMatrix(); list.unlock(); } break; } } //for (int i=0;idraw(); ofSetColor(255,255,255); if (showFPS) ofDrawBitmapString(ofToString(ofGetFrameRate(), 2),20,20); } //-------------------------------------------------------------- void testApp::keyPressed (int key){ if(key == 'q'){ list.load("insects.xml"); } if(key == 'w'){ list.load("women_ethnic.xml"); } if(key == 'e'){ list.load("organs.xml"); } if(key == 'r'){ list.load("tai_chi.xml"); } if(key == 't'){ list.load("reptiles.xml"); } if(key == 'y'){ list.load("military_ladies.xml"); } if(key == 'u'){ list.load("knights.xml"); } if(key == 'i'){ list.load("mil_historic.xml"); } if(key == 'o'){ list.load("yoga.xml"); } if(key == 'p'){ list.load("dancing.xml"); } if(key == 's'){ XML.saveFile("settings.xml"); printf("settings saved!\n"); } if(key == 'f'){ toggleFPS(); } if(key >='0' && key <= '9'){ mode=key-'0'; } if(key == OF_KEY_LEFT){ yshift++; } if(key == OF_KEY_RIGHT){ yshift--; } if(key == OF_KEY_DOWN){ xshift--; } if(key == OF_KEY_UP){ xshift++; } if(key == '='){ makeColours(); } if(key == '-'){ controlColours=!controlColours; } if(key == '+'){ fadetime=min(128,fadetime+1); } if(key == '_'){ fadetime=max(0,fadetime-1); } if(key == ']'){ scale*=1.01; } if(key == '['){ scale/=1.01; } if(key == '}'){ rotate+=90; } if(key == '{'){ rotate-=90; } } //-------------------------------------------------------------- void testApp::keyReleased(int key){ } //-------------------------------------------------------------- void testApp::mouseMoved(int x, int y ){ } //-------------------------------------------------------------- void testApp::mouseDragged(int x, int y, int button){ } //-------------------------------------------------------------- void testApp::mouseReleased(int x, int y, int button){ } void testApp::mousePressed(int x, int y, int button) { } //-------------------------------------------------------------- void testApp::windowResized(int w, int h){ } //-------------------------------------------------------------- void testApp::gotMessage(ofMessage msg){ } //-------------------------------------------------------------- void testApp::dragEvent(ofDragInfo dragInfo){ } void testApp::toggleFPS(){ showFPS=!showFPS; } void testApp::newMidiMessage(ofxMidiEventArgs& eventArgs){ //newMessage(eventArgs.port, eventArgs.channel, eventArgs.byteTwo, eventArgs.timestamp); //byteOne : message type /* int port; int channel; int status; int byteOne; int byteTwo; double timestamp; */ //printf("%d %d %d %d %d\n",eventArgs.port,eventArgs.channel,eventArgs.status,eventArgs.byteOne,eventArgs.byteTwo); bool noteOn; //this old thing! if ((midiChannel==0)||(eventArgs.channel==midiChannel)) { switch(eventArgs.status) { case 144: //noteon-off channel 0 noteOn=(eventArgs.byteTwo==0?false:true); //for (int i=0;inote==eventArgs.byteOne) layers[i]->setActive(noteOn); //} printf("note: %i %i\n",eventArgs.byteOne,eventArgs.byteTwo); note=eventArgs.byteOne; lastnoteTime=ofGetElapsedTimef(); break; case 176: //control change channel 0 //for (int i=0;imix==eventArgs.byteOne) layers[i]->setMixAmt(((float)eventArgs.byteTwo)/127.0f); //} printf("cc: %i %i\n",eventArgs.byteOne,eventArgs.byteTwo); controllers[eventArgs.byteOne-START_CONTROLLER]=eventArgs.byteTwo; } } }