From 52509e1f7d60c8d816fc89591d0a1c2a90a218dc Mon Sep 17 00:00:00 2001 From: Thomas White Date: Thu, 2 Jun 2022 19:37:45 +0200 Subject: Debounce "go" button on MIDI controller --- guile/starlet/midi-control/button-utils.scm | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) (limited to 'guile/starlet/midi-control') 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! -- cgit v1.2.3