Full conversion done
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
#lang racket/base
|
||||
(require racket-audio/flac-decoder
|
||||
racket-audio/audio-encoder
|
||||
"log.rkt"
|
||||
)
|
||||
|
||||
(provide determine-flac-khz-and-bits
|
||||
convert-flac-to-rate)
|
||||
|
||||
|
||||
(define (determine-flac-khz-and-bits path)
|
||||
(with-handlers ((exn? (λ args
|
||||
(error (format "Cannot process ~a" path)))))
|
||||
(let* ((meta #f)
|
||||
(flac-handle (flac-open path
|
||||
(λ (info) (set! meta info))
|
||||
(λ data #t)))
|
||||
)
|
||||
(flac-read-meta flac-handle)
|
||||
(flac-stop flac-handle)
|
||||
(if (eq? meta #f)
|
||||
(values #f #f)
|
||||
(values (hash-ref meta 'sample-rate)
|
||||
(hash-ref meta 'audio-bits-per-sample))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
(define (convert-flac-to-rate path rate)
|
||||
(let* ((tmp-file (build-path (string-append (path->string path) ".tmp.flac")))
|
||||
(encoder-settings (hash 'target-sample-rate rate
|
||||
'compression-level 8))
|
||||
)
|
||||
(with-handlers ([exn? (λ (e)
|
||||
(err-am (format "~a" e))
|
||||
(when (file-exists? tmp-file)
|
||||
(delete-file tmp-file))
|
||||
#f)])
|
||||
(let ((result (audio-encode path tmp-file
|
||||
encoder-settings
|
||||
#:encoder 'flac
|
||||
#:copy-tags? #t
|
||||
)))
|
||||
(rename-file-or-directory tmp-file path #t)
|
||||
#t)
|
||||
)
|
||||
)
|
||||
)
|
||||
Reference in New Issue
Block a user