diff options
Diffstat (limited to 'libs/ardour')
-rw-r--r-- | libs/ardour/amp.cc | 6 | ||||
-rw-r--r-- | libs/ardour/ardour/amp.h | 2 | ||||
-rw-r--r-- | libs/ardour/ardour/automation_control.h | 8 | ||||
-rw-r--r-- | libs/ardour/ardour/midi_track.h | 2 | ||||
-rw-r--r-- | libs/ardour/ardour/monitor_processor.h | 2 | ||||
-rw-r--r-- | libs/ardour/ardour/pan_controllable.h | 6 | ||||
-rw-r--r-- | libs/ardour/ardour/plugin_insert.h | 5 | ||||
-rw-r--r-- | libs/ardour/ardour/proxy_controllable.h | 6 | ||||
-rw-r--r-- | libs/ardour/ardour/route.h | 59 | ||||
-rw-r--r-- | libs/ardour/ardour/track.h | 2 | ||||
-rw-r--r-- | libs/ardour/automation_control.cc | 4 | ||||
-rw-r--r-- | libs/ardour/midi_track.cc | 6 | ||||
-rw-r--r-- | libs/ardour/monitor_processor.cc | 2 | ||||
-rw-r--r-- | libs/ardour/pan_controllable.cc | 6 | ||||
-rw-r--r-- | libs/ardour/pannable.cc | 10 | ||||
-rw-r--r-- | libs/ardour/plugin_insert.cc | 12 | ||||
-rw-r--r-- | libs/ardour/route.cc | 129 | ||||
-rw-r--r-- | libs/ardour/session.cc | 6 | ||||
-rw-r--r-- | libs/ardour/track.cc | 2 |
19 files changed, 152 insertions, 123 deletions
diff --git a/libs/ardour/amp.cc b/libs/ardour/amp.cc index 955dd13ccc..924a77e666 100644 --- a/libs/ardour/amp.cc +++ b/libs/ardour/amp.cc @@ -368,7 +368,7 @@ Amp::inc_gain (gain_t factor, void *src) void Amp::set_gain (gain_t val, void *) { - _gain_control->set_value (val); + _gain_control->set_value (val, Controllable::NoGroup); } XMLNode& @@ -396,7 +396,7 @@ Amp::set_state (const XMLNode& node, int version) } void -Amp::GainControl::set_value (double val) +Amp::GainControl::set_value (double val, PBD::Controllable::GroupControlDisposition /* group_override */) { if (writable()) { set_value_unchecked (val); @@ -406,7 +406,7 @@ Amp::GainControl::set_value (double val) void Amp::GainControl::set_value_unchecked (double val) { - AutomationControl::set_value (std::max (std::min (val, (double)_desc.upper), (double)_desc.lower)); + AutomationControl::set_value (std::max (std::min (val, (double)_desc.upper), (double)_desc.lower), Controllable::NoGroup); _amp->session().set_dirty (); } diff --git a/libs/ardour/ardour/amp.h b/libs/ardour/ardour/amp.h index e8445c4853..c92edcc5fc 100644 --- a/libs/ardour/ardour/amp.h +++ b/libs/ardour/ardour/amp.h @@ -92,7 +92,7 @@ public: range_db = accurate_coefficient_to_dB (_desc.upper) - lower_db; } - void set_value (double val); + void set_value (double val, PBD::Controllable::GroupControlDisposition group_override); void set_value_unchecked (double); double internal_to_interface (double) const; diff --git a/libs/ardour/ardour/automation_control.h b/libs/ardour/ardour/automation_control.h index b26d781e2f..0d065686e2 100644 --- a/libs/ardour/ardour/automation_control.h +++ b/libs/ardour/ardour/automation_control.h @@ -85,9 +85,12 @@ public: * Derived classes MUST call ::writable() to verify * that writing to the parameter is legal at that time. */ - void set_value (double); double get_value () const; - + /* inherited from PBD::Controllable. + * Derived classes MUST call ::writable() to verify + * that writing to the parameter is legal at that time. + */ + void set_value (double value, PBD::Controllable::GroupControlDisposition group_override); /* automation related value setting */ virtual bool writable () const; /* Call to ::set_value() with no test for writable() because @@ -110,7 +113,6 @@ public: void commit_transaction (bool did_write); protected: - ARDOUR::Session& _session; const ParameterDescriptor _desc; diff --git a/libs/ardour/ardour/midi_track.h b/libs/ardour/ardour/midi_track.h index 80bb743b10..ba418082f8 100644 --- a/libs/ardour/ardour/midi_track.h +++ b/libs/ardour/ardour/midi_track.h @@ -89,7 +89,7 @@ public: , _route (route) {} - void set_value (double val); + void set_value (double val, PBD::Controllable::GroupControlDisposition group_override); void set_value_unchecked (double); bool writable() const { return true; } diff --git a/libs/ardour/ardour/monitor_processor.h b/libs/ardour/ardour/monitor_processor.h index c7d73dca00..ffee1fbbd2 100644 --- a/libs/ardour/ardour/monitor_processor.h +++ b/libs/ardour/ardour/monitor_processor.h @@ -54,7 +54,7 @@ public: /* Controllable API */ - void set_value (double v) { + void set_value (double v, PBD::Controllable::GroupControlDisposition group_override) { T newval = (T) v; if (newval != _value) { _value = std::max (_lower, std::min (_upper, newval)); diff --git a/libs/ardour/ardour/pan_controllable.h b/libs/ardour/ardour/pan_controllable.h index ff00d8119f..77acbee04f 100644 --- a/libs/ardour/ardour/pan_controllable.h +++ b/libs/ardour/ardour/pan_controllable.h @@ -36,7 +36,7 @@ class Pannable; class LIBARDOUR_API PanControllable : public AutomationControl { -public: + public: PanControllable (Session& s, std::string name, Pannable* o, Evoral::Parameter param) : AutomationControl (s, param, @@ -47,10 +47,10 @@ public: {} double lower () const; - void set_value (double); + void set_value (double, PBD::Controllable::GroupControlDisposition group_override); void set_value_unchecked (double); -private: + private: Pannable* owner; }; diff --git a/libs/ardour/ardour/plugin_insert.h b/libs/ardour/ardour/plugin_insert.h index 0873825c02..6b434bef7f 100644 --- a/libs/ardour/ardour/plugin_insert.h +++ b/libs/ardour/ardour/plugin_insert.h @@ -95,7 +95,7 @@ class LIBARDOUR_API PluginInsert : public Processor const ParameterDescriptor& desc, boost::shared_ptr<AutomationList> list=boost::shared_ptr<AutomationList>()); - void set_value (double val); + void set_value (double val, PBD::Controllable::GroupControlDisposition group_override); void set_value_unchecked (double); double get_value (void) const; void catch_up_with_external_value (double val); @@ -113,8 +113,7 @@ class LIBARDOUR_API PluginInsert : public Processor const ParameterDescriptor& desc, boost::shared_ptr<AutomationList> list=boost::shared_ptr<AutomationList>()); - void set_value (const Variant& val); - void set_value (double val); + void set_value (double val, PBD::Controllable::GroupControlDisposition group_override); void set_value_unchecked (double); double get_value (void) const; XMLNode& get_state(); diff --git a/libs/ardour/ardour/proxy_controllable.h b/libs/ardour/ardour/proxy_controllable.h index b2f230ec87..c60f5f1b74 100644 --- a/libs/ardour/ardour/proxy_controllable.h +++ b/libs/ardour/ardour/proxy_controllable.h @@ -31,7 +31,7 @@ namespace ARDOUR { */ class LIBARDOUR_API ProxyControllable : public PBD::Controllable { -public: + public: ProxyControllable (const std::string& name, PBD::Controllable::Flag flags, boost::function1<bool,double> setter, boost::function0<double> getter) @@ -40,7 +40,7 @@ public: , _getter (getter) {} - void set_value (double v) { if (_setter (v)) { Changed(); /* EMIT SIGNAL */ } } + void set_value (double v, PBD::Controllable::GroupControlDisposition /*group_override*/) { if (_setter (v)) { Changed(); /* EMIT SIGNAL */ } } double get_value () const { return _getter (); } double internal_to_user (double i) const { return accurate_coefficient_to_dB (i);} @@ -51,7 +51,7 @@ public: return std::string(theBuf); } -private: + private: boost::function1<bool,double> _setter; boost::function0<double> _getter; }; diff --git a/libs/ardour/ardour/route.h b/libs/ardour/ardour/route.h index 0ef063b29c..2086f32119 100644 --- a/libs/ardour/ardour/route.h +++ b/libs/ardour/ardour/route.h @@ -383,23 +383,44 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou /* Controls (not all directly owned by the Route */ + class RouteAutomationControl : public AutomationControl { + public: + RouteAutomationControl (const std::string& name, + AutomationType atype, + boost::shared_ptr<AutomationList> alist, + boost::shared_ptr<Route> route); + + void set_value (double val, PBD::Controllable::GroupControlDisposition group_override) { + boost::shared_ptr<Route> r = _route.lock(); + if (r) { + r->set_control (*this, val, group_override); + } + } + + protected: + friend class Route; + + void route_set_value (double val) { + AutomationControl::set_value (val, Controllable::NoGroup); + } + + boost::weak_ptr<Route> _route; + }; + boost::shared_ptr<AutomationControl> get_control (const Evoral::Parameter& param); - class SoloControllable : public AutomationControl { + class SoloControllable : public RouteAutomationControl { public: SoloControllable (std::string name, boost::shared_ptr<Route>); - void set_value (double); + void set_value (double, PBD::Controllable::GroupControlDisposition group_override); void set_value_unchecked (double); double get_value () const; - - private: - boost::weak_ptr<Route> _route; }; - struct MuteControllable : public AutomationControl { + struct MuteControllable : public RouteAutomationControl { public: MuteControllable (std::string name, boost::shared_ptr<Route>); - void set_value (double); + void set_value (double, PBD::Controllable::GroupControlDisposition group_override); void set_value_unchecked (double); double get_value () const; @@ -410,27 +431,18 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou boost::weak_ptr<Route> _route; }; - class LIBARDOUR_API PhaseControllable : public AutomationControl { + class LIBARDOUR_API PhaseControllable : public RouteAutomationControl { public: PhaseControllable (std::string name, boost::shared_ptr<Route>); - void set_value (double); + void set_value (double, PBD::Controllable::GroupControlDisposition group_override); void set_channel (uint32_t); double get_value () const; uint32_t channel() const; - private: - boost::weak_ptr<Route> _route; uint32_t _current_phase; }; - class LIBARDOUR_API GroupGainControllable : public AutomationControl { - public: - GroupGainControllable (std::string name, boost::shared_ptr<Route>); - void set_value (double); - double get_value () const; - private: - boost::weak_ptr<Route> _route; - }; + void set_control (RouteAutomationControl&, double val, PBD::Controllable::GroupControlDisposition group_override); boost::shared_ptr<SoloControllable> solo_control() const { return _solo_control; @@ -448,10 +460,6 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou return _phase_control; } - boost::shared_ptr<GroupGainControllable> group_gain_control() const { - return _group_gain_control; - } - /* Route doesn't own these items, but sub-objects that it does own have them and to make UI code a bit simpler, we provide direct access to them here. @@ -544,7 +552,7 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou bool has_external_redirects() const; /* can only be executed by a route for which is_monitor() is true - (i.e. the monitor out) + (i.e. the monitor out) */ void monitor_run (framepos_t start_frame, framepos_t end_frame, pframes_t nframes, int declick); @@ -635,7 +643,6 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou boost::shared_ptr<MuteControllable> _mute_control; boost::shared_ptr<MuteMaster> _mute_master; boost::shared_ptr<PhaseControllable> _phase_control; - boost::shared_ptr<GroupGainControllable> _group_gain_control; virtual void act_on_mute () {} @@ -679,7 +686,7 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou int set_state_2X (const XMLNode&, int); void set_processor_state_2X (XMLNodeList const &, int); - uint32_t _order_key; + uint32_t _order_key; bool _has_order_key; uint32_t _remote_control_id; diff --git a/libs/ardour/ardour/track.h b/libs/ardour/ardour/track.h index fa7b1f30bb..5bf887f517 100644 --- a/libs/ardour/ardour/track.h +++ b/libs/ardour/ardour/track.h @@ -206,7 +206,7 @@ class LIBARDOUR_API Track : public Route, public PublicDiskstream struct RecEnableControl : public AutomationControl { RecEnableControl (boost::shared_ptr<Track> t); - void set_value (double); + void set_value (double, PBD::Controllable::GroupControlDisposition); void set_value_unchecked (double); double get_value (void) const; diff --git a/libs/ardour/automation_control.cc b/libs/ardour/automation_control.cc index 1f507b7015..583f38807d 100644 --- a/libs/ardour/automation_control.cc +++ b/libs/ardour/automation_control.cc @@ -72,7 +72,7 @@ AutomationControl::get_value() const * @param value `user' value */ void -AutomationControl::set_value (double value) +AutomationControl::set_value (double value, PBD::Controllable::GroupControlDisposition /* group_override */) { bool to_list = _list && ((AutomationList*)_list.get())->automation_write(); @@ -135,7 +135,7 @@ AutomationControl::start_touch(double when) if (alist()->automation_state() == Touch) { /* subtle. aligns the user value with the playback */ - set_value (get_value ()); + set_value (get_value (), Controllable::NoGroup); alist()->start_touch (when); if (!_desc.toggled) { AutomationWatch::instance().add_automation_watch (shared_from_this()); diff --git a/libs/ardour/midi_track.cc b/libs/ardour/midi_track.cc index 03ba42b6af..69d10c44e0 100644 --- a/libs/ardour/midi_track.cc +++ b/libs/ardour/midi_track.cc @@ -543,7 +543,7 @@ MidiTrack::non_realtime_locate (framepos_t pos) (rcontrol = region->control(tcontrol->parameter()))) { const Evoral::Beats pos_beats = bfc.from(pos - origin); if (rcontrol->list()->size() > 0) { - tcontrol->set_value(rcontrol->list()->eval(pos_beats.to_double())); + tcontrol->set_value(rcontrol->list()->eval(pos_beats.to_double()), Controllable::NoGroup); } } } @@ -725,7 +725,7 @@ MidiTrack::set_parameter_automation_state (Evoral::Parameter param, AutoState st } void -MidiTrack::MidiControl::set_value(double val) +MidiTrack::MidiControl::set_value (double val, PBD::Controllable::GroupControlDisposition /* group_override */) { if (writable()) { set_value_unchecked (val); @@ -790,7 +790,7 @@ MidiTrack::MidiControl::set_value_unchecked(double val) _route->write_immediate_event(size, ev); } - AutomationControl::set_value(val); + AutomationControl::set_value(val, Controllable::NoGroup); } void diff --git a/libs/ardour/monitor_processor.cc b/libs/ardour/monitor_processor.cc index 92beed547c..4264ee7793 100644 --- a/libs/ardour/monitor_processor.cc +++ b/libs/ardour/monitor_processor.cc @@ -37,7 +37,7 @@ using namespace std; /* specialize for bool because of set_value() semantics */ namespace ARDOUR { - template<> void MPControl<bool>::set_value (double v) { + template<> void MPControl<bool>::set_value (double v, PBD::Controllable::GroupControlDisposition /*group_override*/) { bool newval = fabs (v) >= 0.5; if (newval != _value) { _value = newval; diff --git a/libs/ardour/pan_controllable.cc b/libs/ardour/pan_controllable.cc index 71c8a9f62f..faf04cc8d7 100644 --- a/libs/ardour/pan_controllable.cc +++ b/libs/ardour/pan_controllable.cc @@ -35,7 +35,7 @@ PanControllable::lower () const } void -PanControllable::set_value (double v) +PanControllable::set_value (double v, PBD::Controllable::GroupControlDisposition /* group_override */) { if (writable()) { set_value_unchecked (v); @@ -49,7 +49,7 @@ PanControllable::set_value_unchecked (double v) if (!p) { /* no panner: just do it */ - AutomationControl::set_value (v); + AutomationControl::set_value (v, Controllable::NoGroup); return; } @@ -70,7 +70,7 @@ PanControllable::set_value_unchecked (double v) } if (can_set) { - AutomationControl::set_value (v); + AutomationControl::set_value (v, Controllable::NoGroup); } } diff --git a/libs/ardour/pannable.cc b/libs/ardour/pannable.cc index 247397d415..f589024435 100644 --- a/libs/ardour/pannable.cc +++ b/libs/ardour/pannable.cc @@ -242,27 +242,27 @@ Pannable::set_state (const XMLNode& root, int version) if ((*niter)->name() == X_("azimuth")) { prop = (*niter)->property (X_("value")); if (prop) { - pan_azimuth_control->set_value (atof (prop->value())); + pan_azimuth_control->set_value (atof (prop->value()), Controllable::NoGroup); } } else if ((*niter)->name() == X_("width")) { prop = (*niter)->property (X_("value")); if (prop) { - pan_width_control->set_value (atof (prop->value())); + pan_width_control->set_value (atof (prop->value()), Controllable::NoGroup); } } else if ((*niter)->name() == X_("elevation")) { prop = (*niter)->property (X_("value")); if (prop) { - pan_elevation_control->set_value (atof (prop->value())); + pan_elevation_control->set_value (atof (prop->value()), Controllable::NoGroup); } } else if ((*niter)->name() == X_("frontback")) { prop = (*niter)->property (X_("value")); if (prop) { - pan_frontback_control->set_value (atof (prop->value())); + pan_frontback_control->set_value (atof (prop->value()), Controllable::NoGroup); } } else if ((*niter)->name() == X_("lfe")) { prop = (*niter)->property (X_("value")); if (prop) { - pan_lfe_control->set_value (atof (prop->value())); + pan_lfe_control->set_value (atof (prop->value()), Controllable::NoGroup); } } } diff --git a/libs/ardour/plugin_insert.cc b/libs/ardour/plugin_insert.cc index 827e6d19f4..77a223880e 100644 --- a/libs/ardour/plugin_insert.cc +++ b/libs/ardour/plugin_insert.cc @@ -660,7 +660,7 @@ PluginInsert::reset_parameters_to_default () continue; } - ac->set_value (dflt); + ac->set_value (dflt, Controllable::NoGroup); } return all; } @@ -1337,7 +1337,7 @@ PluginInsert::PluginControl::PluginControl (PluginInsert* p, /** @param val `user' value */ void -PluginInsert::PluginControl::set_value (double user_val) +PluginInsert::PluginControl::set_value (double user_val, PBD::Controllable::GroupControlDisposition /* group_override */) { if (writable()) { set_value_unchecked (user_val); @@ -1358,13 +1358,13 @@ PluginInsert::PluginControl::set_value_unchecked (double user_val) iasp->set_parameter (_list->parameter().id(), user_val); } - AutomationControl::set_value (user_val); + AutomationControl::set_value (user_val, Controllable::NoGroup); } void PluginInsert::PluginControl::catch_up_with_external_value (double user_val) { - AutomationControl::set_value (user_val); + AutomationControl::set_value (user_val, Controllable::NoGroup); } XMLNode& @@ -1410,7 +1410,7 @@ PluginInsert::PluginPropertyControl::PluginPropertyControl (PluginInsert* } void -PluginInsert::PluginPropertyControl::set_value (double user_val) +PluginInsert::PluginPropertyControl::set_value (double user_val, PBD::Controllable::GroupControlDisposition /* group_override*/) { if (writable()) { set_value_unchecked (user_val); @@ -1434,7 +1434,7 @@ PluginInsert::PluginPropertyControl::set_value_unchecked (double user_val) } _value = value; - AutomationControl::set_value(user_val); + AutomationControl::set_value (user_val, Controllable::NoGroup); } XMLNode& diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc index fef1ea14a3..5abe96b263 100644 --- a/libs/ardour/route.cc +++ b/libs/ardour/route.cc @@ -178,11 +178,6 @@ Route::init () _amp->set_display_name ("Monitor"); } - // amp should exist before amp controls - _group_gain_control.reset (new GroupGainControllable (X_("groupgain"), shared_from_this ())); - _group_gain_control->set_flags (Controllable::Flag (_group_gain_control->flags() | Controllable::GainLike)); - add_control (_group_gain_control); - /* and input trim */ _trim.reset (new Amp (_session, "trim")); _trim->set_display_to_user (false); @@ -2804,7 +2799,7 @@ Route::set_state_2X (const XMLNode& node, int version) gain_t val; if (sscanf (prop->value().c_str(), "%f", &val) == 1) { - _amp->gain_control()->set_value (val); + _amp->gain_control()->set_value (val, Controllable::NoGroup); } } @@ -3885,20 +3880,84 @@ Route::set_latency_compensation (framecnt_t longest_session_latency) } } -Route::SoloControllable::SoloControllable (std::string name, boost::shared_ptr<Route> r) - : AutomationControl (r->session(), - Evoral::Parameter (SoloAutomation), - ParameterDescriptor(Evoral::Parameter (SoloAutomation)), - boost::shared_ptr<AutomationList>(), name) +void +Route::set_control (RouteAutomationControl& control, double val, PBD::Controllable::GroupControlDisposition /*group_override*/) +{ + boost::shared_ptr<RouteList> rl; + + switch (control.parameter().type()) { + case GainAutomation: + /* route must mediate group control */ + set_gain (val, this); /* any "src" argument will do other than our route group */ + return; + break; + + case RecEnableAutomation: + /* session must mediate group control */ + rl.reset (new RouteList); + rl->push_back (shared_from_this()); + _session.set_record_enabled (rl, val >= 0.5 ? true : false); + return; + break; + + case SoloAutomation: + /* session must mediate group control */ + rl.reset (new RouteList); + rl->push_back (shared_from_this()); + if (Config->get_solo_control_is_listen_control()) { + _session.set_listen (rl, val >= 0.5 ? true : false); + } else { + _session.set_solo (rl, val >= 0.5 ? true : false); + } + + return; + break; + + case MuteAutomation: + /* session must mediate group control */ + rl.reset (new RouteList); + rl->push_back (shared_from_this()); + _session.set_mute (rl, !muted()); + return; + break; + + case PanAzimuthAutomation: + case PanElevationAutomation: + case PanWidthAutomation: + case PanFrontBackAutomation: + case PanLFEAutomation: + break; + + default: + /* Not a route automation control */ + return; + } + + control.route_set_value (val); +} + + +Route::RouteAutomationControl::RouteAutomationControl (const std::string& name, + AutomationType atype, + boost::shared_ptr<AutomationList> alist, + boost::shared_ptr<Route> r) + : AutomationControl (r->session(), Evoral::Parameter (atype), + ParameterDescriptor (Evoral::Parameter (atype)), + alist, name) , _route (r) { +} + +Route::SoloControllable::SoloControllable (std::string name, boost::shared_ptr<Route> r) + : RouteAutomationControl (name, SoloAutomation, boost::shared_ptr<AutomationList>(), r) +{ boost::shared_ptr<AutomationList> gl(new AutomationList(Evoral::Parameter(SoloAutomation))); gl->set_interpolation(Evoral::ControlList::Discrete); set_list (gl); } void -Route::SoloControllable::set_value (double val) +Route::SoloControllable::set_value (double val, PBD::Controllable::GroupControlDisposition /* group_override */) { if (writable()) { set_value_unchecked (val); @@ -3942,11 +4001,7 @@ Route::SoloControllable::get_value () const } Route::MuteControllable::MuteControllable (std::string name, boost::shared_ptr<Route> r) - : AutomationControl (r->session(), - Evoral::Parameter (MuteAutomation), - ParameterDescriptor (Evoral::Parameter (MuteAutomation)), - boost::shared_ptr<AutomationList>(), - name) + : RouteAutomationControl (name, MuteAutomation, boost::shared_ptr<AutomationList>(), r) , _route (r) { boost::shared_ptr<AutomationList> gl(new AutomationList(Evoral::Parameter(MuteAutomation))); @@ -3979,7 +4034,7 @@ Route::MuteControllable::set_superficial_value(bool muted) } void -Route::MuteControllable::set_value (double val) +Route::MuteControllable::set_value (double val, PBD::Controllable::GroupControlDisposition /* group_override */) { if (writable()) { set_value_unchecked (val); @@ -4022,42 +4077,8 @@ Route::MuteControllable::get_value () const return (r && r->muted()) ? GAIN_COEFF_UNITY : GAIN_COEFF_ZERO; } -Route::GroupGainControllable::GroupGainControllable (std::string name, boost::shared_ptr<Route> r) - : AutomationControl (r->session(), - Evoral::Parameter (GainAutomation), - ParameterDescriptor (Evoral::Parameter (GainAutomation)), - boost::shared_ptr<AutomationList>(), - name) - , _route (r) -{ - boost::shared_ptr<AutomationList> gl(new AutomationList(Evoral::Parameter(GainAutomation))); - gl->set_interpolation(Evoral::ControlList::Discrete); - set_list (gl); -} - -void -Route::GroupGainControllable::set_value (double val) -{ - boost::shared_ptr<Route> r = _route.lock (); - // I am not sure why I need the * .5 to make this work - float normalized_position = r->gain_control()->interface_to_internal (val * 0.5); - r->set_gain ((gain_t)normalized_position, this); -} - -double -Route::GroupGainControllable::get_value () const -{ - boost::shared_ptr<Route> r = _route.lock (); - return 2.0 * r->gain_control()->internal_to_interface (r->gain_control()->get_value ()); -} - Route::PhaseControllable::PhaseControllable (std::string name, boost::shared_ptr<Route> r) - : AutomationControl (r->session(), - Evoral::Parameter (PhaseAutomation), - ParameterDescriptor (Evoral::Parameter (PhaseAutomation)), - boost::shared_ptr<AutomationList>(), - name) - , _route (r) + : RouteAutomationControl (name, PhaseAutomation, boost::shared_ptr<AutomationList>(), r) { boost::shared_ptr<AutomationList> gl(new AutomationList(Evoral::Parameter(PhaseAutomation))); gl->set_interpolation(Evoral::ControlList::Discrete); @@ -4065,7 +4086,7 @@ Route::PhaseControllable::PhaseControllable (std::string name, boost::shared_ptr } void -Route::PhaseControllable::set_value (double v) +Route::PhaseControllable::set_value (double v, PBD::Controllable::GroupControlDisposition /* group_override */) { boost::shared_ptr<Route> r = _route.lock (); if (r->phase_invert().size()) { diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index 1c7410002d..2e93d5d167 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -3335,7 +3335,7 @@ Session::globally_set_send_gains_to_zero (boost::shared_ptr<Route> dest) for (RouteList::iterator i = r->begin(); i != r->end(); ++i) { if ((s = (*i)->internal_send_for (dest)) != 0) { - s->amp()->gain_control()->set_value (GAIN_COEFF_ZERO); + s->amp()->gain_control()->set_value (GAIN_COEFF_ZERO, Controllable::NoGroup); } } } @@ -3348,7 +3348,7 @@ Session::globally_set_send_gains_to_unity (boost::shared_ptr<Route> dest) for (RouteList::iterator i = r->begin(); i != r->end(); ++i) { if ((s = (*i)->internal_send_for (dest)) != 0) { - s->amp()->gain_control()->set_value (GAIN_COEFF_UNITY); + s->amp()->gain_control()->set_value (GAIN_COEFF_UNITY, Controllable::NoGroup); } } } @@ -3361,7 +3361,7 @@ Session::globally_set_send_gains_from_track(boost::shared_ptr<Route> dest) for (RouteList::iterator i = r->begin(); i != r->end(); ++i) { if ((s = (*i)->internal_send_for (dest)) != 0) { - s->amp()->gain_control()->set_value ((*i)->gain_control()->get_value()); + s->amp()->gain_control()->set_value ((*i)->gain_control()->get_value(), Controllable::NoGroup); } } } diff --git a/libs/ardour/track.cc b/libs/ardour/track.cc index c4c82808bd..21256b09ce 100644 --- a/libs/ardour/track.cc +++ b/libs/ardour/track.cc @@ -190,7 +190,7 @@ Track::RecEnableControl::RecEnableControl (boost::shared_ptr<Track> t) } void -Track::RecEnableControl::set_value (double val) +Track::RecEnableControl::set_value (double val, Controllable::GroupControlDisposition /* group_override */) { if (writable()) { set_value_unchecked (val); |