Skip to content

Commit 5d0bad0

Browse files
committed
More stable BPM tapper
1 parent 469bf2e commit 5d0bad0

1 file changed

Lines changed: 7 additions & 8 deletions

File tree

Applications/Lighting/BPMTapper.h

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,14 @@ class UIBPMTapper : public UIComponent {
3535
return;
3636
}
3737

38-
// Calculate average interval from last 3 taps (2 intervals)
39-
size_t size = tap_times.size();
40-
uint64_t newest = tap_times[size - 1];
41-
uint64_t middle = tap_times[size - 2];
42-
uint64_t oldest = tap_times[size - 3];
38+
// Use last 5 taps or all available taps if fewer
39+
size_t taps_to_use = std::min(tap_times.size(), (size_t)5);
40+
size_t start_index = tap_times.size() - taps_to_use;
4341

44-
uint64_t interval1 = newest - middle;
45-
uint64_t interval2 = middle - oldest;
46-
uint64_t avg_interval = (interval1 + interval2) / 2;
42+
// Calculate average interval
43+
uint64_t total_interval = tap_times[tap_times.size() - 1] - tap_times[start_index];
44+
uint64_t num_intervals = taps_to_use - 1;
45+
uint64_t avg_interval = total_interval / num_intervals;
4746

4847
// BPM = 60 seconds * 1,000,000 microseconds / average interval
4948
uint16_t bpm = 60000000 / avg_interval;

0 commit comments

Comments
 (0)