#!/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)