diff --git a/nyquist/aud-do-support.lsp b/nyquist/aud-do-support.lsp index 7b6359b04..6277de7c5 100644 --- a/nyquist/aud-do-support.lsp +++ b/nyquist/aud-do-support.lsp @@ -23,10 +23,9 @@ (defun aud-get-command (id) ;;; Return command signature from id string - (let ((all (aud-get-info "Commands"))) - (dolist (cmd all) - (when (member (string id) (assoc 'id cmd) :test 'equal) - (return cmd))))) + (let* ((helpstr (format nil "Help: Command=~s Format=LISP" id)) + (cmd-sig (first (aud-do helpstr)))) + (eval-string (quote-string cmd-sig)))) (defun aud-import-command (command-sig &optional func-name) @@ -87,12 +86,37 @@ (setf command \"" id ": \") (dolist (p params) (setf command (strcat command p))) - ;(print command) (aud-do command))") (eval-string func-def))) -;;; Import all Audacity "Commands" as LISP functions -;;; Function names prefix the command id with "aud-". -(dolist (command (aud-get-info "Commands")) - (aud-import-command command)) +(defun aud-import-commands () + ;;; Import all Audacity "Commands" as LISP functions + ;;; Function names prefix the command id with "aud-". + (dolist (command (aud-get-info "Commands")) + (aud-import-command command))) + + +(defun aud-import (id &optional func-name) + ;;; Import one Command by ID. + ;;; Example (aud-import "tone") + ;;; Creates a function (aud-tone :frequency 440 :amplitude 0.8 :waveform "Sine") + (let ((cmd (aud-get-command id))) + (aud-import-command cmd func-name))) + + +(defun aud-import-effects () + ;;; Import built-in effect commands + (let ((common (list "Amplify" "AutoDuck" "BassAndTreble" "ChangePitch" "ChangeSpeed" + "ChangeTempo" "Chirp" "ClickRemoval" "Compressor" "DtmfTones" + "Distortion" "Echo" "FadeIn" "FadeOut" "FilterCurve" "FindClipping" + "GraphicEq" "Invert" "LoudnessNormalization" "Noise" "Normalize" + "Paulstretch" "Phaser" "Repeat" "Repair" "Reverb" "Reverse" + "Silence" "SlidingStretch" "Tone" "TruncateSilence" "Wahwah"))) + (dolist (cmd common) + (aud-import cmd)))) + +(aud-import-effects) + +;;; Uncomment the next line to load all "AUD-" commands. +;(aud-import-commands) diff --git a/nyquist/init.lsp b/nyquist/init.lsp index 5fc5cbc3c..038bf0bd7 100644 --- a/nyquist/init.lsp +++ b/nyquist/init.lsp @@ -45,6 +45,15 @@ ;;; If 'string' is not a valid LISP expression, the behaviour is undefined. (eval (read (make-string-input-stream string)))) +(defun escape-backslash (in-string) + ;;; Escape backslashes + (let (ch (out-string "")) + (dotimes (i (length in-string) out-string) + (setf ch (subseq in-string i (1+ i))) + (if (string= ch "\\") + (string-append out-string "\\\\") + (string-append out-string ch))))) + (defmacro quote-string (string) ;;; Prepend a single quote to a string `(setf ,string (format nil "\'~a" ,string))) @@ -66,13 +75,7 @@ (if (not (last info)) (error (format nil "(aud-get-info ~a) failed.~%" str))) (let* ((info-string (first info)) - (sanitized "")) - ;; Escape backslashes - (dotimes (i (length info-string)) - (setf ch (subseq info-string i (1+ i))) - (if (string= ch "\\") - (string-append sanitized "\\\\") - (string-append sanitized ch))) + (sanitized (escape-backslash info-string))) (eval-string (quote-string sanitized)))))