zynaddsubfx

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

commit 1e0d0b21e98716788ba55c96fa336ab4849101e1
parent 85697b81a3373f7546c6526b6c61012a2e49fba9
Author: fundamental <mark.d.mccurry@gmail.com>
Date:   Thu, 13 Feb 2014 12:14:11 -0500

OSC: Add Better Broadcast Functionality

- Prevent UI from getting out of sync with external changes
- Open up extension for remote receivers

Diffstat:
Msrc/Misc/Master.cpp | 7++++++-
Msrc/Misc/MiddleWare.cpp | 16++++++++++++++++
2 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/src/Misc/Master.cpp b/src/Misc/Master.cpp @@ -138,10 +138,15 @@ class DataObj:public rtosc::RtData virtual void broadcast(const char *path, const char *args, ...) override{ va_list va; va_start(va,args); + reply("/broadcast"); char *buffer = bToU->buffer(); rtosc_vmessage(buffer,bToU->buffer_size(),path,args,va); reply(buffer);} - virtual void broadcast(const char *msg) override{reply(msg);}; + virtual void broadcast(const char *msg) override + { + reply("/broadcast"); + reply(msg); + }; private: rtosc::ThreadLink *bToU; }; diff --git a/src/Misc/MiddleWare.cpp b/src/Misc/MiddleWare.cpp @@ -411,6 +411,7 @@ struct MiddleWareImpl uToB->write("/load-master", "b", sizeof(Master*), &m); } + bool broadcast = false; void tick(void) { lo_server_recv_noblock(server, 0); @@ -427,6 +428,21 @@ struct MiddleWareImpl } else if(!strcmp(rtmsg, "/setprogram") && !strcmp(rtosc_argument_string(rtmsg),"cc")) { loadPart(rtosc_argument(rtmsg,0).i, master->bank.ins[rtosc_argument(rtmsg,1).i].filename.c_str(), master, osc); + } else if(!strcmp(rtmsg, "/broadcast")) { + broadcast = true; + } else if(broadcast) { + broadcast = false; + cb(ui, rtmsg); + if(curr_url != "GUI") { + lo_message msg = lo_message_deserialise((void*)rtmsg, + rtosc_message_length(rtmsg, bToU->buffer_size()), NULL); + + //Send to known url + if(!curr_url.empty()) { + lo_address addr = lo_address_new_from_url(curr_url.c_str()); + lo_send_message(addr, rtmsg, msg); + } + } } else if(curr_url == "GUI") { cb(ui, rtmsg); //GUI::raiseUi(gui, bToU->read()); } else{