racket backend for async ao

This commit is contained in:
2026-05-03 14:16:32 +02:00
parent 92227133ff
commit d06d829f6a
6 changed files with 150 additions and 10 deletions
+13 -2
View File
@@ -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))))
)
)