aboutsummaryrefslogtreecommitdiff
path: root/guile/starlet/midi-control
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2022-06-02 19:37:45 +0200
committerThomas White <taw@physics.org>2022-06-02 19:37:45 +0200
commit52509e1f7d60c8d816fc89591d0a1c2a90a218dc (patch)
tree0e82765f74cd2c17600a7679bb4aa5f8ae2f8f61 /guile/starlet/midi-control
parent31a0a163bae55a162edf2f0df4d6dc374185d3bb (diff)
Debounce "go" button on MIDI controller
Diffstat (limited to 'guile/starlet/midi-control')
-rw-r--r--guile/starlet/midi-control/button-utils.scm18
1 files changed, 13 insertions, 5 deletions
diff --git a/guile/starlet/midi-control/button-utils.scm b/guile/starlet/midi-control/button-utils.scm
index 8462e3e..d9a3c1c 100644
--- a/guile/starlet/midi-control/button-utils.scm
+++ b/guile/starlet/midi-control/button-utils.scm
@@ -22,6 +22,7 @@
#:use-module (starlet midi-control base)
#:use-module (starlet state)
#:use-module (starlet playback)
+ #:use-module (starlet utils)
#:export (make-go-button
make-stop-button
make-back-button
@@ -31,11 +32,18 @@
(define* (make-go-button controller pb button
#:key
(ready-note #f)
- (pause-note #f))
- (register-midi-note-callback!
- controller
- #:note-number button
- #:func (lambda () (go! pb)))
+ (pause-note #f)
+ (min-time-between-presses 0.2))
+ (let ((time-last-press 0))
+ (register-midi-note-callback!
+ controller
+ #:note-number button
+ #:func (lambda ()
+ (let ((time-this-press (hirestime)))
+ (if (> time-this-press (+ time-last-press min-time-between-presses))
+ (go! pb)
+ (display "Too soon after last press!\n"))
+ (set! time-last-press time-this-press)))))
(when (or ready-note pause-note)
(add-hook!