summaryrefslogtreecommitdiff
path: root/runtime/equalizer.lsp
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/equalizer.lsp')
-rw-r--r--runtime/equalizer.lsp75
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))
+
+