diff options
author | Colin Fletcher <colin.m.fletcher@googlemail.com> | 2014-05-16 18:50:30 +0100 |
---|---|---|
committer | Colin Fletcher <colin.m.fletcher@googlemail.com> | 2014-07-05 21:47:49 +0100 |
commit | 7815aa1e89e07e2785d6995b94a28a72a96c74cb (patch) | |
tree | 0715e871a2a433631f1bcbf67d15d1a0619a06bb /gtk2_ardour/tempo_dialog.cc | |
parent | 61d413ada423f456ad7687b2ae2d39047c7f53a6 (diff) |
Make tap tempo use g_get_monotonic_time(), and fix minimum BPM
gettimeofday() is not guaranteed to be monotonic: use
g_get_monotonic_time() instead.
Also, fix calculation of slowest tap tempo BPM so that the slowest tempo
which can be set by tapping is 10 BPM rather than 240.
Diffstat (limited to 'gtk2_ardour/tempo_dialog.cc')
-rw-r--r-- | gtk2_ardour/tempo_dialog.cc | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/gtk2_ardour/tempo_dialog.cc b/gtk2_ardour/tempo_dialog.cc index 56e375dc91..a969581369 100644 --- a/gtk2_ardour/tempo_dialog.cc +++ b/gtk2_ardour/tempo_dialog.cc @@ -257,18 +257,16 @@ TempoDialog::pulse_change () void TempoDialog::tap_tempo () { - struct timeval now; - gettimeofday (&now, NULL); + gint64 now; + now = g_get_monotonic_time (); // microseconds - if (last_tap.tv_sec >= 0 || last_tap.tv_usec > 0) { - struct timeval diff; + if (last_tap > 0) { double interval, bpm; static const double decay = 0.5; - timersub (&now, &last_tap, &diff); - interval = diff.tv_sec + diff.tv_usec * 1.0e-6; - if (interval <= 0.25) { - // >= 15 bpm, say + interval = (now - last_tap) * 1.0e-6; + if (interval <= 6.0) { + // >= 10 bpm, say if (average_interval > 0) { average_interval = interval * decay + average_interval * (1.0-decay); |