racket backend for async ao
This commit is contained in:
@@ -50,6 +50,7 @@
|
||||
[(eq? e 'native-endian) (not (system-big-endian?))]
|
||||
[else (error (format "unknown endian value: ~a" e))]))
|
||||
|
||||
#|
|
||||
(define (flac-channels->interleaved-buffer buffer block-size channels bits endianness)
|
||||
(let* ([bytes (quotient bits 8)]
|
||||
[little? (endian-little? endianness)]
|
||||
@@ -78,6 +79,30 @@
|
||||
(set! out-pos (+ out-pos bytes)))))
|
||||
|
||||
(list mem-out buf-size)))
|
||||
|#
|
||||
|
||||
(define (flac-channels->interleaved-buffer buffer block-size channels bits endianness)
|
||||
;; buffer = FLAC__int32 * const buffer[]
|
||||
;; block-size = samples per channel
|
||||
|
||||
(let* ([bytes (quotient bits 8)]
|
||||
[big? (not (endian-little? endianness))]
|
||||
[buf-size (* block-size channels bytes)]
|
||||
[bs (make-bytes buf-size)]
|
||||
;[out (malloc buf-size 'atomic-interior)]
|
||||
[out-pos 0])
|
||||
|
||||
(for ([k (in-range block-size)])
|
||||
(for ([channel (in-range channels)])
|
||||
(let* ([chan (ptr-ref buffer _pointer channel)]
|
||||
[sample (ptr-ref chan _int32 k)])
|
||||
(integer->integer-bytes sample bytes #t big? bs out-pos)
|
||||
(set! out-pos (+ out-pos bytes)))))
|
||||
|
||||
;(memcpy out bs buf-size)
|
||||
;(list out buf-size)
|
||||
(list bs buf-size)
|
||||
))
|
||||
|
||||
(define (process-frame handle frame buffer)
|
||||
(let* ([h (flac-ffi-frame-header frame)]
|
||||
|
||||
Reference in New Issue
Block a user