audacity-plugins/FMCHIRP.ny

44 lines
1.4 KiB
Common Lisp

;nyquist plug-in
;version 4
;type generate
;categories "http://lv2plug.in/ns/lv2core#GeneratorPlugin"
;preview linear
;name "FM Chirp..."
;action "Generating Chirp..."
;author "dm"
;copyright "Released under terms of the GNU General Public License version 2"
;control carri-params "Carrier (Start End Curve)" string "" "800 200 -1.5"
;control modul-params "Modulator (Start End Curve)" string "" "450 -1.0 5.7"
;control modul-scale "Modulation Index" float-text "" 50 0 nil
;control dur "Duration" float "" 1 0.01 5
;;;curve going from inf to finf with curve parameter crv.
(defun piece (inif finf crv)
(if (zerop crv)
(pwlv inif 1 finf)
(let* ((epsilon (expt 0.5 crv))
(norm (/ (- inif finf) (- 1.0 epsilon)))
(arc (scale norm (diff (pwev 1 1 epsilon) epsilon))))
(sum finf arc))))
;;;stole this one from David R. Sky's Sequencer 2.
(defun string-to-list (string)
(read (make-string-input-stream (format nil "(~a)" string))))
(defun list-to-floats (input-list)
(mapcar #'float input-list))
(defun string-to-curve (string)
(apply #'piece (list-to-floats (string-to-list string))))
(defun three-numbersp (input-list)
(eq (mapcar #'numberp input-list) (list (= 0 0) (= 0 0) (= 0 0))))
(stretch-abs dur
(let* ((modul-freq (string-to-curve modul-params))
(carri-freq (string-to-curve carri-params)))
(hzosc
(sum carri-freq
(scale modul-scale
(hzosc modul-freq))))))