;;;; Somehow became 012.lisp

(require :cl-buchberger)
(require :mcclim)
(asdf:oos 'asdf:load-op :lispusers/tfw/high/turntable)

(in-package :lispusers/tfw/high/turntable)
(use-package :cl-buchberger)

(defun lambdaise (poly)
(let* ((variables (cl-buchberger::variables
                   (cl-buchberger::base-ring poly)))
       (terms (cl-buchberger::terms->list poly)))
 `(lambda (,@variables)
   (+
    ,@(loop for term in terms
       for co = (cl-buchberger::coefficient term)
       for mo = (cl-buchberger::monomial term) collect
       `(* ,co
           ,@(loop for m across mo for v in variables collect
              `(expt ,v ,m))))))))

(setq *p*
(ring* (make-polynomial (* 200 1/50 100/22050))
       (make-polynomial '(* 1 (expt x 2)))))

(setq *l* (lambdaise *p*))
(setf (symbol-function '*l*) (eval *l*))
(setf (repeats *frame*) 10)

;; Some iterations of this. I got my equation math wrong, but just
;; Wandered around it a bit.

(loop for n from -100 to 100 by 5
     for wl = (+ 100 (*l* n 0 0)) do
     (setf (wavelength/2 *frame*) (truncate wl 2))
     (append-note *frame*))