diff --git a/libs/ardour/ardour/route.h b/libs/ardour/ardour/route.h index e916bc403e..038e750d01 100644 --- a/libs/ardour/ardour/route.h +++ b/libs/ardour/ardour/route.h @@ -511,6 +511,11 @@ public: boost::shared_ptr eq_enable_controllable () const; boost::shared_ptr eq_hpf_controllable () const; + //additional filter params (currently 32C only ) + boost::shared_ptr eq_lpf_controllable () const; + boost::shared_ptr filter_enable_controllable () const; + + /* "well-known" controls for a compressor in this route. Any or all may * be null. */ diff --git a/libs/ardour/ardour/stripable.h b/libs/ardour/ardour/stripable.h index 7298a4807e..dea2d55c89 100644 --- a/libs/ardour/ardour/stripable.h +++ b/libs/ardour/ardour/stripable.h @@ -142,6 +142,10 @@ class LIBARDOUR_API Stripable : public SessionObject, virtual boost::shared_ptr eq_enable_controllable () const = 0; virtual boost::shared_ptr eq_hpf_controllable () const = 0; + //additional filter params (currently 32C only ) + virtual boost::shared_ptr eq_lpf_controllable () const = 0; + virtual boost::shared_ptr filter_enable_controllable () const = 0; + /* "well-known" controls for a compressor in this route. Any or all may * be null. */ diff --git a/libs/ardour/ardour/types.h b/libs/ardour/ardour/types.h index 17a86fc6c5..0076a72a1f 100644 --- a/libs/ardour/ardour/types.h +++ b/libs/ardour/ardour/types.h @@ -160,8 +160,10 @@ namespace ARDOUR { EQFrequency, EQQ, EQShape, - EQHPF, EQEnable, + EQHPF, + EQLPF, + EQFilterEnable, CompThreshold, CompSpeed, CompMode, diff --git a/libs/ardour/ardour/vca.h b/libs/ardour/ardour/vca.h index 5cf06e4d69..8ef0b9d241 100644 --- a/libs/ardour/ardour/vca.h +++ b/libs/ardour/ardour/vca.h @@ -140,6 +140,10 @@ class LIBARDOUR_API VCA : public Stripable, boost::shared_ptr monitor_control() const { return boost::shared_ptr(); } boost::shared_ptr monitoring_control() const { return boost::shared_ptr(); } + //additional filter params (currently 32C only ) + boost::shared_ptr eq_lpf_controllable () const { return boost::shared_ptr(); } + boost::shared_ptr filter_enable_controllable () const { return boost::shared_ptr(); } + private: int32_t _number; diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc index c6e3f157b3..dba71584e2 100644 --- a/libs/ardour/route.cc +++ b/libs/ardour/route.cc @@ -5113,6 +5113,38 @@ Route::eq_hpf_controllable () const #endif } +boost::shared_ptr +Route::eq_lpf_controllable () const +{ +#ifdef MIXBUS32C + boost::shared_ptr eq = ch_eq(); + + if (!eq) { + return boost::shared_ptr(); + } + + return boost::dynamic_pointer_cast (eq->control (Evoral::Parameter (ARDOUR::PluginAutomation, 0, 6))); +#else + return boost::shared_ptr(); +#endif +} + +boost::shared_ptr +Route::filter_enable_controllable () const +{ +#ifdef MIXBUS32C + boost::shared_ptr eq = ch_eq(); + + if (!eq) { + return boost::shared_ptr(); + } + + return boost::dynamic_pointer_cast (eq->control (Evoral::Parameter (ARDOUR::PluginAutomation, 0, 2))); +#else + return boost::shared_ptr(); +#endif +} + string Route::eq_band_name (uint32_t band) const { diff --git a/libs/surfaces/mackie/strip.cc b/libs/surfaces/mackie/strip.cc index 9a570f8227..61cb64ce9b 100644 --- a/libs/surfaces/mackie/strip.cc +++ b/libs/surfaces/mackie/strip.cc @@ -525,12 +525,14 @@ Strip::notify_eq_change (AutomationType type, uint32_t band, bool force_update) case EQShape: control = r->eq_shape_controllable (band); break; - case EQHPF: - control = r->eq_hpf_controllable (); - break; case EQEnable: control = r->eq_enable_controllable (); break; +#ifndef MIXBUS32C + case EQHPF: + control = r->eq_hpf_controllable (); + break; +#endif default: break; } @@ -578,6 +580,17 @@ Strip::notify_dyn_change (AutomationType type, bool force_update, bool propagate case CompEnable: control = r->comp_enable_controllable (); break; +#ifdef MIXBUS32C + case EQHPF: + control = r->eq_hpf_controllable (); + break; + case EQLPF: + control = r->eq_lpf_controllable (); + break; + case EQFilterEnable: + control = r->filter_enable_controllable (); + break; +#endif default: break; } @@ -993,6 +1006,7 @@ Strip::do_parameter_display (AutomationType type, float val) case EQQ: case EQShape: case EQHPF: + case EQLPF: case CompThreshold: case CompSpeed: case CompMakeup: @@ -1001,6 +1015,7 @@ Strip::do_parameter_display (AutomationType type, float val) pending_display[1] = buf; screen_hold = true; break; + case EQFilterEnable: case EQEnable: case CompEnable: if (val >= 0.5) { @@ -1531,6 +1546,12 @@ Strip::setup_dyn_vpot (boost::shared_ptr r) boost::shared_ptr kc = r->comp_makeup_controllable (); boost::shared_ptr ec = r->comp_enable_controllable (); +#ifdef MIXBUS32C //Mixbus32C needs to spill the filter controls into the comp section + boost::shared_ptr hpfc = r->eq_hpf_controllable (); + boost::shared_ptr lpfc = r->eq_lpf_controllable (); + boost::shared_ptr fec = r->filter_enable_controllable (); +#endif + uint32_t pos = _surface->mcp().global_index (*this); /* we will control the pos-th available parameter, from the list in the @@ -1546,6 +1567,12 @@ Strip::setup_dyn_vpot (boost::shared_ptr r) if (kc) { available.push_back (kc); params.push_back (CompMakeup); } if (ec) { available.push_back (ec); params.push_back (CompEnable); } +#ifdef MIXBUS32C //Mixbus32C needs to spill the filter controls into the comp section + if (hpfc) { available.push_back (hpfc); params.push_back (EQHPF); } + if (lpfc) { available.push_back (lpfc); params.push_back (EQLPF); } + if (fec) { available.push_back (fec); params.push_back (EQFilterEnable); } +#endif + if (pos >= available.size()) { /* this knob is not needed to control the available parameters */ _vpot->set_control (boost::shared_ptr()); @@ -1585,9 +1612,24 @@ Strip::setup_dyn_vpot (boost::shared_ptr r) case CompRedux: pot_id = "Redux"; break; +#ifdef MIXBUS32C + case CompEnable: + pot_id = "CompIn"; + break; + case EQHPF: + pot_id = "HPF"; + break; + case EQLPF: + pot_id = "LPF"; + break; + case EQFilterEnable: + pot_id = "FiltIn"; + break; +#else case CompEnable: pot_id = "on/off"; break; +#endif default: break; } @@ -1651,6 +1693,16 @@ Strip::setup_eq_vpot (boost::shared_ptr r) band_name = r->eq_band_name (eq_band); switch (parameter) { +#ifdef MIXBUS32C //in 32C, we swap the order of freq/gain to match the GUI + case 0: + pc = r->eq_freq_controllable (eq_band); + param = EQFrequency; + break; + case 1: + pc = r->eq_gain_controllable (eq_band); + param = EQGain; + break; +#else case 0: pc = r->eq_gain_controllable (eq_band); param = EQGain; @@ -1659,6 +1711,7 @@ Strip::setup_eq_vpot (boost::shared_ptr r) pc = r->eq_freq_controllable (eq_band); param = EQFrequency; break; +#endif case 2: pc = r->eq_q_controllable (eq_band); param = EQQ; @@ -1677,6 +1730,7 @@ Strip::setup_eq_vpot (boost::shared_ptr r) uint32_t parameter = global_pos - total_band_parameters; switch (parameter) { +#ifndef MIXBUS32C case 0: /* first control after band parameters */ pc = r->eq_hpf_controllable(); param = EQHPF; @@ -1685,6 +1739,7 @@ Strip::setup_eq_vpot (boost::shared_ptr r) pc = r->eq_enable_controllable(); param = EQEnable; break; +#endif default: /* nothing to control */ _vpot->set_control (boost::shared_ptr()); @@ -1716,12 +1771,14 @@ Strip::setup_eq_vpot (boost::shared_ptr r) case EQShape: pot_id = band_name + " Shp"; break; - case EQHPF: - pot_id = "HPFreq"; - break; case EQEnable: pot_id = "on/off"; break; +#ifndef MIXBUS32C + case EQHPF: + pot_id = "HPFreq"; + break; +#endif default: break; }