All pastes #973858 Raw Edit

Unnamed

public text v1 · immutable
·published 2008-04-06 11:07 UTC
rendered paste body
#!/usr/bin/gosh

;; This software is in the public domain and is
;; provided with absolutely no warranty.

(use file.util)
(use srfi-1)
(use srfi-11)
(use gauche.process)

(define *media-types*
  '("flac" "ape" "cue" "wv" "wav" "m4a"))

(define (media-file? file-name)
  (member (path-extension file-name) *media-types*))

(define (partition-cue files)
  (partition
   (lambda (f) (equal? (path-extension f) "cue"))
   files))

(define (process-files files output-dir)
  (let-values (((cue files) (partition-cue files)))
    (recode files output-dir cue)))

(define (oggenc-args output-dir)
  (format #f "cust ext=ogg oggenc -q9 -o ~a/%f -" output-dir))

(define (recode files output-dir cue)
  (run-process
   `(shntool ,@(if (and (= (length files) 1) (list? cue))
                      `(split -t %n_%t -f ,(car cue))
                      '(conv))
             -q -o ,(oggenc-args output-dir)
             ,@files) :wait #t))

(define (second list)
  (if (< (length list) 2)
      #f
      (cadr list)))

(define (main args)
  (process-files
   (directory-list (current-directory)
                   :children? #t :filter media-file?)
   (or (second args) "out"))
  0)