diff options
Diffstat (limited to 'runtime/equalizer.lsp')
-rw-r--r-- | runtime/equalizer.lsp | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/runtime/equalizer.lsp b/runtime/equalizer.lsp new file mode 100644 index 0000000..12ff487 --- /dev/null +++ b/runtime/equalizer.lsp @@ -0,0 +1,75 @@ +;; equalizer.lsp -- support functions for equalizer editor in jNyqIDE + +#| This is modeled after envelopes.lsp, which details how envelope data is +exchanged between Nyquist and jNyqIDE. + +The jNyqIDE code needs some work to make it look like the envelope +editor (which also needs work, but that's another matter). For consistency, +both should support named envelopes and equalizers. + +However, for now, we have equalizers numbered from 0 to 9. The format for +exchange will be: + +get-eq-data: begin +name parameters newline +name parameters newline +... +get-eq-data: end + +and when the IDE wants to save a definition, it should call +(DEFINE-EQ 'NAME 'PARAMETER-LIST) + +|# + +(cond ((not (boundp '*equalizers*)) + (setf *equalizers* nil))) + +;; DEFINE-EQ -- save the eq data and make corresponding function +;; +(defun define-eq (name expression) + (setf *equalizers* (remove name *equalizers* + :test #'(lambda (key item) (eql key (car item))))) + (push (list name expression) *equalizers*) + (make-eq-function name expression) + ; make sure equalizers are redefined when workspace is loaded + (add-to-workspace '*equalizers*) + (describe '*equalizers* "data for equalizers in jNyqIDE") + (add-action-to-workspace 'make-eq-functions) + nil) + + +;; MAKE-EQ-FUNCTION -- convert data to a defined function +;; +(defun make-eq-function (name parameters) + (cond ((numberp name) + (setf name (intern (format nil "EQ-~A" name))))) + (if (not (boundp '*grapheq-loaded*)) (load "grapheq.lsp")) + (setf (symbol-function name) + (eval `(lambda (s) (nband-range s ',parameters 60 14000))))) + + +;; MAKE-EQ-FUNCTIONS -- convert data to defined functions +;; +(defun make-eq-functions () + (let (name type parameters) + (dolist (eq *equalizers*) + (setf name (car eq)) + (setf parameters (second parameters)) + (make-eq-function name parameters)))) + + +;; GET-EQ-DATA -- print env data for IDE +;; +(defun get-eq-data () + (let (parameters) + (princ "get-eq-data: begin\n") + (dolist (env *equalizers*) + (format t "~A" (car env)) + (setf parameters (second env)) + (dotimes (i (length parameters)) + (format t " ~A" (aref parameters i))) + (format t "~%")) + (princ "get-eq-data: end\n") + nil)) + + |