diff --git a/libflac/flac-decoder.rkt b/libflac/flac-decoder.rkt index 3737df8..ee1d78a 100644 --- a/libflac/flac-decoder.rkt +++ b/libflac/flac-decoder.rkt @@ -36,6 +36,7 @@ (define kinds (make-hash)) (define last-buffer #f) (define last-buf-len #f) + (define (process-frame handle frame buffer) (let* ((h (flac-ffi-frame-header frame)) (cb-audio (flac-handle-cb-audio handle)) @@ -43,6 +44,7 @@ (type (hash-ref h 'number-type)) (channels (hash-ref h 'channels)) (block-size (hash-ref h 'blocksize))) + (hash-set! h 'duration (flac-duration handle)) (let ((buffers (ffi 'get-buffers buffer channels block-size))) (set! last-buffer buffers) (set! last-buf-len (hash-ref h 'blocksize)) diff --git a/libflac/flac-definitions.rkt b/libflac/flac-definitions.rkt index 139ca38..70c01ed 100644 --- a/libflac/flac-definitions.rkt +++ b/libflac/flac-definitions.rkt @@ -96,6 +96,7 @@ [stream-info #:auto #:mutable] ) #:auto-value #f + ;#:transparent ) ); end of module diff --git a/play-test.rkt b/play-test.rkt index 14759c6..561d3d4 100644 --- a/play-test.rkt +++ b/play-test.rkt @@ -9,8 +9,8 @@ (when (eq? os 'unix) (set! test-file3 "/muziek/Klassiek-Viool/Alina Ibragimova/Paganini_24 Caprices (2021)/24. 24 Caprices, Op 1 - No. 24 in A minor- Tema con variazioni. Quasi presto.flac")) (when (eq? os 'windows) - (set! test-file3 "C:\\Muziek\\Klassiek-Strijkkwartet\\Quatuor Zaïde\\Franz\\01 Erlkönig, D. 328 (Arr. For String Quartet by Eric Mouret).flac") - ;(set! test-file3 "C:\\Muziek\\Klassiek-Viool\\Janine Jansen\\Janine Jansen - Sibelius en Prokovief 1 (2024)\\02 - Violin Concerto in D Minor, Op. 47 II. Adagio di molto.flac") + ;(set! test-file3 "C:\\Muziek\\Klassiek-Strijkkwartet\\Quatuor Zaïde\\Franz\\01 Erlkönig, D. 328 (Arr. For String Quartet by Eric Mouret).flac") + (set! test-file3 "C:\\Muziek\\Klassiek-Viool\\Janine Jansen\\Janine Jansen - Sibelius en Prokovief 1 (2024)\\02 - Violin Concerto in D Minor, Op. 47 II. Adagio di molto.flac") ) ) @@ -28,6 +28,7 @@ (bytes-per-sample (/ bits-per-sample 8)) (channels (hash-ref frame 'channels)) (bytes-per-sample-all-channels (* channels bytes-per-sample)) + (duration (hash-ref frame 'duration)) ) (when (eq? ao-h #f) (let ((fmt (ao-mk-format bits-per-sample rate channels 'big-endian))) @@ -38,8 +39,14 @@ (when (> s current-seconds) (set! current-seconds s) (let ((minutes (quotient s 60)) - (seconds (remainder s 60))) - (displayln (format "At time: ~a:~a" minutes seconds)))))))) + (seconds (remainder s 60)) + (tminutes (quotient duration 60)) + (tseconds (remainder duration 60)) + ) + (displayln (format "At time: ~a:~a (~a:~a)" + minutes seconds + tminutes tseconds + )))))))) (let* ((buf-size (ao-bufsize-async ao-h)) (buf-seconds (exact->inexact (/ buf-size bytes-per-sample-all-channels rate)))) (second-printer)