commit cf6f2abb990737236390111f5f108722af80eb6c
parent 9d3d7f497d3d115803578326df408df7c5c9dd9f
Author: fundamental <mark.d.mccurry@gmail.com>
Date: Mon, 27 Jun 2016 13:57:41 -0400
Middleware: Add OSC View For MIDI-Learn
Diffstat:
1 file changed, 34 insertions(+), 0 deletions(-)
diff --git a/src/Misc/MiddleWare.cpp b/src/Misc/MiddleWare.cpp
@@ -157,6 +157,16 @@ static int handler_function(const char *path, const char *types, lo_arg **argv,
typedef void(*cb_t)(void*,const char*);
+//utility method (should be moved to a better location)
+template <class T, class V>
+std::vector<T> keys(const std::map<T,V> &m)
+{
+ std::vector<T> vec;
+ for(auto &kv: m)
+ vec.push_back(kv.first);
+ return vec;
+}
+
/*****************************************************************************
* Memory Deallocation *
@@ -1221,6 +1231,30 @@ static rtosc::Ports middwareSnoopPorts = {
rBegin;
impl.undo.seekHistory(+1);
rEnd},
+ //port to observe the midi mappings
+ {"midi-learn-values:", 0, 0,
+ rBegin;
+ auto &midi = impl.midi_mapper;
+ auto key = keys(midi.inv_map);
+ //cc-id, path, min, max
+#define MAX_MIDI 32
+ rtosc_arg_t args[MAX_MIDI*4];
+ char argt[MAX_MIDI*4+1] = {0};
+ for(int i=0; i<key.size() && i<MAX_MIDI; ++i) {
+ auto val = midi.inv_map[key[i]];
+ argt[4*i+0] = 'i';
+ args[4*i+0].i = std::get<1>(val);
+ argt[4*i+1] = 's';
+ args[4*i+1].s = key[i].c_str();
+ argt[4*i+2] = 'i';
+ args[4*i+2].i = 0;
+ argt[4*i+3] = 'i';
+ args[4*i+3].i = 127;
+
+ }
+ d.replyArray(d.loc, argt, args);
+#undef MAX_MIDI
+ rEnd},
{"learn:s", 0, 0,
rBegin;
string addr = rtosc_argument(msg, 0).s;