diff options
author | Len Ovens <len@ovenwerks.net> | 2017-07-24 10:14:21 -0700 |
---|---|---|
committer | Len Ovens <len@ovenwerks.net> | 2017-07-24 10:21:31 -0700 |
commit | b694ee9e534441724977157e5bc226d9a2d8fb44 (patch) | |
tree | 701a6a7338653bc6003ca1f6402d33c9dc6dfa15 /libs/surfaces/osc/osc_global_observer.cc | |
parent | 3ab4a1d1475db9fb8a65fdb8e885b530b742dfc1 (diff) |
OSC: only use gain change signals if value changes
Diffstat (limited to 'libs/surfaces/osc/osc_global_observer.cc')
-rw-r--r-- | libs/surfaces/osc/osc_global_observer.cc | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/libs/surfaces/osc/osc_global_observer.cc b/libs/surfaces/osc/osc_global_observer.cc index a76463d467..0649626271 100644 --- a/libs/surfaces/osc/osc_global_observer.cc +++ b/libs/surfaces/osc/osc_global_observer.cc @@ -39,6 +39,9 @@ using namespace ArdourSurface; OSCGlobalObserver::OSCGlobalObserver (Session& s, ArdourSurface::OSC::OSCSurface* su) : sur (su) ,_init (true) + ,_last_master_gain (0.0) + ,_last_master_trim (0.0) + ,_last_monitor_gain (0.0) { 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)); @@ -268,10 +271,25 @@ OSCGlobalObserver::send_change_message (string path, boost::shared_ptr<Controlla void OSCGlobalObserver::send_gain_message (string path, boost::shared_ptr<Controllable> controllable) { + bool ismaster = false; + if (path.find("master") != std::string::npos) { + ismaster = true; + if (_last_master_gain != controllable->get_value()) { + _last_master_gain = controllable->get_value(); + } else { + return; + } + } else { + if (_last_monitor_gain != controllable->get_value()) { + _last_monitor_gain = controllable->get_value(); + } else { + return; + } + } if (gainmode) { float_message (string_compose ("%1fader", path), controllable->internal_to_interface (controllable->get_value())); text_message (string_compose ("%1name", path), string_compose ("%1%2%3", std::fixed, std::setprecision(2), accurate_coefficient_to_dB (controllable->get_value()))); - if (path.find("master") != std::string::npos) { + if (ismaster) { master_timeout = 8; } else { monitor_timeout = 8; @@ -289,6 +307,11 @@ OSCGlobalObserver::send_gain_message (string path, boost::shared_ptr<Controllabl void OSCGlobalObserver::send_trim_message (string path, boost::shared_ptr<Controllable> controllable) { + if (_last_master_trim != controllable->get_value()) { + _last_master_trim = controllable->get_value(); + } else { + return; + } float_message (X_("/master/trimdB"), (float) accurate_coefficient_to_dB (controllable->get_value())); } |