diff options
-rw-r--r-- | guile/starlet/midi-control/base.scm | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/guile/starlet/midi-control/base.scm b/guile/starlet/midi-control/base.scm index 64fcae7..bcbb741 100644 --- a/guile/starlet/midi-control/base.scm +++ b/guile/starlet/midi-control/base.scm @@ -222,28 +222,38 @@ (all-notes-off! default-channel))) +(define midi-running #f) + (define (start-dummy-midi) (display "Using dummy MIDI control\n") (begin-thread (let again () (let ((bytes-to-send (atomic-box-swap! send-queue '()))) (usleep 1000) - (again))))) + (again)))) + (set! midi-running #t)) (define* (start-midi-control device-name #:key (channel #f)) - (when channel - (set! default-channel channel)) - (with-exception-handler + (if midi-running + + (format #t "MIDI already running\n") + + (begin + (when channel + (set! default-channel channel)) + + (with-exception-handler - (lambda (exn) - (format #t "Couldn't start MIDI ~a\n" - (exception-irritants exn)) - (start-dummy-midi)) + (lambda (exn) + (format #t "Couldn't start MIDI ~a\n" + (exception-irritants exn)) + (start-dummy-midi)) - (lambda () - (start-midi-control-real device-name channel)) + (lambda () + (start-midi-control-real device-name channel) + (set! midi-running #t)) - #:unwind? #t)) + #:unwind? #t)))) |