summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2009-08-22 10:21:39 +0000
committerCarl Hetherington <carl@carlh.net>2009-08-22 10:21:39 +0000
commit970a3a7292287098ab36203d967ea1b1d0ca6117 (patch)
treeace4afdc4ea8505bdb210d603e6d19c102a9514f
parent4f3bddf7ef163c3106ba973123cbc657ebaf4b74 (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.cc2
-rw-r--r--gtk2_ardour/canvas-waveview.c8
-rw-r--r--gtk2_ardour/editor_ops.cc2
-rw-r--r--gtk2_ardour/gain_meter.cc6
-rw-r--r--gtk2_ardour/rc_option_editor.cc2
-rw-r--r--gtk2_ardour/route_ui.cc8
-rw-r--r--libs/ardour/ardour/dB.h6
-rw-r--r--libs/ardour/meter.cc2
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();
}