summaryrefslogtreecommitdiff
path: root/sunkenEngine/src/ofApp.cpp
diff options
context:
space:
mode:
authorTim Redfern <tim@eclectronics.org>2015-03-29 22:33:39 +0100
committerTim Redfern <tim@eclectronics.org>2015-03-29 22:33:39 +0100
commita28770084787abd086c30b0ed4483fe22c19dca4 (patch)
treeee798bc2a464181ddf37999118420164d207f131 /sunkenEngine/src/ofApp.cpp
parent1aef8df9feeff8c76411bb4f4faa2e51d3ee252e (diff)
working for parlour OSX
Diffstat (limited to 'sunkenEngine/src/ofApp.cpp')
-rw-r--r--sunkenEngine/src/ofApp.cpp375
1 files changed, 375 insertions, 0 deletions
diff --git a/sunkenEngine/src/ofApp.cpp b/sunkenEngine/src/ofApp.cpp
new file mode 100644
index 0000000..899af9f
--- /dev/null
+++ b/sunkenEngine/src/ofApp.cpp
@@ -0,0 +1,375 @@
+#include "ofApp.h"
+
+//--------------------------------------------------------------
+void ofApp::setup(){
+
+ //setupGui();
+
+ int midiPort=0;
+ midiChannel=0;
+ if( !XML.loadFile("settings_parlour_onscreen.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);
+ 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,2.0f));
+ 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){
+ 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[0],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\n",event,data1);
+ 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);
+ //}
+ if (debug) printf("cc: %i %i\n",data1,data2);
+ if (data1>=START_CONTROLLER) controllers[data1-START_CONTROLLER]=data2;
+ }
+
+}
+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