diff --git a/libflac/flac-decoder.rkt b/libflac/flac-decoder.rkt index 5cdc6b4..18ff7f8 100644 --- a/libflac/flac-decoder.rkt +++ b/libflac/flac-decoder.rkt @@ -82,6 +82,7 @@ (let* ((ffi-handler (flac-handle-ffi-decoder-handler handle)) (state (ffi-handler 'state))) (set-flac-handle-stop-reading! handle #f) + (set-flac-handle-reading! handle #t) (letrec ((reader (lambda (frame-nr) (let* ((st (ffi-handler 'state))) (ffi-handler 'process-single) @@ -107,7 +108,9 @@ (process-frame handle frame buffer))) ) (if (or (eq? st 'end-of-stream) (eq? st 'stopped-reading)) - st + (begin + (set-flac-handle-reading! handle #f) + st) (reader (+ frame-nr 1))))) )) (reader 0)))) @@ -131,6 +134,9 @@ #f))) (define (flac-stop handle) - (set-flac-handle-stop-reading! handle #t)) + (set-flac-handle-stop-reading! handle #t) + (while (flac-handle-reading handle) + (sleep 0.01)) + ) ); end of module diff --git a/libflac/flac-definitions.rkt b/libflac/flac-definitions.rkt index 9443961..39f604c 100644 --- a/libflac/flac-definitions.rkt +++ b/libflac/flac-definitions.rkt @@ -97,6 +97,7 @@ [cb-audio #:auto #:mutable] [stream-info #:auto #:mutable] [stop-reading #:auto #:mutable] + [reading #:auto #:mutable] ) #:auto-value #f ;#:transparent