-GenericMIDI executes actions based on incoming MIDI

This commit is contained in:
Harry van Haaren 2013-09-25 18:46:08 +01:00
parent c78e322e9d
commit 3fc1144e37
3 changed files with 26 additions and 17 deletions

View file

@ -292,15 +292,23 @@ void GenericMIDI::ccChange( int track, int cc, float value )
*/ */
void GenericMIDI::midi(unsigned char* data) void GenericMIDI::midi(unsigned char* midi)
{ {
int b1 = data[0]; int status = midi[0];
int b2 = data[1]; int data = midi[1];
int b3 = data[2]; int value = midi[2];
// TODO: Generic MIDI needs MIDI map from JSON LUPPP_WARN("called %i %i %i", status, data, value );
// FIXME: used variables
// iterate over bindings, execute binding action if matches
for(int i = 0; i < midiToAction.size(); i++)
{
if ( midiToAction.at(i).status == status &&
midiToAction.at(i).data == data )
{
LUPPP_WARN("Executing action %s",midiToAction.at(i).action.c_str() );
}
}
} }
@ -367,6 +375,8 @@ int GenericMIDI::loadController( std::string file )
cJSON* action = cJSON_GetObjectItem( binding, "action" ); cJSON* action = cJSON_GetObjectItem( binding, "action" );
LUPPP_NOTE("Binding from status %i %i %s", status->valueint, data->valueint, action->valuestring); LUPPP_NOTE("Binding from status %i %i %s", status->valueint, data->valueint, action->valuestring);
midiToAction.push_back( MidiBinding(status->valueint, data->valueint, action->valuestring ) );
} }
} }
else else

View file

@ -5,7 +5,7 @@
#include "controller.hxx" #include "controller.hxx"
#include <map> #include <vector>
#include "../observer/midi.hxx" #include "../observer/midi.hxx"
@ -15,11 +15,12 @@ typedef std::string LupppAction;
class MidiBinding class MidiBinding
{ {
public: public:
MidiBinding(unsigned char b1, unsigned char b2) : status(b1), data(b2) {} MidiBinding(unsigned char b1, unsigned char b2, LupppAction act) : status(b1), data(b2), action(act) {}
private:
unsigned char status; unsigned char status;
unsigned char data; unsigned char data;
LupppAction action;
}; };
class GenericMIDI : public Controller, public MidiObserver class GenericMIDI : public Controller, public MidiObserver
@ -55,11 +56,9 @@ class GenericMIDI : public Controller, public MidiObserver
std::string name; std::string name;
/// contains a list of /// contains midi binding instances
std::multimap<MidiBinding,LupppAction> midiToAction; std::vector<MidiBinding> midiToAction;
std::vector<MidiBinding> actionToMidi;
/// contains list of
std::multimap<LupppAction,MidiBinding> actionToMidi;
int loadController(std::string controllerFile); int loadController(std::string controllerFile);
/* /*