zynaddsubfx

ZynAddSubFX open source synthesizer
Log | Files | Refs | Submodules | LICENSE

commit 4b6fd2421b83058d37ea7834de3cd5beb9880418
parent 8722bd441455df26b4ce514d69041bee4792fd5b
Author: Johannes Lorenz <j.git@lorenz-ho.me>
Date:   Tue, 27 Mar 2018 06:16:07 +0200

Activate port checker

* Activate rtosc port checker for official tests. It currently
  does not check anything...
* Move path-search into rtosc

Diffstat:
DTODO-default-values.txt | 16----------------
Msrc/Misc/MiddleWare.cpp | 80++++++++++++++++++++-----------------------------------------------------------
Msrc/Params/PADnoteParameters.cpp | 3++-
Msrc/Tests/CMakeLists.txt | 10+++++++++-
Asrc/Tests/check-ports.rb | 16++++++++++++++++
5 files changed, 47 insertions(+), 78 deletions(-)

diff --git a/TODO-default-values.txt b/TODO-default-values.txt @@ -1,16 +0,0 @@ -TODOs for default values: -* use # for bundles, not a -* 1 ... 7 => 1 2 ... 7 -* also after scanning? - -* rEnabled vs rExists: - * clarify/rename - * make a clean function? - -test: -* zyn fx (all presets) -* rtosc arg val maths - -finally: -* remove rDefaultMissing if possible -* fix all TODOs from default_values diff --git a/src/Misc/MiddleWare.cpp b/src/Misc/MiddleWare.cpp @@ -74,64 +74,6 @@ static void liblo_error_cb(int i, const char *m, const char *loc) fprintf(stderr, "liblo :-( %d-%s@%s\n",i,m,loc); } -void path_search(const char *m, const char *url) -{ - using rtosc::Ports; - using rtosc::Port; - - //assumed upper bound of 32 ports (may need to be resized) - char types[256+1]; - rtosc_arg_t args[256]; - size_t pos = 0; - const Ports *ports = NULL; - const char *str = rtosc_argument(m,0).s; - const char *needle = rtosc_argument(m,1).s; - - //zero out data - memset(types, 0, sizeof(types)); - memset(args, 0, sizeof(args)); - - if(!*str) { - ports = &Master::ports; - } else { - const Port *port = Master::ports.apropos(rtosc_argument(m,0).s); - if(port) - ports = port->ports; - } - - if(ports) { - //RTness not confirmed here - for(const Port &p:*ports) { - if(strstr(p.name, needle) != p.name || !p.name) - continue; - types[pos] = 's'; - args[pos++].s = p.name; - types[pos] = 'b'; - if(p.metadata && *p.metadata) { - args[pos].b.data = (unsigned char*) p.metadata; - auto tmp = rtosc::Port::MetaContainer(p.metadata); - args[pos++].b.len = tmp.length(); - } else { - args[pos].b.data = (unsigned char*) NULL; - args[pos++].b.len = 0; - } - } - } - - - //Reply to requester [wow, these messages are getting huge...] - char buffer[1024*20]; - size_t length = rtosc_amessage(buffer, sizeof(buffer), "/paths", types, args); - if(length) { - lo_message msg = lo_message_deserialise((void*)buffer, length, NULL); - lo_address addr = lo_address_new_from_url(url); - if(addr) - lo_send_message(addr, buffer, msg); - lo_address_free(addr); - lo_message_free(msg); - } -} - static int handler_function(const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data) { @@ -153,8 +95,26 @@ static int handler_function(const char *path, const char *types, lo_arg **argv, memset(buffer, 0, sizeof(buffer)); size_t size = 2048; lo_message_serialise(msg, path, buffer, &size); - if(!strcmp(buffer, "/path-search") && !strcmp("ss", rtosc_argument_string(buffer))) { - path_search(buffer, mw->activeUrl().c_str()); + + if(!strcmp(buffer, "/path-search") && + !strcmp("ss", rtosc_argument_string(buffer))) { + auto reply_cb = [](const char* url, const char* types, const rtosc_arg_t* args) + { + char buffer[1024*20]; + size_t length = rtosc_amessage(buffer, sizeof(buffer), + "/paths", types, args); + if(length) { + lo_message msg = lo_message_deserialise((void*)buffer, + length, NULL); + lo_address addr = lo_address_new_from_url(url); + if(addr) + lo_send_message(addr, buffer, msg); + lo_address_free(addr); + lo_message_free(msg); + } + }; + rtosc::path_search(Master::ports, buffer, mw->activeUrl().c_str(), + reply_cb); } else if(buffer[0]=='/' && strrchr(buffer, '/')[1]) { mw->transmitMsg(rtosc::Ports::collapsePath(buffer)); } diff --git a/src/Params/PADnoteParameters.cpp b/src/Params/PADnoteParameters.cpp @@ -231,7 +231,8 @@ static const rtosc::Ports non_realtime_ports = rParamI(Pquality.oct, rShort("octaves"), rLinear(0,7), rDefault(3), "Number of octaves to sample (above the first sample"), - {"Pbandwidth::i", rShort("bandwidth") rProp(parameter) rLinear(0,1000) rDoc("Bandwith Of Harmonics"), NULL, + {"Pbandwidth::i", rShort("bandwidth") rProp(parameter) rLinear(0,1000) + rDefault(500) rDoc("Bandwith Of Harmonics"), NULL, [](const char *msg, rtosc::RtData &d) { PADnoteParameters *p = ((PADnoteParameters*)d.obj); if(rtosc_narguments(msg)) { diff --git a/src/Tests/CMakeLists.txt b/src/Tests/CMakeLists.txt @@ -1,3 +1,8 @@ +function(cp_script script_name) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${script_name} + ${CMAKE_CURRENT_BINARY_DIR}/${script_name} COPYONLY) +endfunction() + #for tests looking for files stored in the source dir add_definitions(-DSOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}") @@ -64,12 +69,15 @@ target_link_libraries(EffectTest ${test_lib}) add_executable(ins-test InstrumentStats.cpp) target_link_libraries(ins-test ${test_lib} rt) +cp_script(check-ports.rb) +add_test(PortChecker check-ports.rb) + add_executable(save-osc SaveOSC.cpp) target_link_libraries(save-osc zynaddsubfx_core zynaddsubfx_nio zynaddsubfx_gui_bridge ${GUI_LIBRARIES} ${NIO_LIBRARIES} ${AUDIO_LIBRARIES}) -#this will be replace with a for loop when the code will get more stable: +#this will be replaced with a for loop when the code will get more stable: add_test(SaveOsc save-osc ../../../instruments/examples/Arpeggio\ 1.xmz) #message(STATUS "Plugin Test ${GUI_LIBRARIES} ${NIO_LIBRARIES} ${AUDIO_LIBRARIES}") diff --git a/src/Tests/check-ports.rb b/src/Tests/check-ports.rb @@ -0,0 +1,16 @@ +#!/usr/bin/ruby + +require 'open3' + +# start zyn, grep the lo server port, and connect the port checker to it +Open3.popen3(Dir.pwd + "/../zynaddsubfx -O null --no-gui") do |stdin, stdout, stderr, wait_thr| + pid = wait_thr[:pid] + while line=stderr.gets do + # print "line: " + line; + if /^lo server running on (\d+)$/.match(line) then + rval = system(Dir.pwd + "/../../rtosc/port-checker 'osc.udp://localhost:" + $1 + "/'") + Process.kill("KILL", pid) + exit rval + end + end +end