From c780da1c2fbe5983ab7a0bada22eb647349f31e3 Mon Sep 17 00:00:00 2001 From: Francesco Date: Sat, 7 Jul 2012 10:16:35 +0200 Subject: [PATCH] added hotkey-midi coupling and assigned F4 hotkey to it --- src/parseMIDI.cpp | 34 ++++++++++++++++++++++++++++++++++ src/testApp.cpp | 34 ++++++++++++++++++++++++++++++++++ src/testApp.h | 5 +++++ 3 files changed, 73 insertions(+) diff --git a/src/parseMIDI.cpp b/src/parseMIDI.cpp index cc8f099..e34902d 100644 --- a/src/parseMIDI.cpp +++ b/src/parseMIDI.cpp @@ -20,6 +20,40 @@ void testApp::newMidiMessage(ofxMidiMessage& msg) { cout << "value: " << midiMessage.value << endl; */ + if(bMidiHotkeyCoupling && midiHotkeyPressed >= 0) + { + if(midiHotkeyMessages.size()>0 && midiHotkeyMessages.size() == midiHotkeyKeys.size()) + { + for(int i=0; i < midiHotkeyMessages.size(); i++) + { + if(midiHotkeyKeys[i] == midiHotkeyPressed) + { + midiHotkeyKeys.erase(midiHotkeyKeys.begin()+i); + midiHotkeyMessages.erase(midiHotkeyMessages.begin()+i); + } + } + } + midiHotkeyMessages.push_back(midiMessage); + midiHotkeyKeys.push_back(midiHotkeyPressed); + midiHotkeyPressed = -1; + bMidiHotkeyCoupling = false; + bMidiHotkeyLearning = false; + return; + } + + if(midiHotkeyMessages.size()>0 && midiHotkeyMessages.size() == midiHotkeyKeys.size()) + { + for(int i=0; i < midiHotkeyMessages.size(); i++) + { + ofxMidiMessage midiControl = midiHotkeyMessages[i]; + if(midiMessage.velocity >0 && midiMessage.status == midiControl.status && midiMessage.pitch == midiControl.pitch && midiMessage.channel == midiControl.channel) + { + keyPressed(midiHotkeyKeys[i]); + } + } + } + + for(int i=0; i < gui.getPages().size(); i++) { for(int j=0; j < gui.getPages()[i]->getControls().size(); j++) diff --git a/src/testApp.cpp b/src/testApp.cpp index d46cf03..3dafba3 100644 --- a/src/testApp.cpp +++ b/src/testApp.cpp @@ -169,8 +169,14 @@ void testApp::setup() midiIn.addListener(this); // print received messages to the console midiIn.setVerbose(true); + //clear vectors used for midi-hotkeys coupling + midiHotkeyMessages.clear(); + midiHotkeyKeys.clear(); #endif + bMidiHotkeyCoupling = false; + bMidiHotkeyLearning = false; + midiHotkeyPressed = -1; // we scan the video dir for videos //string videoDir = string("./data/video"); @@ -878,6 +884,18 @@ void testApp::draw() ofSetHexColor(0xFF0000); ttf.drawString("Mask-editing mode ", 170, ofGetHeight()-25); } + if(bMidiHotkeyCoupling) { + if(bMidiHotkeyLearning) + { + ofSetColor(255,255,0); + ttf.drawString("waiting for MIDI message ", 170, ofGetHeight()-25); + } + else{ + ofSetColor(255,0,0); + ttf.drawString("MIDI-hotkey coupling ", 170, ofGetHeight()-25); + } + ofRect(2,2,ofGetWidth()-4,ofGetHeight()-4); + } // draws gui gui.draw(); } @@ -932,6 +950,7 @@ void testApp::mpeResetEvent(ofxMPEEventArgs& event) void testApp::keyPressed(int key) { + if(!bMidiHotkeyCoupling){ // moves active layer one position up if ( key == '+' && !bTimeline && !bGui) { @@ -1107,6 +1126,7 @@ void testApp::keyPressed(int key) gui.setPage((activeQuad*3)+2); } + if ( (key == 'd' || key == 'D') && !bTimeline) { if(maskSetup && quads[activeQuad].maskPoints.size()>0) @@ -1457,6 +1477,20 @@ void testApp::keyPressed(int key) quads[activeQuad].corners[i] = quads[activeQuad].corners[i] * resultingMatrix; } } + } + + else + { + bMidiHotkeyLearning = true; + midiHotkeyPressed = key; + } + + if ( key == OF_KEY_F4) + { + bMidiHotkeyCoupling = !bMidiHotkeyCoupling; + bMidiHotkeyLearning = false; + midiHotkeyPressed = -1; + } } diff --git a/src/testApp.h b/src/testApp.h index fef3ee5..e57a1eb 100644 --- a/src/testApp.h +++ b/src/testApp.h @@ -120,6 +120,8 @@ class testApp : public ofBaseApp void newMidiMessage(ofxMidiMessage& eventArgs); ofxMidiIn midiIn; ofxMidiMessage midiMessage; + vector midiHotkeyMessages; + vector midiHotkeyKeys; #endif // Shaders @@ -144,6 +146,9 @@ class testApp : public ofBaseApp bool bQuadBezierSpherize; bool bQuadBezierSpherizeStrong; bool bQuadBezierReset; + bool bMidiHotkeyCoupling; + bool bMidiHotkeyLearning; + int midiHotkeyPressed; void openImageFile(); void openVideoFile();