From b77b3cbe224a17fdb7e00ed14d003dbd5dd571f8 Mon Sep 17 00:00:00 2001 From: Len Ovens Date: Wed, 13 Jul 2016 09:56:35 -0700 Subject: [PATCH 1/1] OSC: Add global soloing indicator/cancel --- libs/surfaces/osc/osc.cc | 8 ++++++++ libs/surfaces/osc/osc.h | 2 ++ libs/surfaces/osc/osc_global_observer.cc | 10 ++++++++++ libs/surfaces/osc/osc_global_observer.h | 1 + 4 files changed, 21 insertions(+) diff --git a/libs/surfaces/osc/osc.cc b/libs/surfaces/osc/osc.cc index 77a222d2c4..0f2dee2893 100644 --- a/libs/surfaces/osc/osc.cc +++ b/libs/surfaces/osc/osc.cc @@ -443,6 +443,7 @@ OSC::register_callbacks() REGISTER_CALLBACK (serv, "/toggle_all_rec_enables", "f", toggle_all_rec_enables); REGISTER_CALLBACK (serv, "/all_tracks_rec_in", "f", all_tracks_rec_in); REGISTER_CALLBACK (serv, "/all_tracks_rec_out", "f", all_tracks_rec_out); + REGISTER_CALLBACK (serv, "/cancel_all_solos", "f", cancel_all_solos); REGISTER_CALLBACK (serv, "/remove_marker", "", remove_marker_at_playhead); REGISTER_CALLBACK (serv, "/remove_marker", "f", remove_marker_at_playhead); REGISTER_CALLBACK (serv, "/jump_bars", "f", jump_by_bars); @@ -1176,6 +1177,13 @@ OSC::routes_list (lo_message msg) lo_message_free (reply); } +int +OSC::cancel_all_solos () +{ + session->clear_all_solo_state (session->get_routes()); + return 0; +} + int OSC::set_surface (uint32_t b_size, uint32_t strips, uint32_t fb, uint32_t gm, lo_message msg) { diff --git a/libs/surfaces/osc/osc.h b/libs/surfaces/osc/osc.h index 2bbac56a78..a5f2bee291 100644 --- a/libs/surfaces/osc/osc.h +++ b/libs/surfaces/osc/osc.h @@ -245,6 +245,7 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI PATH_CALLBACK(toggle_all_rec_enables); PATH_CALLBACK(all_tracks_rec_in); PATH_CALLBACK(all_tracks_rec_out); + PATH_CALLBACK(cancel_all_solos); PATH_CALLBACK(remove_marker_at_playhead); PATH_CALLBACK(mark_in); PATH_CALLBACK(mark_out); @@ -523,6 +524,7 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI void notify_vca_added (ARDOUR::VCAList &); void update_clock (); + int cancel_all_solos (); bool periodic (void); sigc::connection periodic_connection; PBD::ScopedConnectionList session_connections; diff --git a/libs/surfaces/osc/osc_global_observer.cc b/libs/surfaces/osc/osc_global_observer.cc index 68e18d5141..fef3a92619 100644 --- a/libs/surfaces/osc/osc_global_observer.cc +++ b/libs/surfaces/osc/osc_global_observer.cc @@ -115,6 +115,8 @@ OSCGlobalObserver::OSCGlobalObserver (Session& s, lo_address a, uint32_t gm, std // session feedback session->StateSaved.connect(session_connections, MISSING_INVALIDATOR, boost::bind (&OSCGlobalObserver::send_session_saved, this, _1), OSC::instance()); send_session_saved (session->snap_name()); + session->SoloActive.connect(session_connections, MISSING_INVALIDATOR, boost::bind (&OSCGlobalObserver::solo_active, this, _1), OSC::instance()); + solo_active (session->soloing() || session->listening()); /* * Maybe (many) more @@ -372,3 +374,11 @@ OSCGlobalObserver::send_session_saved (std::string name) } +void +OSCGlobalObserver::solo_active (bool active) +{ + lo_message msg = lo_message_new (); + lo_message_add_float (msg, (float) active); + lo_send_message (addr, "/cancel_all_solos", msg); + lo_message_free (msg); +} diff --git a/libs/surfaces/osc/osc_global_observer.h b/libs/surfaces/osc/osc_global_observer.h index 3b1e53b98d..845b9b981e 100644 --- a/libs/surfaces/osc/osc_global_observer.h +++ b/libs/surfaces/osc/osc_global_observer.h @@ -60,6 +60,7 @@ class OSCGlobalObserver void send_transport_state_changed(void); void send_record_state_changed (void); void send_session_saved (std::string name); + void solo_active (bool active); }; #endif /* __osc_oscglobalobserver_h__ */ -- 2.30.2