summaryrefslogtreecommitdiff
path: root/libs/ardour/meter.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2013-07-05 00:43:31 +0200
committerRobin Gareus <robin@gareus.org>2013-07-10 15:27:08 +0200
commit42ee64e950b02aaf98613fe520643f33ff9414fd (patch)
tree49572481ffaf14733fd2fdcadd18f09c095d108e /libs/ardour/meter.cc
parent4a3695d2de2fde7ec793587ae77d209f437b83ab (diff)
midi meter updates..
Diffstat (limited to 'libs/ardour/meter.cc')
-rw-r--r--libs/ardour/meter.cc21
1 files changed, 20 insertions, 1 deletions
diff --git a/libs/ardour/meter.cc b/libs/ardour/meter.cc
index 4d096aae89..80257f37b5 100644
--- a/libs/ardour/meter.cc
+++ b/libs/ardour/meter.cc
@@ -68,7 +68,7 @@ PeakMeter::run (BufferSet& bufs, framepos_t /*start_frame*/, framepos_t /*end_fr
for (MidiBuffer::iterator e = buf.begin(); e != buf.end(); ++e) {
const Evoral::MIDIEvent<framepos_t> ev(*e, false);
if (ev.is_note_on()) {
- const float this_vel = log(ev.buffer()[2] / 127.0 * (M_E*M_E-M_E) + M_E) - 1.0;
+ const float this_vel = ev.buffer()[2] / 127.0;
if (this_vel > val) {
val = this_vel;
}
@@ -189,6 +189,7 @@ PeakMeter::meter ()
assert(_visible_peak_power.size() == _peak_power.size());
const size_t limit = min (_peak_power.size(), (size_t) current_meters.n_total ());
+ const size_t n_midi = min (_peak_power.size(), (size_t) current_meters.n_midi());
for (size_t n = 0; n < limit; ++n) {
@@ -197,6 +198,24 @@ PeakMeter::meter ()
float new_peak = _peak_power[n]; /* XXX we should use atomic exchange from here ... */
_peak_power[n] = 0; /* ... to here */
+ if (n < n_midi) {
+ _max_peak_power[n] = -INFINITY; // std::max (fast_coefficient_to_dB(new_peak), _max_peak_power[n]); // XXX
+ if (Config->get_meter_falloff() == 0.0f || new_peak > _visible_peak_power[n]) {
+ } else {
+ /* empirical WRT to falloff times , 0.01f ^= 100 Hz update rate */
+#if 1
+ new_peak = _visible_peak_power[n] - _visible_peak_power[n] * Config->get_meter_falloff() * 0.01f * 0.05f;
+#else
+ new_peak = _visible_peak_power[n] - sqrt(_visible_peak_power[n] * Config->get_meter_falloff() * 0.01f * 0.0002f);
+#endif
+ if (new_peak < (1.0 / 512.0)) new_peak = 0;
+ }
+ _visible_peak_power[n] = new_peak;
+ continue;
+ }
+
+ /* AUDIO */
+
/* compute new visible value using falloff */
if (new_peak > 0.0) {