diff options
author | Robin Gareus <robin@gareus.org> | 2019-09-25 14:00:34 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2019-09-25 14:02:45 +0200 |
commit | d10c4c651c38d9e0b0c2c288d543ed464e2f3594 (patch) | |
tree | f17f0494ddc82ea1c6e793fbaea5f18dc9f8d708 /libs | |
parent | 09acad190b6b53b03306c9b89826c4e153d5a780 (diff) |
Consolidate and extend "well-known" controls:
* Add new common strip controls (inspired from Mixbus)
* Remove duplicate documentation, document virtual API only.
* "azimuth" not "azi"
Diffstat (limited to 'libs')
-rw-r--r-- | libs/ardour/ardour/route.h | 51 | ||||
-rw-r--r-- | libs/ardour/ardour/stripable.h | 30 | ||||
-rw-r--r-- | libs/ardour/ardour/vca.h | 3 | ||||
-rw-r--r-- | libs/ardour/route.cc | 305 | ||||
-rw-r--r-- | libs/surfaces/launch_control_xl/controllers.cc | 2 | ||||
-rw-r--r-- | libs/surfaces/us2400/surface.cc | 4 |
6 files changed, 166 insertions, 229 deletions
diff --git a/libs/ardour/ardour/route.h b/libs/ardour/ardour/route.h index 48908efba4..72011a68d6 100644 --- a/libs/ardour/ardour/route.h +++ b/libs/ardour/ardour/route.h @@ -169,8 +169,7 @@ public: void set_trim (gain_t val, PBD::Controllable::GroupControlDisposition); - /* controls use set_solo() to modify this route's solo state - */ + /* controls use set_solo() to modify this route's solo state */ void clear_all_solo_state (); @@ -513,8 +512,9 @@ public: boost::shared_ptr<Processor> the_instrument() const; InstrumentInfo& instrument_info() { return _instrument_info; } - /* "well-known" controls for panning. Any or all of these may return - * null. + + /* "well-known" controls. + * Any or all of these may return NULL. */ boost::shared_ptr<AutomationControl> pan_azimuth_control() const; @@ -523,11 +523,6 @@ public: boost::shared_ptr<AutomationControl> pan_frontback_control() const; boost::shared_ptr<AutomationControl> pan_lfe_control() const; - /* "well-known" controls for an EQ in this route. Any or all may - * be null. eq_band_cnt() must return 0 if there is no EQ present. - * Passing an @param band value >= eq_band_cnt() will guarantee the - * return of a null ptr (or an empty string for eq_band_name()). - */ uint32_t eq_band_cnt () const; std::string eq_band_name (uint32_t) const; boost::shared_ptr<AutomationControl> eq_enable_controllable () const; @@ -536,16 +531,13 @@ public: boost::shared_ptr<AutomationControl> eq_q_controllable (uint32_t band) const; boost::shared_ptr<AutomationControl> eq_shape_controllable (uint32_t band) const; - //additional HP/LP filters boost::shared_ptr<AutomationControl> filter_freq_controllable (bool hpf) const; boost::shared_ptr<AutomationControl> filter_slope_controllable (bool) const; boost::shared_ptr<AutomationControl> filter_enable_controllable (bool) const; boost::shared_ptr<AutomationControl> tape_drive_controllable () const; + boost::shared_ptr<ReadOnlyControl> tape_drive_mtr_controllable () const; - /* "well-known" controls for a compressor in this route. Any or all may - * be null. - */ boost::shared_ptr<AutomationControl> comp_enable_controllable () const; boost::shared_ptr<AutomationControl> comp_threshold_controllable () const; boost::shared_ptr<AutomationControl> comp_speed_controllable () const; @@ -553,39 +545,24 @@ public: boost::shared_ptr<AutomationControl> comp_makeup_controllable () const; boost::shared_ptr<ReadOnlyControl> comp_redux_controllable () const; - /* @param mode must be supplied by the comp_mode_controllable(). All other values - * result in undefined behaviour - */ std::string comp_mode_name (uint32_t mode) const; - /* @param mode - as for comp mode name. This returns the name for the - * parameter/control accessed via comp_speed_controllable(), which can - * be mode dependent. - */ std::string comp_speed_name (uint32_t mode) const; - /* "well-known" controls for sends to well-known busses in this route. Any or all may - * be null. - * - * In Mixbus, these are the sends that connect to the mixbusses. - * In Ardour, these are user-created sends that connect to user-created - * Aux busses. - */ boost::shared_ptr<AutomationControl> send_level_controllable (uint32_t n) const; boost::shared_ptr<AutomationControl> send_enable_controllable (uint32_t n) const; - boost::shared_ptr<AutomationControl> send_pan_azi_controllable (uint32_t n) const; - /* for the same value of @param n, this returns the name of the send - * associated with the pair of controllables returned by the above two methods. - */ + boost::shared_ptr<AutomationControl> send_pan_azimuth_controllable (uint32_t n) const; + boost::shared_ptr<AutomationControl> send_pan_azimuth_enable_controllable (uint32_t n) const; + std::string send_name (uint32_t n) const; - /* well known control that enables/disables sending to the master bus. - * - * In Ardour, this returns null. - * In Mixbus, it will return a suitable control, or null depending on - * the route. - */ boost::shared_ptr<AutomationControl> master_send_enable_controllable () const; + boost::shared_ptr<ReadOnlyControl> master_correlation_mtr_controllable (bool) const; + + boost::shared_ptr<AutomationControl> master_limiter_enable_controllable () const; + boost::shared_ptr<ReadOnlyControl> master_limiter_mtr_controllable () const; + boost::shared_ptr<ReadOnlyControl> master_k_mtr_controllable () const; + void protect_automation (); bool has_external_redirects() const; diff --git a/libs/ardour/ardour/stripable.h b/libs/ardour/ardour/stripable.h index e2c8cda25c..c262d73d25 100644 --- a/libs/ardour/ardour/stripable.h +++ b/libs/ardour/ardour/stripable.h @@ -154,6 +154,7 @@ class LIBARDOUR_API Stripable : public SessionObject, virtual boost::shared_ptr<AutomationControl> filter_enable_controllable (bool hp) const = 0; virtual boost::shared_ptr<AutomationControl> tape_drive_controllable () const { return boost::shared_ptr<AutomationControl>(); } + virtual boost::shared_ptr<ReadOnlyControl> tape_drive_mtr_controllable () const { return boost::shared_ptr<ReadOnlyControl>(); } /* "well-known" controls for a compressor in this route. Any or all may * be null. @@ -185,7 +186,8 @@ class LIBARDOUR_API Stripable : public SessionObject, */ virtual boost::shared_ptr<AutomationControl> send_level_controllable (uint32_t n) const = 0; virtual boost::shared_ptr<AutomationControl> send_enable_controllable (uint32_t n) const = 0; - virtual boost::shared_ptr<AutomationControl> send_pan_azi_controllable (uint32_t n) const = 0; + virtual boost::shared_ptr<AutomationControl> send_pan_azimuth_controllable (uint32_t n) const = 0; + virtual boost::shared_ptr<AutomationControl> send_pan_azimuth_enable_controllable (uint32_t n) const = 0; /* for the same value of @param n, this returns the name of the send * associated with the pair of controllables returned by the above two methods. @@ -200,6 +202,31 @@ class LIBARDOUR_API Stripable : public SessionObject, */ virtual boost::shared_ptr<AutomationControl> master_send_enable_controllable () const = 0; + /* well known control for mixbus's correlation meter. + * + * In Ardour, this returns null. + * In Mixbus, it will return a suitable control, or null depending on the route. + * @param mm min/max of the correlation range, true for upper value + */ + virtual boost::shared_ptr<ReadOnlyControl> master_correlation_mtr_controllable (bool mm) const { return boost::shared_ptr<ReadOnlyControl>(); } + + /* well known control for mixbus's limiter. + * + * In Ardour, this returns null. + * In Mixbus, it will return a suitable control, or null depending on + * the route. + */ + virtual boost::shared_ptr<AutomationControl> master_limiter_enable_controllable () const { return boost::shared_ptr<AutomationControl>(); } + virtual boost::shared_ptr<ReadOnlyControl> master_limiter_mtr_controllable () const { return boost::shared_ptr<ReadOnlyControl>(); } + + /* well known control for mixbus's k-meter. + * + * In Ardour, this returns null. + * In Mixbus, it will return a suitable control, or null depending on + * the route. + */ + virtual boost::shared_ptr<ReadOnlyControl> master_k_mtr_controllable () const { return boost::shared_ptr<ReadOnlyControl>(); } + virtual bool muted_by_others_soloing () const = 0; virtual boost::shared_ptr<MonitorProcessor> monitor_control() const = 0; @@ -209,6 +236,7 @@ class LIBARDOUR_API Stripable : public SessionObject, protected: PresentationInfo _presentation_info; + private: StripableColorDialog* _active_color_picker; }; diff --git a/libs/ardour/ardour/vca.h b/libs/ardour/ardour/vca.h index 41110e9f0a..bf1c02c47d 100644 --- a/libs/ardour/ardour/vca.h +++ b/libs/ardour/ardour/vca.h @@ -141,7 +141,8 @@ class LIBARDOUR_API VCA : public Stripable, std::string comp_speed_name (uint32_t mode) const { return std::string(); } boost::shared_ptr<AutomationControl> send_level_controllable (uint32_t n) const { return boost::shared_ptr<AutomationControl>(); } boost::shared_ptr<AutomationControl> send_enable_controllable (uint32_t n) const { return boost::shared_ptr<AutomationControl>(); } - boost::shared_ptr<AutomationControl> send_pan_azi_controllable (uint32_t n) const { return boost::shared_ptr<AutomationControl>(); } + boost::shared_ptr<AutomationControl> send_pan_azimuth_controllable (uint32_t n) const { return boost::shared_ptr<AutomationControl>(); } + boost::shared_ptr<AutomationControl> send_pan_azimuth_enable_controllable (uint32_t n) const { return boost::shared_ptr<AutomationControl>(); } std::string send_name (uint32_t n) const { return std::string(); } boost::shared_ptr<AutomationControl> master_send_enable_controllable () const { return boost::shared_ptr<AutomationControl>(); } boost::shared_ptr<MonitorProcessor> monitor_control() const { return boost::shared_ptr<MonitorProcessor>(); } diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc index 1829db9e9d..f378d1145d 100644 --- a/libs/ardour/route.cc +++ b/libs/ardour/route.cc @@ -5281,13 +5281,10 @@ boost::shared_ptr<AutomationControl> Route::pan_azimuth_control() const { #ifdef MIXBUS -# undef MIXBUS_PORTS_H -# include "../../gtk2_ardour/mixbus_ports.h" - boost::shared_ptr<ARDOUR::PluginInsert> plug = ch_post(); - if (!plug) { - return boost::shared_ptr<AutomationControl>(); + if (_mixbus_send) { + return _mixbus_send->master_pan_ctrl (); } - return boost::dynamic_pointer_cast<ARDOUR::AutomationControl> (plug->control (Evoral::Parameter (ARDOUR::PluginAutomation, 0, port_channel_post_pan))); + return boost::shared_ptr<AutomationControl>(); #else if (!_pannable || !panner()) { return boost::shared_ptr<AutomationControl>(); @@ -5317,7 +5314,7 @@ Route::pan_width_control() const #ifdef MIXBUS if (mixbus() && _ch_pre) { //mono blend - return boost::dynamic_pointer_cast<ARDOUR::AutomationControl>(_ch_pre->control(Evoral::Parameter(PluginAutomation, 0, 5))); + return boost::dynamic_pointer_cast<ARDOUR::AutomationControl>(_ch_pre->control(Evoral::Parameter(PluginAutomation, 0, 1))); } #endif if (Profile->get_mixbus() || !_pannable || !panner()) { @@ -5386,7 +5383,7 @@ boost::shared_ptr<AutomationControl> Route::eq_gain_controllable (uint32_t band) const { #ifdef MIXBUS - boost::shared_ptr<PluginInsert> eq = ch_eq(); + boost::shared_ptr<PluginInsert> eq = _ch_eq; if (!eq) { return boost::shared_ptr<AutomationControl>(); @@ -5436,7 +5433,7 @@ Route::eq_freq_controllable (uint32_t band) const return boost::shared_ptr<AutomationControl>(); } - boost::shared_ptr<PluginInsert> eq = ch_eq(); + boost::shared_ptr<PluginInsert> eq = _ch_eq; if (!eq) { return boost::shared_ptr<AutomationControl>(); @@ -5478,7 +5475,6 @@ boost::shared_ptr<AutomationControl> Route::eq_shape_controllable (uint32_t band) const { #ifdef MIXBUS32C - boost::shared_ptr<PluginInsert> eq = ch_eq(); if (is_master() || mixbus() || !eq) { return boost::shared_ptr<AutomationControl>(); } @@ -5500,7 +5496,7 @@ boost::shared_ptr<AutomationControl> Route::eq_enable_controllable () const { #ifdef MIXBUS - boost::shared_ptr<PluginInsert> eq = ch_eq(); + boost::shared_ptr<PluginInsert> eq = _ch_eq; if (!eq) { return boost::shared_ptr<AutomationControl>(); @@ -5516,7 +5512,7 @@ boost::shared_ptr<AutomationControl> Route::filter_freq_controllable (bool hpf) const { #ifdef MIXBUS - boost::shared_ptr<PluginInsert> eq = ch_eq(); + boost::shared_ptr<PluginInsert> eq = _ch_eq; if (is_master() || mixbus() || !eq) { return boost::shared_ptr<AutomationControl>(); @@ -5550,7 +5546,7 @@ boost::shared_ptr<AutomationControl> Route::filter_enable_controllable (bool) const { #ifdef MIXBUS32C - boost::shared_ptr<PluginInsert> eq = ch_eq(); + boost::shared_ptr<PluginInsert> eq = _ch_eq; if (is_master() || mixbus() || !eq) { return boost::shared_ptr<AutomationControl>(); @@ -5566,17 +5562,68 @@ boost::shared_ptr<AutomationControl> Route::tape_drive_controllable () const { #ifdef MIXBUS - if (_ch_pre && mixbus()) { - return boost::dynamic_pointer_cast<ARDOUR::AutomationControl> (_ch_pre->control (Evoral::Parameter (ARDOUR::PluginAutomation, 0, 4))); + if (_ch_pre) { + return boost::dynamic_pointer_cast<ARDOUR::AutomationControl> (_ch_pre->control (Evoral::Parameter (ARDOUR::PluginAutomation, 0, 0))); } - if (_ch_pre && is_master()) { - return boost::dynamic_pointer_cast<ARDOUR::AutomationControl> (_ch_pre->control (Evoral::Parameter (ARDOUR::PluginAutomation, 0, 1))); +#endif + return boost::shared_ptr<AutomationControl>(); +} + +boost::shared_ptr<ReadOnlyControl> +Route::tape_drive_mtr_controllable () const +{ +#ifdef MIXBUS + if (_ch_pre) { + return _ch_pre->control_output (is_master() ? 1 : 2); } #endif + return boost::shared_ptr<ReadOnlyControl>(); +} +boost::shared_ptr<ReadOnlyControl> +Route::master_correlation_mtr_controllable (bool mm) const +{ +#ifdef MIXBUS + if (is_master() && _ch_post) { + return _ch_post->control_output (mm ? 4 : 3); + } +#endif + return boost::shared_ptr<ReadOnlyControl>(); +} + +boost::shared_ptr<AutomationControl> +Route::master_limiter_enable_controllable () const +{ +#ifdef MIXBUS + if (is_master() && _ch_post) { + return boost::dynamic_pointer_cast<ARDOUR::AutomationControl> (_ch_post->control (Evoral::Parameter (ARDOUR::PluginAutomation, 0, 1))); + } +#endif return boost::shared_ptr<AutomationControl>(); } +boost::shared_ptr<ReadOnlyControl> +Route::master_limiter_mtr_controllable () const +{ +#ifdef MIXBUS + if (is_master() && _ch_post) { + return _ch_post->control_output (2); + } +#endif + return boost::shared_ptr<ReadOnlyControl>(); +} + +boost::shared_ptr<ReadOnlyControl> +Route::master_k_mtr_controllable () const +{ +#ifdef MIXBUS + if (is_master() && _ch_post) { + return _ch_post->control_output (5); + } +#endif + return boost::shared_ptr<ReadOnlyControl>(); +} + string Route::eq_band_name (uint32_t band) const { @@ -5610,96 +5657,61 @@ boost::shared_ptr<AutomationControl> Route::comp_enable_controllable () const { #ifdef MIXBUS - boost::shared_ptr<PluginInsert> comp = ch_comp(); - - if (!comp) { - return boost::shared_ptr<AutomationControl>(); + if (_ch_comp) { + return boost::dynamic_pointer_cast<ARDOUR::AutomationControl> (_ch_comp->control (Evoral::Parameter (ARDOUR::PluginAutomation, 0, 1))); } - - return boost::dynamic_pointer_cast<ARDOUR::AutomationControl> (comp->control (Evoral::Parameter (ARDOUR::PluginAutomation, 0, 1))); -#else - return boost::shared_ptr<AutomationControl>(); #endif + return boost::shared_ptr<AutomationControl>(); } boost::shared_ptr<AutomationControl> Route::comp_threshold_controllable () const { #ifdef MIXBUS - boost::shared_ptr<PluginInsert> comp = ch_comp(); - - if (!comp) { - return boost::shared_ptr<AutomationControl>(); + if (_ch_comp) { + return boost::dynamic_pointer_cast<ARDOUR::AutomationControl> (_ch_comp->control (Evoral::Parameter (ARDOUR::PluginAutomation, 0, 2))); } - - return boost::dynamic_pointer_cast<ARDOUR::AutomationControl> (comp->control (Evoral::Parameter (ARDOUR::PluginAutomation, 0, 2))); - -#else - return boost::shared_ptr<AutomationControl>(); #endif + return boost::shared_ptr<AutomationControl>(); } boost::shared_ptr<AutomationControl> Route::comp_speed_controllable () const { #ifdef MIXBUS - boost::shared_ptr<PluginInsert> comp = ch_comp(); - - if (!comp) { - return boost::shared_ptr<AutomationControl>(); + if (_ch_comp) { + return boost::dynamic_pointer_cast<ARDOUR::AutomationControl> (_ch_comp->control (Evoral::Parameter (ARDOUR::PluginAutomation, 0, 3))); } - - return boost::dynamic_pointer_cast<ARDOUR::AutomationControl> (comp->control (Evoral::Parameter (ARDOUR::PluginAutomation, 0, 3))); -#else - return boost::shared_ptr<AutomationControl>(); #endif + return boost::shared_ptr<AutomationControl>(); } boost::shared_ptr<AutomationControl> Route::comp_mode_controllable () const { #ifdef MIXBUS - boost::shared_ptr<PluginInsert> comp = ch_comp(); - - if (!comp) { - return boost::shared_ptr<AutomationControl>(); + if (_ch_comp) { + return boost::dynamic_pointer_cast<ARDOUR::AutomationControl> (_ch_comp->control (Evoral::Parameter (ARDOUR::PluginAutomation, 0, 4))); } - - return boost::dynamic_pointer_cast<ARDOUR::AutomationControl> (comp->control (Evoral::Parameter (ARDOUR::PluginAutomation, 0, 4))); -#else - return boost::shared_ptr<AutomationControl>(); #endif + return boost::shared_ptr<AutomationControl>(); } boost::shared_ptr<AutomationControl> Route::comp_makeup_controllable () const { #ifdef MIXBUS - boost::shared_ptr<PluginInsert> comp = ch_comp(); - - if (!comp) { - return boost::shared_ptr<AutomationControl>(); + if (_ch_comp) { + return boost::dynamic_pointer_cast<ARDOUR::AutomationControl> (_ch_comp->control (Evoral::Parameter (ARDOUR::PluginAutomation, 0, 5))); } - - return boost::dynamic_pointer_cast<ARDOUR::AutomationControl> (comp->control (Evoral::Parameter (ARDOUR::PluginAutomation, 0, 5))); -#else - return boost::shared_ptr<AutomationControl>(); #endif + return boost::shared_ptr<AutomationControl>(); } boost::shared_ptr<ReadOnlyControl> Route::comp_redux_controllable () const { #ifdef MIXBUS - boost::shared_ptr<PluginInsert> comp = ch_comp(); - - if (!comp) { - return boost::shared_ptr<ReadOnlyControl>(); + if (_ch_comp) { + return _ch_comp->control_output (6); } - if (is_master()) { - return comp->control_output (2); - } else { - return comp->control_output (6); - } - -#else - return boost::shared_ptr<ReadOnlyControl>(); #endif + return boost::shared_ptr<ReadOnlyControl>(); } string @@ -5743,39 +5755,15 @@ Route::comp_speed_name (uint32_t mode) const } boost::shared_ptr<AutomationControl> -Route::send_pan_azi_controllable (uint32_t n) const +Route::send_pan_azimuth_controllable (uint32_t n) const { #ifdef MIXBUS -# undef MIXBUS_PORTS_H -# include "../../gtk2_ardour/mixbus_ports.h" - boost::shared_ptr<ARDOUR::PluginInsert> plug = ch_post(); - if (plug && !mixbus()) { - uint32_t port_id = 0; - switch (n) { -# ifdef MIXBUS32C - case 0: port_id = port_channel_post_aux0_pan; break; //32c mb "pan" controls use zero-based names, unlike levels. ugh - case 1: port_id = port_channel_post_aux1_pan; break; - case 2: port_id = port_channel_post_aux2_pan; break; - case 3: port_id = port_channel_post_aux3_pan; break; - case 4: port_id = port_channel_post_aux4_pan; break; - case 5: port_id = port_channel_post_aux5_pan; break; - case 6: port_id = port_channel_post_aux6_pan; break; - case 7: port_id = port_channel_post_aux7_pan; break; - case 8: port_id = port_channel_post_aux8_pan; break; - case 9: port_id = port_channel_post_aux9_pan; break; - case 10: port_id = port_channel_post_aux10_pan; break; - case 11: port_id = port_channel_post_aux11_pan; break; -# endif - default: - break; - } - - if (port_id > 0) { - return boost::dynamic_pointer_cast<ARDOUR::AutomationControl> (plug->control (Evoral::Parameter (ARDOUR::PluginAutomation, 0, port_id))); + if (_mixbus_send) { + if (n < _mixbus_send->n_busses ()) { + return _mixbus_send->send_pan_ctrl (n + 1); } } #endif - return boost::shared_ptr<AutomationControl>(); } @@ -5783,87 +5771,28 @@ boost::shared_ptr<AutomationControl> Route::send_level_controllable (uint32_t n) const { #ifdef MIXBUS -# undef MIXBUS_PORTS_H -# include "../../gtk2_ardour/mixbus_ports.h" - boost::shared_ptr<ARDOUR::PluginInsert> plug = ch_post(); - if (plug && !mixbus()) { - uint32_t port_id = 0; - switch (n) { - case 0: port_id = port_channel_post_aux1_level; break; - case 1: port_id = port_channel_post_aux2_level; break; - case 2: port_id = port_channel_post_aux3_level; break; - case 3: port_id = port_channel_post_aux4_level; break; - case 4: port_id = port_channel_post_aux5_level; break; - case 5: port_id = port_channel_post_aux6_level; break; - case 6: port_id = port_channel_post_aux7_level; break; - case 7: port_id = port_channel_post_aux8_level; break; -# ifdef MIXBUS32C - case 8: port_id = port_channel_post_aux9_level; break; - case 9: port_id = port_channel_post_aux10_level; break; - case 10: port_id = port_channel_post_aux11_level; break; - case 11: port_id = port_channel_post_aux12_level; break; -# endif - default: - break; + if (_mixbus_send) { + if (n < _mixbus_send->n_busses ()) { + return _mixbus_send->send_gain_ctrl (n + 1); } - - if (port_id > 0) { - return boost::dynamic_pointer_cast<ARDOUR::AutomationControl> (plug->control (Evoral::Parameter (ARDOUR::PluginAutomation, 0, port_id))); - } -# ifdef MIXBUS32C - assert (n > 11); - n -= 12; -# else - assert (n > 7); - n -= 8; -# endif + n -= _mixbus_send->n_busses (); } #endif boost::shared_ptr<Send> s = boost::dynamic_pointer_cast<Send>(nth_send (n)); - if (!s) { - return boost::shared_ptr<AutomationControl>(); + if (s) { + return s->gain_control (); } - return s->gain_control (); + return boost::shared_ptr<AutomationControl>(); } boost::shared_ptr<AutomationControl> Route::send_enable_controllable (uint32_t n) const { #ifdef MIXBUS -# undef MIXBUS_PORTS_H -# include "../../gtk2_ardour/mixbus_ports.h" - boost::shared_ptr<ARDOUR::PluginInsert> plug = ch_post(); - if (plug && !mixbus()) { - uint32_t port_id = 0; - switch (n) { - case 0: port_id = port_channel_post_aux1_asgn; break; - case 1: port_id = port_channel_post_aux2_asgn; break; - case 2: port_id = port_channel_post_aux3_asgn; break; - case 3: port_id = port_channel_post_aux4_asgn; break; - case 4: port_id = port_channel_post_aux5_asgn; break; - case 5: port_id = port_channel_post_aux6_asgn; break; - case 6: port_id = port_channel_post_aux7_asgn; break; - case 7: port_id = port_channel_post_aux8_asgn; break; -# ifdef MIXBUS32C - case 8: port_id = port_channel_post_aux9_asgn; break; - case 9: port_id = port_channel_post_aux10_asgn; break; - case 10: port_id = port_channel_post_aux11_asgn; break; - case 11: port_id = port_channel_post_aux12_asgn; break; -# endif - default: - break; - } - - if (port_id > 0) { - return boost::dynamic_pointer_cast<ARDOUR::AutomationControl> (plug->control (Evoral::Parameter (ARDOUR::PluginAutomation, 0, port_id))); + if (_mixbus_send) { + if (n < _mixbus_send->n_busses ()) { + return _mixbus_send->send_enable_ctrl (n + 1); } -# ifdef MIXBUS32C - assert (n > 11); - n -= 12; -# else - assert (n > 7); - n -= 8; -# endif } #endif /* although Ardour sends have enable/disable as part of the Processor @@ -5874,31 +5803,35 @@ Route::send_enable_controllable (uint32_t n) const return boost::shared_ptr<AutomationControl>(); } +boost::shared_ptr<AutomationControl> +Route::send_pan_azimuth_enable_controllable (uint32_t n) const +{ +#ifdef MIXBUS + if (_mixbus_send) { + if (n < _mixbus_send->n_busses ()) { + return _mixbus_send->send_pan_enable_ctrl (n + 1); + } + } +#endif + return boost::shared_ptr<AutomationControl>(); +} + string Route::send_name (uint32_t n) const { -#ifdef MIXBUS - boost::shared_ptr<ARDOUR::PluginInsert> plug = ch_post(); - if (plug && !mixbus()) { -# ifdef MIXBUS32C - if (n < 12) { - return _session.get_mixbus (n)->name(); - } - n -= 12; -#else - if (n < 8) { +#ifdef MIXBUS + if (_mixbus_send) { + if (n < _mixbus_send->n_busses ()) { return _session.get_mixbus (n)->name(); } - n -= 8; -# endif + n -= _mixbus_send->n_busses (); } #endif boost::shared_ptr<Processor> p = nth_send (n); if (p) { return p->name(); - } else { - return string(); } + return string(); } boost::shared_ptr<AutomationControl> @@ -5909,14 +5842,12 @@ Route::master_send_enable_controllable () const return boost::shared_ptr<AutomationControl>(); } - boost::shared_ptr<ARDOUR::PluginInsert> plug = mixbus() ? ch_pre () : ch_post(); - if (!plug) { - return boost::shared_ptr<AutomationControl>(); + if (_mixbus_send) { + return _mixbus_send->master_send_enable_ctrl (); } - return boost::dynamic_pointer_cast<ARDOUR::AutomationControl> (plug->control (Evoral::Parameter (ARDOUR::PluginAutomation, 0, mixbus() ? 3 : 19))); -#else - return boost::shared_ptr<AutomationControl>(); + #endif + return boost::shared_ptr<AutomationControl>(); } bool diff --git a/libs/surfaces/launch_control_xl/controllers.cc b/libs/surfaces/launch_control_xl/controllers.cc index 530af0c2d7..a25504b885 100644 --- a/libs/surfaces/launch_control_xl/controllers.cc +++ b/libs/surfaces/launch_control_xl/controllers.cc @@ -1553,7 +1553,7 @@ LaunchControlXL::dm_mb_sends (KnobID k) if (buttons_down.find(Device) != buttons_down.end()) { // Device button hold - ac = first_selected_stripable()->send_pan_azi_controllable(send); + ac = first_selected_stripable()->send_pan_azimuth_controllable(send); } else { ac = first_selected_stripable()->send_level_controllable(send); } diff --git a/libs/surfaces/us2400/surface.cc b/libs/surfaces/us2400/surface.cc index 62c97c8876..2726851539 100644 --- a/libs/surfaces/us2400/surface.cc +++ b/libs/surfaces/us2400/surface.cc @@ -641,12 +641,12 @@ Surface::handle_midi_controller_message (MIDI::Parser &, MIDI::EventTwoBytes* ev float value = (float)ev->value / 127.0; boost::shared_ptr<Stripable> r = mcp().subview_stripable(); if (r && r->is_input_strip()) { - boost::shared_ptr<AutomationControl> pc = r->send_pan_azi_controllable (10); + boost::shared_ptr<AutomationControl> pc = r->send_pan_azimuth_controllable (10); if (pc) { float v = pc->interface_to_internal(value); pc->set_value (v, PBD::Controllable::NoGroup); } - pc = r->send_pan_azi_controllable (11); + pc = r->send_pan_azimuth_controllable (11); if (pc) { float v = pc->interface_to_internal(value); pc->set_value (v, PBD::Controllable::NoGroup); |