13
0

change VolumeController::adjust() to do discrete dB increments+decrements

git-svn-id: svn://localhost/ardour2/branches/3.0@9750 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis 2011-06-20 13:58:33 +00:00
parent 12c844dd8d
commit b272332933
2 changed files with 29 additions and 10 deletions

View File

@ -70,7 +70,7 @@ MonitorSection::MonitorSection (Session* s)
/* Dim */
dim_control = new VolumeController (little_knob_pixbuf, boost::shared_ptr<Controllable>(), 0.0, 0.1, 1.0, true, 30, 30, true);
dim_control = new VolumeController (little_knob_pixbuf, boost::shared_ptr<Controllable>(), 0.0, 0.01, 0.1, true, 30, 30, true);
HBox* dim_packer = manage (new HBox);
dim_packer->show ();
@ -134,7 +134,7 @@ MonitorSection::MonitorSection (Session* s)
/* Solo Boost */
solo_boost_control = new VolumeController (little_knob_pixbuf, boost::shared_ptr<Controllable>(), 0.0, 0.1, 1.0, true, 30, 30, true);
solo_boost_control = new VolumeController (little_knob_pixbuf, boost::shared_ptr<Controllable>(), 0.0, 0.01, 0.1, true, 30, 30, true);
HBox* solo_packer = manage (new HBox);
solo_packer->set_spacing (12);
@ -151,7 +151,7 @@ MonitorSection::MonitorSection (Session* s)
/* Solo (SiP) cut */
solo_cut_control = new VolumeController (little_knob_pixbuf, boost::shared_ptr<Controllable>(), 0.0, 0.1, 1.0, true, 30, 30, true);
solo_cut_control = new VolumeController (little_knob_pixbuf, boost::shared_ptr<Controllable>(), 0.0, 0.01, 0.1, true, 30, 30, true);
spin_label = manage (new Label (_("SiP Cut")));
spin_packer = manage (new VBox);
@ -234,7 +234,7 @@ MonitorSection::MonitorSection (Session* s)
/* Gain */
gain_control = new VolumeController (big_knob_pixbuf, boost::shared_ptr<Controllable>(), 1.0, 0.1, 1.0, true, 80, 80, false);
gain_control = new VolumeController (big_knob_pixbuf, boost::shared_ptr<Controllable>(), 1.0, 0.01, 0.1, true, 80, 80, false);
spin_label = manage (new Label (_("Monitor")));
spin_packer = manage (new VBox);

View File

@ -133,11 +133,11 @@ VolumeController::to_display_value (double control_value)
{
double v;
// if (_linear) {
if (_linear) {
v = (control_value - _controllable->lower ()) / (_controllable->upper() - _controllable->lower());
// } else {
// v = gain_to_slider_position_with_max (control_value, ARDOUR::Config->get_max_gain());
// }
} else {
v = gain_to_slider_position_with_max (control_value, ARDOUR::Config->get_max_gain());
}
return v;
}
@ -145,6 +145,25 @@ VolumeController::to_display_value (double control_value)
double
VolumeController::adjust (double control_delta)
{
return std::max (_controllable->lower(), std::min (_controllable->upper(), _controllable->get_value() + control_delta));
}
double v = _controllable->get_value ();
double abs_delta = fabs (control_delta);
/* convert to linear/fractional slider position domain */
v = gain_to_slider_position_with_max (v, ARDOUR::Config->get_max_gain());
/* adjust in this domain */
v += control_delta;
/* convert back to gain coefficient domain */
v = slider_position_to_gain_with_max (v, ARDOUR::Config->get_max_gain());
/* now round to some precision in the dB domain */
v = accurate_coefficient_to_dB (v);
if (abs_delta <= 0.01) {
v -= fmod (v, 0.05);
} else {
v -= fmod (v, 0.1);
}
/* and return it */
return dB_to_coefficient (v);
}