tap-tempo: reset running average whenever tapped tempo deviates by +/- 20%
authorColin Fletcher <colin.m.fletcher@googlemail.com>
Sat, 21 Mar 2015 12:12:11 +0000 (12:12 +0000)
committerColin Fletcher <colin.m.fletcher@googlemail.com>
Fri, 27 Mar 2015 13:23:33 +0000 (13:23 +0000)
gtk2_ardour/tempo_dialog.cc

index 02686b62ff5a6833fb5212eadedf499067371edc..8ccafecab24ee2aaaf86a1607c94467c39e89359 100644 (file)
@@ -274,15 +274,21 @@ TempoDialog::tap_tempo_button_press (GdkEventButton *ev)
                interval = (now - last_tap) * 1.0e-6;
                if (interval <= 6.0) {
                        // <= 6 seconds (say): >= 10 bpm
-                       if (average_interval > 0 && average_interval > interval / 1.2 && average_interval < interval * 1.2) {
+                       if (average_interval > 0) {
+                               if (average_interval > interval / 1.2 && average_interval < interval * 1.2) {
                                average_interval = interval * decay
                                        + average_interval * (1.0-decay);
+                               } else {
+                                       average_interval = 0;
+                               }
                        } else {
                                average_interval = interval;
                        }
 
-                       bpm = 60.0 / average_interval;
-                       bpm_spinner.set_value (bpm);
+                       if (average_interval > 0) {
+                               bpm = 60.0 / average_interval;
+                               bpm_spinner.set_value (bpm);
+                       }
                } else {
                        average_interval = 0;
                }