diff --git a/libflac/flac-decoder.rkt b/libflac/flac-decoder.rkt index ee1d78a..8afdfa6 100644 --- a/libflac/flac-decoder.rkt +++ b/libflac/flac-decoder.rkt @@ -9,6 +9,7 @@ flac-read flac-read-meta flac-stream-state + flac-stop (all-from-out "flac-definitions.rkt") kinds last-buffer last-buf-len @@ -79,6 +80,7 @@ (define (flac-read handle) (let* ((ffi-handler (flac-handle-ffi-decoder-handler handle)) (state (ffi-handler 'state))) + (set-flac-handle-stop-reading! handle #f) (letrec ((reader (lambda (frame-nr) (let* ((st (ffi-handler 'state))) (ffi-handler 'process-single) @@ -88,6 +90,8 @@ (format "Now in state ~a (frame-nr = ~a) (int-state = ~a)" st frame-nr (ffi-handler 'int-state))) ) + (when (flac-handle-stop-reading handle) + 'stopped-reading) (when (ffi-handler 'has-errno?) (displayln (format "Error in stream: ~a" (ffi-handler 'errno))) @@ -124,5 +128,8 @@ (lambda (meta) (process-meta handle meta))) (flac-handle-stream-info handle)) #f))) + + (define (flac-stop handle) + (set-flac-handle-stop-reading! handle #t)) ); end of module diff --git a/libflac/flac-definitions.rkt b/libflac/flac-definitions.rkt index 70c01ed..9443961 100644 --- a/libflac/flac-definitions.rkt +++ b/libflac/flac-definitions.rkt @@ -13,6 +13,8 @@ set-flac-handle-cb-stream-info! flac-handle-cb-audio set-flac-handle-cb-audio! + flac-handle-stop-reading + set-flac-handle-stop-reading! flac-handle->string @@ -94,6 +96,7 @@ [cb-stream-info #:auto #:mutable] [cb-audio #:auto #:mutable] [stream-info #:auto #:mutable] + [stop-reading #:auto #:mutable] ) #:auto-value #f ;#:transparent diff --git a/play-test.rkt b/play-test.rkt index 0684ba6..ae2304b 100644 --- a/play-test.rkt +++ b/play-test.rkt @@ -73,9 +73,11 @@ (displayln meta)) (define (play) + (set! ao-h #f) (let ((flac-h (flac-open test-file3 flac-meta flac-play))) (flac-read flac-h) - (ao-close ao-h))) + (ao-close ao-h) + (set! ao-h #f))) ;(sleep 1.0) ;(play)))