From d1ba04724f0bfbed18690316dbe5eb977a131733 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sun, 23 Sep 2007 02:03:41 +0000 Subject: Working LV2 UI control setting (including MIDI). Klaviatur (ll-plugins virtual keyboard) is now fully functional inside Ingen. git-svn-id: http://svn.drobilla.net/lad/ingen@766 a436a847-0d15-0410-975c-d299462d15a1 --- src/libs/client/OSCEngineSender.cpp | 86 +++++++++++++++++++++++++++---------- 1 file changed, 64 insertions(+), 22 deletions(-) (limited to 'src/libs/client/OSCEngineSender.cpp') diff --git a/src/libs/client/OSCEngineSender.cpp b/src/libs/client/OSCEngineSender.cpp index 90f27676..cadb962c 100644 --- a/src/libs/client/OSCEngineSender.cpp +++ b/src/libs/client/OSCEngineSender.cpp @@ -351,61 +351,103 @@ OSCEngineSender::disconnect_all(const string& node_path) void OSCEngineSender::set_port_value(const string& port_path, + const string& type_uri, uint32_t data_size, const void* data) { assert(_engine_addr); - assert(data_size == 4); - lo_send(_engine_addr, "/ingen/set_port_value", "isf", - next_id(), - port_path.c_str(), - *(float*)data); + if (type_uri == "ingen:control") { + assert(data_size == 4); + lo_send(_engine_addr, "/ingen/set_port_value", "isf", + next_id(), + port_path.c_str(), + *(float*)data); + } else { + lo_blob b = lo_blob_new(data_size, data); + lo_send(_engine_addr, "/ingen/set_port_value", "isb", + next_id(), + port_path.c_str(), + b); + lo_blob_free(b); + } } void OSCEngineSender::set_port_value(const string& port_path, + const string& type_uri, uint32_t voice, uint32_t data_size, const void* data) { assert(_engine_addr); - assert(data_size == 4); - lo_send(_engine_addr, "/ingen/set_port_value", "isif", - next_id(), - port_path.c_str(), - voice, - *(float*)data); + if (type_uri == "ingen:control") { + assert(data_size == 4); + lo_send(_engine_addr, "/ingen/set_port_value", "isf", + next_id(), + port_path.c_str(), + *(float*)data); + } else { + lo_blob b = lo_blob_new(data_size, data); + lo_send(_engine_addr, "/ingen/set_port_value", "isb", + next_id(), + port_path.c_str(), + b); + lo_blob_free(b); + } } void OSCEngineSender::set_port_value_immediate(const string& port_path, + const string& type_uri, uint32_t data_size, const void* data) { assert(_engine_addr); - assert(data_size == 4); - lo_send(_engine_addr, "/ingen/set_port_value_immediate", "isf", - next_id(), - port_path.c_str(), - *(float*)data); + + if (type_uri == "ingen:control") { + assert(data_size == 4); + lo_send(_engine_addr, "/ingen/set_port_value_immediate", "isf", + next_id(), + port_path.c_str(), + *(float*)data); + } else { + lo_blob b = lo_blob_new(data_size, data); + lo_send(_engine_addr, "/ingen/set_port_value_immediate", "isb", + next_id(), + port_path.c_str(), + b); + lo_blob_free(b); + } } void OSCEngineSender::set_port_value_immediate(const string& port_path, + const string& type_uri, uint32_t voice, uint32_t data_size, const void* data) { assert(_engine_addr); - assert(data_size == 4); - lo_send(_engine_addr, "/ingen/set_port_value_immediate", "isif", - next_id(), - port_path.c_str(), - voice, - *(float*)data); + + if (type_uri == "ingen:control") { + assert(data_size == 4); + lo_send(_engine_addr, "/ingen/set_port_value_immediate", "isif", + next_id(), + port_path.c_str(), + voice, + *(float*)data); + } else { + lo_blob b = lo_blob_new(data_size, data); + lo_send(_engine_addr, "/ingen/set_port_value_immediate", "isib", + next_id(), + port_path.c_str(), + voice, + b); + lo_blob_free(b); + } } -- cgit v1.2.1