racket backend for async ao
This commit is contained in:
+13
-2
@@ -429,16 +429,27 @@ int main(int argc, char *argv[])
|
||||
(set! mp3-file "")
|
||||
#t))
|
||||
|
||||
(define (copy-buffer buf size)
|
||||
(cond
|
||||
((> size 0)
|
||||
(let ((out (make-bytes size)))
|
||||
(memcpy out buf size)
|
||||
out))
|
||||
((= size 0)
|
||||
(make-bytes 0))
|
||||
(else
|
||||
#f)))
|
||||
|
||||
(define (read cb format-cb)
|
||||
(let-values ([(r done) (mpg123_read mh buffer buf-size)])
|
||||
(cond
|
||||
((eq? r 'MPG123_DONE) (cb 'done -1 buffer done))
|
||||
((eq? r 'MPG123_DONE) (cb 'done -1 (copy-buffer buffer done) done))
|
||||
((eq? r 'MPG123_NEW_FORMAT) (do-format)
|
||||
(mp3-format format-cb)
|
||||
(read cb format-cb))
|
||||
((eq? r 'MPG123_OK) (let ((pcm-pos (mpg123_tell64 mh)))
|
||||
(set! current-pcm-pos pcm-pos)
|
||||
(cb 'data pcm-pos buffer done)))
|
||||
(cb 'data pcm-pos (copy-buffer buffer done) done)))
|
||||
(else (error (format "mpg123_read: ~a" (mpg123_plain_strerror r))))
|
||||
)
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user