69 lines
1.9 KiB
Racket
69 lines
1.9 KiB
Racket
#lang racket/base
|
|
|
|
(require "../flac-decoder.rkt")
|
|
|
|
(define (test-flac-thread flac-path #:pool [pool #f])
|
|
(define result-ch (make-channel))
|
|
|
|
(define (start)
|
|
(thread
|
|
(lambda ()
|
|
(with-handlers ([exn:fail?
|
|
(lambda (e)
|
|
(channel-put result-ch
|
|
(list 'error (exn-message e))))])
|
|
(define frames 0)
|
|
(define buffers 0)
|
|
(define bytes 0)
|
|
(define fmt #f)
|
|
|
|
(define h
|
|
(flac-open
|
|
flac-path
|
|
|
|
;; stream-info callback
|
|
(lambda (info)
|
|
(set! fmt info)
|
|
(printf "format: ~s\n" info)
|
|
(flush-output))
|
|
|
|
;; audio callback
|
|
(lambda (info buffer len)
|
|
(set! buffers (add1 buffers))
|
|
(set! bytes (+ bytes len))
|
|
(define blocksize (hash-ref info 'blocksize #f))
|
|
(when (integer? blocksize)
|
|
(set! frames (+ frames blocksize)))
|
|
|
|
;; af en toe iets printen, zodat je ziet dat hij loopt
|
|
(when (zero? (modulo buffers 500))
|
|
(printf "buffers=~a bytes=~a frames=~a\n"
|
|
buffers bytes frames)
|
|
(flush-output)))))
|
|
|
|
(unless h
|
|
(error 'test-flac-thread "could not open FLAC file: ~a" flac-path))
|
|
|
|
(define state (flac-read h))
|
|
|
|
(channel-put result-ch
|
|
(list 'ok
|
|
'state state
|
|
'buffers buffers
|
|
'bytes bytes
|
|
'frames frames
|
|
'format fmt))))
|
|
#:pool pool)
|
|
)
|
|
|
|
(start)
|
|
(start)
|
|
(start)
|
|
|
|
(channel-get result-ch)
|
|
(channel-get result-ch)
|
|
(channel-get result-ch)
|
|
)
|
|
|
|
|
|
; (test-flac-thread "\\\\panderleou\\music\\Jazz\\LA4\\LA4 - Zaca\\01 Zaca.flac") |