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:
David Robillard 2014-11-29 01:25:27 -05:00
parent f190e630ab
commit ed1bbefd19
4 changed files with 29 additions and 4 deletions

View File

@ -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;
}

View File

@ -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; }

View File

@ -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);

View File

@ -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