From 7ab67c42dcd6b80bfbd0381f95e9ea22bd819e4e Mon Sep 17 00:00:00 2001 From: Len Ovens Date: Wed, 12 Aug 2020 08:08:39 -0700 Subject: [PATCH] Fixes OSC panner issues: 8338 and 8246 8338 - crash with midi and no audio strip detect no panner 8246 - send feedback of panner type --- libs/surfaces/osc/osc_route_observer.cc | 10 ++++++++++ libs/surfaces/osc/osc_select_observer.cc | 12 ++++++++++++ 2 files changed, 22 insertions(+) diff --git a/libs/surfaces/osc/osc_route_observer.cc b/libs/surfaces/osc/osc_route_observer.cc index 97d8ff6b45..82c40d116e 100644 --- a/libs/surfaces/osc/osc_route_observer.cc +++ b/libs/surfaces/osc/osc_route_observer.cc @@ -447,6 +447,16 @@ OSCRouteObserver::panner_changed (boost::shared_ptr pan_sh) pan_connections.drop_connections (); if (feedback[1]) { + string pt = pan_sh->current_panner_uri(); + if (pt.size()){ + string ptype = pt.substr(pt.find_last_of ('/') + 1); + _osc.text_message_with_id (X_("/strip/pan_type"), ssid, ptype, in_line, addr); + } else { + _osc.text_message_with_id (X_("/strip/pan_type"), ssid, "none", in_line, addr); + _osc.float_message_with_id (X_("/strip/pan_stereo_position"), ssid, 0.5, in_line, addr); + _osc.float_message_with_id (X_("/strip/pan_stereo_width"), ssid, 1.0, in_line, addr); + return; + } boost::shared_ptr pan_controllable = boost::dynamic_pointer_cast(pan_sh->panner()->pannable()->pan_azimuth_control); if (pan_controllable) { pan_controllable->Changed.connect (pan_connections, MISSING_INVALIDATOR, boost::bind (&OSCRouteObserver::send_change_message, this, X_("/strip/pan_stereo_position"), current_pan_shell->panner()->pannable()->pan_azimuth_control), OSC::instance()); diff --git a/libs/surfaces/osc/osc_select_observer.cc b/libs/surfaces/osc/osc_select_observer.cc index 91f71096b8..16b8f2e657 100644 --- a/libs/surfaces/osc/osc_select_observer.cc +++ b/libs/surfaces/osc/osc_select_observer.cc @@ -664,6 +664,18 @@ OSCSelectObserver::panner_changed () if (feedback[1]) { + boost::shared_ptr rt = boost::dynamic_pointer_cast (_strip); + boost::shared_ptr pan_sh = rt->panner_shell(); + string pt = pan_sh->current_panner_uri(); + if (pt.size()){ + string ptype = pt.substr(pt.find_last_of ('/') + 1); + _osc.text_message (X_("/strip/pan_type"), ptype, addr); + } else { + _osc.text_message (X_("/select/pan_type"), "none", addr); + _osc.float_message (X_("/strip/pan_stereo_position"), 0.5, addr); + _osc.float_message (X_("/strip/pan_stereo_width"), 1.0, addr); + return; + } boost::shared_ptr pan_controllable = boost::dynamic_pointer_cast(_strip->pan_azimuth_control()); if (pan_controllable) { pan_controllable->Changed.connect (pan_connections, MISSING_INVALIDATOR, boost::bind (&OSCSelectObserver::change_message, this, X_("/select/pan_stereo_position"), _strip->pan_azimuth_control()), OSC::instance());