;;;; sym2voice
;;;; This is the worst and most kludgy util I have ever posted.
;;;; Kinda cool though. Uses libsndfile and openbsd aucat and ffmpeg.
;;;; No particular reason it's not just libsndfile.
(defpackage sym2voice (:use cl cl-user)(:nicknames s2v))
(in-package sym2voice)
(defvar *test* '(1 (2) (3 (4)) 5))
(defvar *workfile* "work.wav")
(defun rec ()
(ext:run-program "aucat" `("-o" ,*workfile*)))
(defun sav ()
(when *missing*
(ext:run-program "mv"
`(,*workfile* ,(sound-of (pop *missing*))))
(check-missing)
(when *missing*
(format t "Next do: ~s~%" (car *missing*)))))
(defun ply ()
(ext:run-program "aucat" `("-i" ,*workfile*)))
(defvar *out* (list))
(defun deflate (list)
(loop for l in list do
(if (listp l) (deflate l)
(push l *out*))
initially (push '|(| *out*)
finally (push '|)| *out*)))
(defun sound-of (sym)
(format nil "voice/~a.wav"
(pathname-name (pathname (format nil "~s" sym)))))
(defun sound-p (sym)
(directory (sound-of sym)))
(defvar *missing* (list))
(defun check-missing ()
(setq *missing*
(mapcan (lambda (x) (and (not (sound-p x)) (list x)))
*out*)))
(defun cat ()
(ext:run-program "sndfile-concat"
(append (mapcar 'sound-of (reverse *out*))
(list *workfile*)))
(ext:system "ffmpeg -i work.wav -af \"highpass=f=300\" -y high.wav")
(ext:system "ffmpeg -i high.wav -af \"atempo=1.5\" -y fast.wav")
(ext:system "ffmpeg -i fast.wav -af \"adeclick\" -y clickless.wav")
(ext:system "ffmpeg -i clickless.wav -af \"volume=1.7\" -y loud.opus"))
(defun file-test (path)
(setq *test*
(with-open-file (in path :direction :input)
(loop for read = (read in nil nil)
while read collecting read))))