summaryrefslogtreecommitdiff
path: root/libs/ardour/meter.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2013-07-23 14:23:20 +0200
committerRobin Gareus <robin@gareus.org>2013-07-23 19:13:45 +0200
commitc4c70c347d2e264fb33e1965bc1c1ccc16bc2830 (patch)
treecf7439f12f8e95ad64e52a7d13fb86e27e48847c /libs/ardour/meter.cc
parent8e376f7a2a2cd490860bd1c233b7e688ac9ffba3 (diff)
use fixed fall-off time for k-meter
Diffstat (limited to 'libs/ardour/meter.cc')
-rw-r--r--libs/ardour/meter.cc15
1 files changed, 10 insertions, 5 deletions
diff --git a/libs/ardour/meter.cc b/libs/ardour/meter.cc
index 32c7439fd5..cc014caf63 100644
--- a/libs/ardour/meter.cc
+++ b/libs/ardour/meter.cc
@@ -273,6 +273,11 @@ PeakMeter::meter ()
const size_t limit = min (_peak_signal.size(), (size_t) current_meters.n_total ());
const size_t n_midi = min (_peak_signal.size(), (size_t) current_meters.n_midi());
+ /* 0.01f ^= 100 Hz update rate */
+ const float midi_meter_falloff = Config->get_meter_falloff() * 0.01f;
+ /* kmeters: 24dB / 2 sec */
+ const float audio_meter_falloff = (_meter_type & (MeterK20 | MeterK14)) ? 0.12f : midi_meter_falloff;
+
for (size_t n = 0; n < limit; ++n) {
/* grab peak since last read */
@@ -283,11 +288,11 @@ PeakMeter::meter ()
if (n < n_midi) {
_max_peak_power[n] = -INFINITY; // std::max (new_peak, _max_peak_power[n]); // XXX
_max_peak_signal[n] = 0;
- if (Config->get_meter_falloff() == 0.0f || new_peak > _visible_peak_power[n]) {
+ if (midi_meter_falloff == 0.0f || new_peak > _visible_peak_power[n]) {
;
} else {
- /* empirical WRT to falloff times , 0.01f ^= 100 Hz update rate */
- new_peak = _visible_peak_power[n] - sqrt(_visible_peak_power[n] * Config->get_meter_falloff() * 0.01f * 0.0002f);
+ /* empirical algorithm WRT to audio falloff times */
+ new_peak = _visible_peak_power[n] - sqrt(_visible_peak_power[n] * midi_meter_falloff * 0.0002f);
if (new_peak < (1.0 / 512.0)) new_peak = 0;
}
_visible_peak_power[n] = new_peak;
@@ -310,11 +315,11 @@ PeakMeter::meter ()
_max_peak_power[n] = std::max (new_peak, _max_peak_power[n]);
- if (Config->get_meter_falloff() == 0.0f || new_peak > _visible_peak_power[n]) {
+ if (audio_meter_falloff == 0.0f || new_peak > _visible_peak_power[n]) {
_visible_peak_power[n] = new_peak;
} else {
// do falloff
- new_peak = _visible_peak_power[n] - (Config->get_meter_falloff() * 0.01f);
+ new_peak = _visible_peak_power[n] - (audio_meter_falloff);
_visible_peak_power[n] = std::max (new_peak, -INFINITY);
}
}