summaryrefslogtreecommitdiff
path: root/gtk2_ardour/tempo_dialog.cc
diff options
context:
space:
mode:
authorColin Fletcher <colin.m.fletcher@googlemail.com>2014-05-16 18:50:30 +0100
committerColin Fletcher <colin.m.fletcher@googlemail.com>2014-07-05 21:47:49 +0100
commit7815aa1e89e07e2785d6995b94a28a72a96c74cb (patch)
tree0715e871a2a433631f1bcbf67d15d1a0619a06bb /gtk2_ardour/tempo_dialog.cc
parent61d413ada423f456ad7687b2ae2d39047c7f53a6 (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.cc14
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);