mirror of
				https://github.com/cookiengineer/audacity
				synced 2025-11-01 06:33:53 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			76 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Common Lisp
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Common Lisp
		
	
	
	
	
	
| ;; 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))
 | |
| 
 | |
| 
 |