summaryrefslogtreecommitdiff
path: root/libs/surfaces/osc
diff options
context:
space:
mode:
authorLen Ovens <len@ovenwerks.net>2016-07-13 09:56:35 -0700
committerLen Ovens <len@ovenwerks.net>2016-07-13 09:56:35 -0700
commitb77b3cbe224a17fdb7e00ed14d003dbd5dd571f8 (patch)
treeac5d409baf0fa9552757f861ee31a8b18ebc2d6f /libs/surfaces/osc
parent0fdbbac99dfcbb23c1df1bdca89254af84954685 (diff)
OSC: Add global soloing indicator/cancel
Diffstat (limited to 'libs/surfaces/osc')
-rw-r--r--libs/surfaces/osc/osc.cc8
-rw-r--r--libs/surfaces/osc/osc.h2
-rw-r--r--libs/surfaces/osc/osc_global_observer.cc10
-rw-r--r--libs/surfaces/osc/osc_global_observer.h1
4 files changed, 21 insertions, 0 deletions
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);
@@ -1177,6 +1178,13 @@ OSC::routes_list (lo_message msg)
}
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)
{
OSCSurface *s = get_surface(lo_message_get_source (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<OSCUIRequest>
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<OSCUIRequest>
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__ */