Somewhat working gain automation.
This probably isn't correct in several ways, but it works more than it did, so I figure it's push worthy. Still not working: * Saving mute automation list * Dragged control points are not snapped to model restrictions (boolean, in this case, but general problem) * Line goes funny if you record mute automation (as opposed to drawing it which works)
This commit is contained in:
parent
f190e630ab
commit
ed1bbefd19
@ -1187,7 +1187,7 @@ AutomationLine::view_to_model_coord_y (double& y) const
|
||||
}
|
||||
|
||||
void
|
||||
AutomationLine::model_to_view_coord (double& x, double& y) const
|
||||
AutomationLine::model_to_view_coord_y (double& y) const
|
||||
{
|
||||
/* TODO: This should be more generic (use ParameterDescriptor) */
|
||||
if (alist->parameter().type() == GainAutomation ||
|
||||
@ -1201,7 +1201,12 @@ AutomationLine::model_to_view_coord (double& x, double& y) const
|
||||
} else {
|
||||
y = (y - alist->get_min_y()) / (double)(alist->get_max_y() - alist->get_min_y());
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
AutomationLine::model_to_view_coord (double& x, double& y) const
|
||||
{
|
||||
model_to_view_coord_y (y);
|
||||
x = _time_converter->to (x) - _offset;
|
||||
}
|
||||
|
||||
|
@ -122,6 +122,7 @@ public:
|
||||
void view_to_model_coord (double& x, double& y) const;
|
||||
void view_to_model_coord_y (double &) const;
|
||||
void model_to_view_coord (double& x, double& y) const;
|
||||
void model_to_view_coord_y (double &) const;
|
||||
|
||||
void set_list(boost::shared_ptr<ARDOUR::AutomationList> list);
|
||||
boost::shared_ptr<ARDOUR::AutomationList> the_list() const { return alist; }
|
||||
|
@ -350,6 +350,16 @@ AudioTrack::roll (pframes_t nframes, framepos_t start_frame, framepos_t end_fram
|
||||
return dret;
|
||||
}
|
||||
|
||||
if (_mute_control->list() && _mute_control->automation_playback()) {
|
||||
bool valid = false;
|
||||
const float mute = _mute_control->list()->rt_safe_eval(transport_frame, valid);
|
||||
if (mute >= 0.5 && !muted()) {
|
||||
_mute_control->set_value(1.0); // mute
|
||||
} else if (mute < 0.5 && muted()) {
|
||||
_mute_control->set_value(0.0); // unmute
|
||||
}
|
||||
}
|
||||
|
||||
_silent = false;
|
||||
_amp->apply_gain_automation(false);
|
||||
|
||||
|
@ -3392,6 +3392,7 @@ Route::SoloControllable::SoloControllable (std::string name, boost::shared_ptr<R
|
||||
, _route (r)
|
||||
{
|
||||
boost::shared_ptr<AutomationList> gl(new AutomationList(Evoral::Parameter(SoloAutomation)));
|
||||
gl->set_interpolation(Evoral::ControlList::Discrete);
|
||||
set_list (gl);
|
||||
}
|
||||
|
||||
@ -3440,6 +3441,7 @@ Route::MuteControllable::MuteControllable (std::string name, boost::shared_ptr<R
|
||||
, _route (r)
|
||||
{
|
||||
boost::shared_ptr<AutomationList> gl(new AutomationList(Evoral::Parameter(MuteAutomation)));
|
||||
gl->set_interpolation(Evoral::ControlList::Discrete);
|
||||
set_list (gl);
|
||||
}
|
||||
|
||||
@ -3448,15 +3450,22 @@ Route::MuteControllable::set_value (double val)
|
||||
{
|
||||
bool bval = ((val >= 0.5f) ? true: false);
|
||||
|
||||
boost::shared_ptr<RouteList> rl (new RouteList);
|
||||
// boost::shared_ptr<RouteList> rl (new RouteList);
|
||||
|
||||
boost::shared_ptr<Route> r = _route.lock ();
|
||||
if (!r) {
|
||||
return;
|
||||
}
|
||||
|
||||
rl->push_back (r);
|
||||
_session.set_mute (rl, bval);
|
||||
/* I don't know why this apparently "should" be done via the RT event
|
||||
system, but doing so causes a ton of annoying errors... */
|
||||
// rl->push_back (r);
|
||||
// _session.set_mute (rl, bval);
|
||||
|
||||
/* ... but this seems to work. */
|
||||
r->set_mute (bval, this);
|
||||
|
||||
AutomationControl::set_value(bval);
|
||||
}
|
||||
|
||||
double
|
||||
|
Loading…
Reference in New Issue
Block a user