summaryrefslogtreecommitdiff
path: root/src/testApp.cpp
diff options
context:
space:
mode:
authorTim Redfern <tim@eclectronics.org>2011-12-20 13:55:44 +0000
committerTim Redfern <tim@eclectronics.org>2011-12-20 13:55:44 +0000
commit3a0fe9a2700596abe8e29f042ca967f57cc014d7 (patch)
treef904f12f433542c09385631479c4c32a8382a3ce /src/testApp.cpp
initial show versionHEADmaster
Diffstat (limited to 'src/testApp.cpp')
-rwxr-xr-xsrc/testApp.cpp199
1 files changed, 199 insertions, 0 deletions
diff --git a/src/testApp.cpp b/src/testApp.cpp
new file mode 100755
index 0000000..ab5fcbb
--- /dev/null
+++ b/src/testApp.cpp
@@ -0,0 +1,199 @@
+#include "testApp.h"
+
+
+//--------------------------------------------------------------
+void testApp::setup(){
+ int midiPort=0;
+ midiChannel=0;
+ numLayers=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("globePlayer", "port", "0")); //default to 0/all
+ midiChannel=ofToInt(XML.getAttribute("globePlayer", "channel", "0"));
+ if (midiChannel) printf("listening on midi channel %d\n",midiChannel);
+ else printf("listening on all midi channels\n");
+ if(XML.pushTag("globePlayer")) {
+ numLayers=XML.getNumTags("layer");
+ if(numLayers) {
+ layers=new globeLayer*[numLayers];
+ for (int i=0;i<numLayers;i++){
+ XML.pushTag("layer",i);
+ string layerType=XML.getAttribute("content", "type", "");
+ XML.pushTag("content");
+ vector<string>keys;
+ XML.getAttributeNames("settings", keys, 0);
+ map<string,string> settings;
+ for (int k=0;k<keys.size();k++) {
+ settings[keys[k]]=XML.getAttribute("settings",keys[k],"none",0);
+ }
+ if (layerType=="player") layers[i]=new globePlayer(&settings);
+ if (layerType=="grabber") layers[i]=new globeGrabber(&settings);
+ XML.popTag();
+ XML.popTag();
+ }
+ }
+ }
+ if (numLayers==0) printf("no layers loaded!\n");
+ }
+
+ 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);
+ showFPS=false;
+}
+
+//--------------------------------------------------------------
+void testApp::update(){
+ for (int i=0;i<numLayers;i++) layers[i]->update();
+}
+
+//--------------------------------------------------------------
+void testApp::draw(){
+ ofBackground(0,0,0);
+
+ for (int i=0;i<numLayers;i++) layers[i]->draw();
+
+ if (showFPS) ofDrawBitmapString(ofToString(ofGetFrameRate(), 2),20,20);
+
+}
+
+//--------------------------------------------------------------
+void testApp::keyPressed (int key){
+ if(key == 's'){
+ XML.saveFile("settings.xml");
+ printf("settings saved!\n");
+ }
+ if(key == 'f'){
+ toggleFPS();
+ }
+ if(key=='1'){
+ layers[0]->setActive(100);
+ layers[0]->CC(8,127);
+ }
+ if(key=='q'){
+ layers[0]->setActive(0);
+ layers[0]->CC(8,0);
+ }
+ if(key=='2'){
+ layers[1]->setActive(100);
+ layers[1]->CC(9,127);
+ }
+ if(key=='w'){
+ layers[1]->setActive(0);
+ layers[1]->CC(9,0);
+ }
+ if(key=='3'){
+ layers[2]->setActive(100);
+ layers[2]->CC(10,127);
+ }
+ if(key=='e'){
+ layers[2]->setActive(0);
+ layers[2]->CC(10,0);
+ }
+ if(key=='7'){
+ layers[2]->CC(20,3);
+ printf("changing to device 3\n");
+
+ }
+ if(key=='8'){
+ layers[2]->CC(20,4);
+ printf("changing to device 4\n");
+ }
+ //this doesn't seem to arrive
+ if(key=='4'){
+ layers[3]->setActive(100);
+ layers[3]->CC(16,127);
+ }
+ if(key=='r'){
+ layers[3]->setActive(0);
+ layers[3]->CC(16,0);
+ }
+
+}
+
+//--------------------------------------------------------------
+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
+ noteOn=(eventArgs.byteTwo==0?false:true);
+ for (int i=0;i<numLayers;i++){
+ if (layers[i]->note==eventArgs.byteOne) layers[i]->setActive(noteOn);
+ }
+ break;
+ case 176: //control change
+ for (int i=0;i<numLayers;i++){
+ //if (layers[i]->mix==eventArgs.byteOne) layers[i]->setMixAmt(((float)eventArgs.byteTwo)/127.0f);
+ layers[i]->CC(eventArgs.byteOne,eventArgs.byteTwo);
+ }
+ }
+ }
+}
+