From b694ee9e534441724977157e5bc226d9a2d8fb44 Mon Sep 17 00:00:00 2001 From: Len Ovens Date: Mon, 24 Jul 2017 10:14:21 -0700 Subject: OSC: only use gain change signals if value changes --- libs/surfaces/osc/osc_global_observer.cc | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) (limited to 'libs/surfaces/osc/osc_global_observer.cc') 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 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 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())); } -- cgit v1.2.3