REGISTER_CALLBACK (serv, "/set_loop_range", "f", set_loop_range);
REGISTER_CALLBACK (serv, "/set_session_range", "", set_session_range);
REGISTER_CALLBACK (serv, "/set_session_range", "f", set_session_range);
- // /toggle_monitor_* not working (comented out)
REGISTER_CALLBACK (serv, "/toggle_monitor_mute", "", toggle_monitor_mute);
REGISTER_CALLBACK (serv, "/toggle_monitor_mute", "f", toggle_monitor_mute);
REGISTER_CALLBACK (serv, "/toggle_monitor_dim", "", toggle_monitor_dim);
REGISTER_CALLBACK (serv, "/master/pan_stereo_position", "f", master_set_pan_stereo_position);
REGISTER_CALLBACK (serv, "/monitor/gain", "f", monitor_set_gain);
REGISTER_CALLBACK (serv, "/monitor/fader", "f", monitor_set_fader);
+ REGISTER_CALLBACK (serv, "/monitor/mute", "i", monitor_set_mute);
+ REGISTER_CALLBACK (serv, "/monitor/dim", "i", monitor_set_dim);
+ REGISTER_CALLBACK (serv, "/monitor/mono", "i", monitor_set_mono);
// Controls for the Selected strip
REGISTER_CALLBACK (serv, "/select/recenable", "i", sel_recenable);
if (!session) {
return;
}
- for (int n = 0; n < (int) session->nroutes(); ++n) {
+ OSCSurface *sur = get_surface(get_address (msg));
+ sur->no_clear = true;
- boost::shared_ptr<Route> r = session->get_remote_nth_route (n);
+ for (int n = 0; n < (int) sur->nstrips; ++n) {
- if (r) {
+ boost::shared_ptr<Stripable> s = get_strip (n + 1, get_address (msg));
+
+ if (s) {
+ // some things need the route
+ boost::shared_ptr<Route> r = boost::dynamic_pointer_cast<Route> (s);
lo_message reply = lo_message_new ();
- if (boost::dynamic_pointer_cast<AudioTrack>(r)) {
+ if (s->presentation_info().flags() & PresentationInfo::AudioTrack) {
lo_message_add_string (reply, "AT");
- } else if (boost::dynamic_pointer_cast<MidiTrack>(r)) {
+ } else if (s->presentation_info().flags() & PresentationInfo::MidiTrack) {
lo_message_add_string (reply, "MT");
- } else {
- lo_message_add_string (reply, "B");
+ } else if (s->presentation_info().flags() & PresentationInfo::AudioBus) {
+ // r->feeds (session->master_out()) may make more sense
+ if (r->direct_feeds_according_to_reality (session->master_out())) {
+ // this is a bus
+ lo_message_add_string (reply, "B");
+ } else {
+ // this is an Aux out
+ lo_message_add_string (reply, "AX");
+ }
+ } else if (s->presentation_info().flags() & PresentationInfo::MidiBus) {
+ lo_message_add_string (reply, "MB");
+ } else if (s->presentation_info().flags() & PresentationInfo::VCA) {
+ lo_message_add_string (reply, "V");
}
- lo_message_add_string (reply, r->name().c_str());
- lo_message_add_int32 (reply, r->n_inputs().n_audio());
- lo_message_add_int32 (reply, r->n_outputs().n_audio());
- lo_message_add_int32 (reply, r->muted());
- lo_message_add_int32 (reply, r->soloed());
- /* XXX Can only use order at this point */
- //lo_message_add_int32 (reply, r->presentation_info().order());
- // try this instead.
- lo_message_add_int32 (reply, get_sid (r, get_address (msg)));
-
- if (boost::dynamic_pointer_cast<AudioTrack>(r)
- || boost::dynamic_pointer_cast<MidiTrack>(r)) {
-
- boost::shared_ptr<Track> t = boost::dynamic_pointer_cast<Track>(r);
- lo_message_add_int32 (reply, (int32_t) t->rec_enable_control()->get_value());
+ lo_message_add_string (reply, s->name().c_str());
+ if (r) {
+ // routes have inputs and outputs
+ lo_message_add_int32 (reply, r->n_inputs().n_audio());
+ lo_message_add_int32 (reply, r->n_outputs().n_audio());
+ } else {
+ // non-routes like VCAs don't
+ lo_message_add_int32 (reply, 0);
+ lo_message_add_int32 (reply, 0);
+ }
+ if (s->mute_control()) {
+ lo_message_add_int32 (reply, s->mute_control()->get_value());
+ } else {
+ lo_message_add_int32 (reply, 0);
+ }
+ if (s->solo_control()) {
+ lo_message_add_int32 (reply, s->solo_control()->get_value());
+ } else {
+ lo_message_add_int32 (reply, 0);
+ }
+ lo_message_add_int32 (reply, n + 1);
+ if (s->rec_enable_control()) {
+ lo_message_add_int32 (reply, s->rec_enable_control()->get_value());
}
//Automatically listen to routes listed
lo_message_add_string (reply, "end_route_list");
lo_message_add_int64 (reply, session->frame_rate());
lo_message_add_int64 (reply, session->current_end_frame());
+ if (session->monitor_out()) {
+ // this session has a monitor section
+ lo_message_add_int32 (reply, 1);
+ } else {
+ lo_message_add_int32 (reply, 0);
+ }
lo_send_message (get_address (msg), "#reply", reply);
} else {
_set_bank (sur->bank, addr);
}
+ if (sur->no_clear) {
+ // This surface uses /strip/list tell it routes have changed
+ lo_message reply;
+ reply = lo_message_new ();
+ lo_send_message (addr, "/strip/list", reply);
+ lo_message_free (reply);
+ }
}
}
return 0;
}
+int
+OSC::monitor_set_mute (uint32_t state)
+{
+ if (!session) return -1;
+
+ if (session->monitor_out()) {
+ boost::shared_ptr<MonitorProcessor> mon = session->monitor_out()->monitor_control();
+ mon->set_cut_all (state);
+ }
+ return 0;
+}
+
+int
+OSC::monitor_set_dim (uint32_t state)
+{
+ if (!session) return -1;
+
+ if (session->monitor_out()) {
+ boost::shared_ptr<MonitorProcessor> mon = session->monitor_out()->monitor_control();
+ mon->set_dim_all (state);
+ }
+ return 0;
+}
+
+int
+OSC::monitor_set_mono (uint32_t state)
+{
+ if (!session) return -1;
+
+ if (session->monitor_out()) {
+ boost::shared_ptr<MonitorProcessor> mon = session->monitor_out()->monitor_control();
+ mon->set_mono (state);
+ }
+ return 0;
+}
+
int
OSC::route_get_sends(lo_message msg) {
if (!session) {
if (s) {
if(s->pan_azimuth_control()) {
s->pan_azimuth_control()->set_value (s->pan_azimuth_control()->interface_to_internal (pos), PBD::Controllable::NoGroup);
+ return 0;
}
}