diff options
author | Len Ovens <len@ovenwerks.net> | 2017-10-25 21:22:59 -0700 |
---|---|---|
committer | Len Ovens <len@ovenwerks.net> | 2017-10-25 21:56:29 -0700 |
commit | a2965f585a819bd86952e6feff62d66068d44722 (patch) | |
tree | da436d8d617774b74eff6f09bc5b0af739e68851 | |
parent | aba52ad8a2400182ce57d647ed85cfecfef90cc9 (diff) |
OSC: add feedback for punch in/out, click and click level
-rw-r--r-- | libs/surfaces/osc/osc_global_observer.cc | 37 | ||||
-rw-r--r-- | libs/surfaces/osc/osc_global_observer.h | 4 |
2 files changed, 40 insertions, 1 deletions
diff --git a/libs/surfaces/osc/osc_global_observer.cc b/libs/surfaces/osc/osc_global_observer.cc index 67e59c2429..d06b0b3e77 100644 --- a/libs/surfaces/osc/osc_global_observer.cc +++ b/libs/surfaces/osc/osc_global_observer.cc @@ -21,6 +21,7 @@ #include "pbd/control_math.h" +#include "ardour/amp.h" #include "ardour/session.h" #include "ardour/dB.h" #include "ardour/meter.h" @@ -43,6 +44,9 @@ OSCGlobalObserver::OSCGlobalObserver (OSC& o, Session& s, ArdourSurface::OSC::OS ,_last_master_gain (0.0) ,_last_master_trim (0.0) ,_last_monitor_gain (0.0) + ,last_punchin (4) + ,last_punchout (4) + ,last_click (4) { addr = lo_address_new_from_url (sur->remote_url.c_str()); //addr = lo_address_new (lo_address_get_hostname(a) , lo_address_get_port(a)); @@ -120,6 +124,12 @@ OSCGlobalObserver::OSCGlobalObserver (OSC& o, Session& s, ArdourSurface::OSC::OS session->SoloActive.connect(session_connections, MISSING_INVALIDATOR, boost::bind (&OSCGlobalObserver::solo_active, this, _1), OSC::instance()); solo_active (session->soloing() || session->listening()); + boost::shared_ptr<Controllable> click_controllable = boost::dynamic_pointer_cast<Controllable>(session->click_gain()->gain_control()); + click_controllable->Changed.connect (strip_connections, MISSING_INVALIDATOR, boost::bind (&OSCGlobalObserver::send_change_message, this, X_("/click/level"), click_controllable), OSC::instance()); + send_change_message ("/click/level", click_controllable); + + extra_check (); + /* * Maybe (many) more */ @@ -184,11 +194,16 @@ OSCGlobalObserver::clear_observer () _osc.float_message (X_("/loop_toggle"), 0, addr); _osc.float_message (X_("/transport_play"), 0, addr); _osc.float_message (X_("/transport_stop"), 0, addr); + _osc.float_message (X_("/toggle_roll"), 0, addr); _osc.float_message (X_("/rewind"), 0, addr); _osc.float_message (X_("/ffwd"), 0, addr); _osc.float_message (X_("/record_tally"), 0, addr); _osc.float_message (X_("/rec_enable_toggle"), 0, addr); _osc.float_message (X_("/cancel_all_solos"), 0, addr); + _osc.float_message (X_("/toggle_punch_out"), 0, addr); + _osc.float_message (X_("/toggle_punch_in"), 0, addr); + _osc.float_message (X_("/toggle_click"), 0, addr); + _osc.float_message (X_("/click/level"), 0, addr); } @@ -315,13 +330,15 @@ OSCGlobalObserver::tick () } monitor_timeout--; } + extra_check (); } } void OSCGlobalObserver::send_change_message (string path, boost::shared_ptr<Controllable> controllable) { - _osc.float_message (path, (float) controllable->get_value(), addr); + float val = controllable->get_value(); + _osc.float_message (path, (float) controllable->internal_to_interface (val), addr); } void @@ -406,3 +423,21 @@ OSCGlobalObserver::solo_active (bool active) { _osc.float_message (X_("/cancel_all_solos"), (float) active, addr); } + +void +OSCGlobalObserver::extra_check () +{ + if (last_punchin != session->config.get_punch_in()) { + last_punchin = session->config.get_punch_in(); + _osc.float_message (X_("/toggle_punch_in"), last_punchin, addr); + } + if (last_punchout != session->config.get_punch_out()) { + last_punchout = session->config.get_punch_out(); + _osc.float_message (X_("/toggle_punch_out"), last_punchout, addr); + } + if (last_click != Config->get_clicking()) { + last_click = Config->get_clicking(); + _osc.float_message (X_("/toggle_click"), last_click, addr); + } +} + diff --git a/libs/surfaces/osc/osc_global_observer.h b/libs/surfaces/osc/osc_global_observer.h index 4c071cdf0c..ef9637274f 100644 --- a/libs/surfaces/osc/osc_global_observer.h +++ b/libs/surfaces/osc/osc_global_observer.h @@ -66,6 +66,9 @@ class OSCGlobalObserver float _last_meter; uint32_t master_timeout; uint32_t monitor_timeout; + uint32_t last_punchin; + uint32_t last_punchout; + uint32_t last_click; void send_change_message (std::string path, boost::shared_ptr<PBD::Controllable> controllable); void send_gain_message (std::string path, boost::shared_ptr<PBD::Controllable> controllable); @@ -74,6 +77,7 @@ class OSCGlobalObserver void send_record_state_changed (void); void solo_active (bool active); void session_name (std::string path, std::string name); + void extra_check (void); }; #endif /* __osc_oscglobalobserver_h__ */ |