diff options
author | Carl Hetherington <carl@carlh.net> | 2009-08-22 10:21:39 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2009-08-22 10:21:39 +0000 |
commit | 970a3a7292287098ab36203d967ea1b1d0ca6117 (patch) | |
tree | ace4afdc4ea8505bdb210d603e6d19c102a9514f | |
parent | 4f3bddf7ef163c3106ba973123cbc657ebaf4b74 (diff) |
Introduce an accurate version of coefficient_to_dB and use it in non speed-critical
code. Fixes mantis 2833.
git-svn-id: svn://localhost/ardour2/branches/3.0@5565 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r-- | gtk2_ardour/automation_line.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/canvas-waveview.c | 8 | ||||
-rw-r--r-- | gtk2_ardour/editor_ops.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/gain_meter.cc | 6 | ||||
-rw-r--r-- | gtk2_ardour/rc_option_editor.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/route_ui.cc | 8 | ||||
-rw-r--r-- | libs/ardour/ardour/dB.h | 6 | ||||
-rw-r--r-- | libs/ardour/meter.cc | 2 |
8 files changed, 19 insertions, 17 deletions
diff --git a/gtk2_ardour/automation_line.cc b/gtk2_ardour/automation_line.cc index c404da9ac7..553c23c88e 100644 --- a/gtk2_ardour/automation_line.cc +++ b/gtk2_ardour/automation_line.cc @@ -668,7 +668,7 @@ AutomationLine::fraction_to_string (double fraction) const if (fraction == 0.0) { snprintf (buf, sizeof (buf), "-inf"); } else { - snprintf (buf, sizeof (buf), "%.1f", coefficient_to_dB (slider_position_to_gain (fraction))); + snprintf (buf, sizeof (buf), "%.1f", accurate_coefficient_to_dB (slider_position_to_gain (fraction))); } } else { double dummy = 0.0; diff --git a/gtk2_ardour/canvas-waveview.c b/gtk2_ardour/canvas-waveview.c index aab781081d..e41fe5944f 100644 --- a/gtk2_ardour/canvas-waveview.c +++ b/gtk2_ardour/canvas-waveview.c @@ -646,15 +646,15 @@ gnome_canvas_waveview_ensure_cache (GnomeCanvasWaveView *waveview, gulong start_ for (n = 0; n < cache->data_size; ++n) { if (buf[n].max > 0.0f) { - buf[n].max = alt_log_meter(coefficient_to_dB(buf[n].max)); + buf[n].max = alt_log_meter(fast_coefficient_to_dB(buf[n].max)); } else if (buf[n].max < 0.0f) { - buf[n].max = -alt_log_meter(coefficient_to_dB(-buf[n].max)); + buf[n].max = -alt_log_meter(fast_coefficient_to_dB(-buf[n].max)); } if (buf[n].min > 0.0f) { - buf[n].min = alt_log_meter(coefficient_to_dB(buf[n].min)); + buf[n].min = alt_log_meter(fast_coefficient_to_dB(buf[n].min)); } else if (buf[n].min < 0.0f) { - buf[n].min = -alt_log_meter(coefficient_to_dB(-buf[n].min)); + buf[n].min = -alt_log_meter(fast_coefficient_to_dB(-buf[n].min)); } } } diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index b9a1ffdd7e..f6d9bd7950 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -4730,8 +4730,6 @@ Editor::adjust_region_scale_amplitude (bool up) } fraction = slider_position_to_gain (fraction); - fraction = coefficient_to_dB (fraction); - fraction = dB_to_coefficient (fraction); if (up && fraction >= 2.0) { continue; diff --git a/gtk2_ardour/gain_meter.cc b/gtk2_ardour/gain_meter.cc index 40d68f551d..425929c9d2 100644 --- a/gtk2_ardour/gain_meter.cc +++ b/gtk2_ardour/gain_meter.cc @@ -375,17 +375,17 @@ GainMeterBase::show_gain () char buf[32]; float v = gain_adjustment.get_value(); - + if (!_is_midi) { if (v == 0.0) { strcpy (buf, _("-inf")); } else { - snprintf (buf, sizeof (buf), "%.1f", coefficient_to_dB (slider_position_to_gain (v))); + snprintf (buf, sizeof (buf), "%.1f", accurate_coefficient_to_dB (slider_position_to_gain (v))); } } else { snprintf (buf, sizeof (buf), "%.1f", v); } - + gain_display.set_text (buf); } diff --git a/gtk2_ardour/rc_option_editor.cc b/gtk2_ardour/rc_option_editor.cc index 9ed1a8f982..662387ef1c 100644 --- a/gtk2_ardour/rc_option_editor.cc +++ b/gtk2_ardour/rc_option_editor.cc @@ -803,7 +803,7 @@ public: if (val == 0.0) { snprintf (buf, sizeof (buf), "-inf"); } else { - snprintf (buf, sizeof (buf), "%.2f", coefficient_to_dB (val)); + snprintf (buf, sizeof (buf), "%.2f", accurate_coefficient_to_dB (val)); } _db_display.set_text (buf); diff --git a/gtk2_ardour/route_ui.cc b/gtk2_ardour/route_ui.cc index f0f9827b73..ad63daad5d 100644 --- a/gtk2_ardour/route_ui.cc +++ b/gtk2_ardour/route_ui.cc @@ -1428,23 +1428,23 @@ RouteUI::parameter_changed (string const & p) void RouteUI::step_gain_up () { - _route->set_gain (dB_to_coefficient (coefficient_to_dB (_route->gain_control()->get_value()) + 0.1), this); + _route->set_gain (dB_to_coefficient (accurate_coefficient_to_dB (_route->gain_control()->get_value()) + 0.1), this); } void RouteUI::page_gain_up () { - _route->set_gain (dB_to_coefficient (coefficient_to_dB (_route->gain_control()->get_value()) + 0.5), this); + _route->set_gain (dB_to_coefficient (accurate_coefficient_to_dB (_route->gain_control()->get_value()) + 0.5), this); } void RouteUI::step_gain_down () { - _route->set_gain (dB_to_coefficient (coefficient_to_dB (_route->gain_control()->get_value()) - 0.1), this); + _route->set_gain (dB_to_coefficient (accurate_coefficient_to_dB (_route->gain_control()->get_value()) - 0.1), this); } void RouteUI::page_gain_down () { - _route->set_gain (dB_to_coefficient (coefficient_to_dB (_route->gain_control()->get_value()) - 0.5), this); + _route->set_gain (dB_to_coefficient (accurate_coefficient_to_dB (_route->gain_control()->get_value()) - 0.5), this); } diff --git a/libs/ardour/ardour/dB.h b/libs/ardour/ardour/dB.h index 6ee6279b12..1b5bb03d1f 100644 --- a/libs/ardour/ardour/dB.h +++ b/libs/ardour/ardour/dB.h @@ -26,8 +26,12 @@ static inline float dB_to_coefficient (float dB) { return dB > -318.8f ? pow (10.0f, dB * 0.05f) : 0.0f; } -static inline float coefficient_to_dB (float coeff) { +static inline float fast_coefficient_to_dB (float coeff) { return 20.0f * fast_log10 (coeff); } +static inline float accurate_coefficient_to_dB (float coeff) { + return 20.0f * log10 (coeff); +} + #endif /* __ardour_dB_h__ */ diff --git a/libs/ardour/meter.cc b/libs/ardour/meter.cc index c8546c8ffa..76d2be262c 100644 --- a/libs/ardour/meter.cc +++ b/libs/ardour/meter.cc @@ -197,7 +197,7 @@ PeakMeter::meter () /* compute new visible value using falloff */ if (new_peak > 0.0) { - new_peak = coefficient_to_dB (new_peak); + new_peak = fast_coefficient_to_dB (new_peak); } else { new_peak = minus_infinity(); } |