diff options
Diffstat (limited to 'sunkenEngine/src/ofApp.cpp')
| -rw-r--r-- | sunkenEngine/src/ofApp.cpp | 378 |
1 files changed, 378 insertions, 0 deletions
diff --git a/sunkenEngine/src/ofApp.cpp b/sunkenEngine/src/ofApp.cpp new file mode 100644 index 0000000..2c3b2f3 --- /dev/null +++ b/sunkenEngine/src/ofApp.cpp @@ -0,0 +1,378 @@ +#include "ofApp.h" + +//-------------------------------------------------------------- +void ofApp::setup(){ + + //setupGui(); + + int midiPort=0; + midiChannel=0; + if( !XML.loadFile("settings_parlour.xml") ){ //_onscreen + 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); + if(XML.pushTag("liveEngine")) { + int numViews=XML.getNumTags("viewport"); + if(numViews) { + for (int i=0;i<numViews;i++) { + int w=XML.getAttribute("viewport", "w",0,i); + int h=XML.getAttribute("viewport", "h",0,i); + int x=XML.getAttribute("viewport", "x",0,i); + int y=XML.getAttribute("viewport", "y",0,i); + int rot=XML.getAttribute("viewport", "rot",0,i); + int ox=XML.getAttribute("viewport", "ox",0,i); + int oy=XML.getAttribute("viewport", "oy",0,i); + printf("viewport %i: %ix%i\n",i,w,h); + viewports.push_back(new viewport(w,h,x,y,rot,ox,oy)); + } + } + else printf("no viewports!\n"); + } + } + + printf("screen %ix%i\n",ofGetHeight(),ofGetWidth()); + + // print input ports to console + midiIn.listPorts(); + midiIn.openPort(midiPort); + midiIn.addListener(this); + + controllers=new unsigned char[NUM_CONTROLLERS]; + memset(controllers,NUM_CONTROLLERS,0); + note=0; + + makeColours(); + + colShift=0; + + controlColours=false; + noteRandomiseColours=false; + transparentBlack=false; + reversemain=false; + + showFPS=false; + ofBackground(0,0,0); + + ofSetBackgroundAuto(false); + + xshift=-1; + yshift=-1; + + fadetime=0; + + mode=BLOCKS; + + lastnoteTime=ofGetElapsedTimef(); + decayTime=1.0f; + + //ofSetVerticalSync(true); deosn't seem effective + //glXSwapIntervalSGI(1); + + ofSetFrameRate(60); + rotate=-90; + scale=1.0f; + fscale=1.0f; + + previewBuffer=&(viewports[1]->rb1); + +} + + +void ofApp::resetDrawscalePressed(bool & pressed){ + scale=1.0f; +} +void ofApp::resetFBscalePressed(bool & pressed){ + fscale=1.0f; +} +//-------------------------------------------------------------- +void ofApp::setupGui(){ + parameters.setName("parameters"); + + parameters.add(reverse.set("reverse", false)); + parameters.add(reversemain.set("reverse main", false)); + parameters.add(controlColours.set("control colours", false)); + parameters.add(noteRandomiseColours.set("randomise note colours", false)); + parameters.add(transparentBlack.set("transparent black", false)); + parameters.add(resetDrawscale.set("reset draw scale",false)); + parameters.add(resetFBscale.set("reset FB scale",false)); + parameters.add(fadeScale.set("fade scale",0,0,255)); + parameters.add(fadeBackground.set("decay background",255,0,255)); + parameters.add(decayTime.set("decay time",0,0,10.0f)); + parameters.add(oscScale.set("scale size LFO", false)); + parameters.add(breakOsc.set("break oscillators", false)); + parameters.add(randomOsc.set("randomise oscillators", false)); + parameters.add(scaleAmplitude.set("fade scale",0,0,2.0f)); + parameters.add(scaleFrequency.set("fade freq",0,0,5.0f)); + gui.setup(parameters); + + resetDrawscale.addListener(this,&ofApp::resetDrawscalePressed); + resetFBscale.addListener(this,&ofApp::resetFBscalePressed); + + ofSetBackgroundColor(0); + +} + +void ofApp::makeColours() { + controller_colours=new ofColor[NUM_CONTROLLERS]; + for (int i=0;i<NUM_CONTROLLERS;i++) controller_colours[i]=ofColor::fromHsb(ofRandom(255), 255, 255); + colShift=ofRandom(255.0f); +} + +//-------------------------------------------------------------- +void ofApp::update(){ + +} + +//-------------------------------------------------------------- +void ofApp::draw(){ + + float lambda=max(0.0f,1.0f-((ofGetElapsedTimef()-lastnoteTime)/decayTime)); + + int ft=255-(fadetime*((float)fadeScale)*0.1f); + //if(ofGetFrameNum()%25==0) printf("fadeScale %i\n",(int)fadeScale); + ofSetColor(ft,ft,ft); //for feedback + + float os=oscScale?(sin((breakOsc?ofGetElapsedTimef()-(randomOsc?randOffs:lastnoteTime):ofGetElapsedTimef()))*scaleFrequency)*scaleAmplitude:0.0f; + //vp1.draw(lambda,controllers,xshift,yshift,list,transparentBlack,note,mode,controller_colours,controlColours,scale,fscale,noteRandomiseColours?colShift:0.0f); + //vp2.draw(lambda,controllers,reversemain?-xshift:xshift,yshift,list,transparentBlack,note,mode,controller_colours,controlColours,reversemain?1.0f/scale:scale,reversemain?1.0f/fscale:fscale,noteRandomiseColours?colShift:0.0f); + for (int i=0;i<viewports.size();i++) { + bool even=!(i%2); + bool do_reverse=reverse?!(even&&reversemain):even&&reversemain; + viewports[i]->draw(lambda,controllers,do_reverse?-xshift:xshift,yshift,list,transparentBlack,note,mode,controller_colours,controlColours,do_reverse?1.0f/(scale+os):scale+os,do_reverse?1.0f/fscale:fscale,noteRandomiseColours?colShift:0.0f,fadeBackground); + } + + ofSetColor(255,255,255); + if (showFPS) ofDrawBitmapString(ofToString(ofGetFrameRate(), 2),20,20); + +} + +void ofApp::drawPreview(ofEventArgs & args){ + //ofBackground(0); + previewBuffer->draw(0,0,ofGetWidth(),ofGetHeight()); + +} + +//-------------------------------------------------------------- +void ofApp::drawGui(ofEventArgs & args){ + gui.draw(); + + if (list.lock()) { //if loaded + if (!list.thumbnailed) list.makeThumbnail(); + if (list.thumbnailed) list.thumbnail.draw(20,ofGetHeight()-150); + list.unlock(); + } + ofDrawBitmapString(list.name,20,ofGetHeight()-10); + +} + +void ofApp::dragGui(ofDragInfo & dragInfo){ + printf("got draginfo: %s\n",dragInfo.files[0].c_str()); + int sta=dragInfo.files[0].find_last_of("\\/")+1; + int len=(dragInfo.files[0].find_last_of(".")+4)-sta; + string filename="images/"+dragInfo.files[0].substr(sta,len); + printf("loading %s\n",filename.c_str()); + + list.load(filename); +} + +//-------------------------------------------------------------- +void ofApp::keyPressed(int key){ + cerr<<"key: "<<key<<endl; + switch(key){ + case ' ': + fullscreenoutput=!fullscreenoutput; + ofSetFullscreen(fullscreenoutput); + printf("resolution: %ix%i %s\n",ofGetWidth(),ofGetHeight(),fullscreenoutput?"fullscreen":"windowed"); + break; + } + +} + +void ofApp::keyPreview(ofKeyEventArgs& eventArgs){ + //cerr<<"key: "<<eventArgs.key<<endl; + + int key=eventArgs.key; + if(key =='q'){ + nmidiMessage(144,127,ofRandom(64)+36); + } + 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 == 267||key==OF_KEY_LEFT){ + xshift--; + } + if(key == 268||key==OF_KEY_RIGHT){ + xshift++; + } + if(key == 269||key==OF_KEY_UP){ + yshift--; + } + if(key == 270||key==OF_KEY_DOWN){ + yshift++; + } + if(key == '='){ + makeColours(); + } + 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; + } + + + if(key == 'd'){ + debug=!debug; + } + + if (key=='j') { + fscale=1.0f; + } + if (key=='h') { + scale=1.0f; + } + +} + +//-------------------------------------------------------------- +void ofApp::keyReleased(int key){ + +} + +//-------------------------------------------------------------- +void ofApp::mouseMoved(int x, int y ){ + +} + +//-------------------------------------------------------------- +void ofApp::mouseDragged(int x, int y, int button){ + +} + +//-------------------------------------------------------------- +void ofApp::mousePressed(int x, int y, int button){ + +} + +//-------------------------------------------------------------- +void ofApp::mouseReleased(int x, int y, int button){ + +} + +//-------------------------------------------------------------- +void ofApp::windowResized(int w, int h){ + +} + +//-------------------------------------------------------------- +void ofApp::gotMessage(ofMessage msg){ + +} + +//-------------------------------------------------------------- +void ofApp::dragEvent(ofDragInfo dragInfo){ + +} + +void ofApp::toggleFPS(){ + showFPS=!showFPS; +} + +void ofApp::newMidiMessage(ofxMidiMessage& eventArgs){ + if ((midiChannel==0)||(eventArgs.channel==midiChannel)) { + nmidiMessage(eventArgs.status,eventArgs.bytes[2],eventArgs.bytes[1]); + } +} + + //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); +void ofApp::nmidiMessage(int event,int data1, int data2) { + //printf("midi: %i %i %i\n",event,data1,data2); + bool noteOn; //this old thing! + int i; + switch(event) { + case 144: //noteon-off channel 0 + //printf("note %i %i %i\n",event,data1,data2); + noteOn=(data1==0?false:true); + //for (int i=0;i<numLayers;i++){ + // if (layers[i]->note==eventArgs.byteOne) layers[i]->setActive(noteOn); + //} + + note=data2; + lastnoteTime=ofGetElapsedTimef(); + if (list.layers.size()&&list.lock()) { //if playlist is loaded + map<int, layer*>::iterator itr; + //for(itr = list.layers.begin(); itr != list.layers.end(); ++itr){ + // list.layers[itr->first]->setNote(note); + //} + if (list.layers.find(note)!=list.layers.end()) list.layers[note]->setNote(note); + list.unlock(); + } + if (noteRandomiseColours) { + makeColours(); // + } + randOffs=ofRandom(100.0f); + break; + case 176: //control change channel 0 + //for (int i=0;i<numLayers;i++){ + // if (layers[i]->mix==eventArgs.byteOne) layers[i]->setMixAmt(((float)eventArgs.byteTwo)/127.0f); + //} + //maybe the CC are coming in <127? + //if (debug) + //printf("cc: %i %i\n",data1,data2); + if (data2>=START_CONTROLLER&&data2<(NUM_CONTROLLERS-START_CONTROLLER)) controllers[data2-START_CONTROLLER]=data1; + } + +} +void ofApp::previewMousePressedEvent(ofMouseEventArgs &args) { + //printf("mouse: %i,%i %i of %ix%i\n",args.x,args.y,args.button,win->getWidth(),win->getHeight()); + //0-2 + switch (args.button) { + case 0: + xshift=args.x-(ofGetWidth()/2); + yshift=args.y-(ofGetHeight()/2); + break; + case 1: + //cerr<<"" + scale=pow((float)pow((float)args.x-(ofGetWidth()/2),2.0f)+pow((float)args.y-(ofGetHeight()/2),2),0.5f)/(ofGetWidth()*.1); + break; + case 2: + fscale=(pow((float)pow((float)args.x-(ofGetWidth()/2),2.0f)+pow((float)args.y-(ofGetHeight()/2),2),0.5f)/(ofGetWidth()))+0.5; + break; + } +}
\ No newline at end of file |
