(setq duration 5)

(setq osc-scale 0.9)

(defun round-sin (frequency scale-bits)

  (progn

    (snd-save

     (scale (/ (expt 2.0 (1- scale-bits)) (expt 2.0 15.0))
	    (scale osc-scale (osc (hz-to-step frequency) duration))
     )

     1000000 "/tmp/nyquist.roundoff"

    )

;    (play

      (scale (/ (expt 2.0 15.0) (expt 2.0 (1- scale-bits)))

             (s-read "/tmp/nyquist.roundoff" :srate 44100.0)

      )

;    )

  )

)

(defun round-error (frequency scale-bits scale-out)

  (progn

    (snd-save

     (scale (/ (expt 2.0 (1- scale-bits)) (expt 2.0 15.0))
	    (scale osc-scale (osc (hz-to-step frequency) duration))
     )

     1000000 "/tmp/nyquist.roundoff"

    )

    (snd-save

     (scale (- 0.0 osc-scale) (osc (hz-to-step frequency) duration))

     1000000 "/tmp/nyquist.negsin"

    )

;    (play
        (scale scale-out

      (sim

        (scale (/ (expt 2.0 15.0) (expt 2.0 (1- scale-bits)))

               (s-read "/tmp/nyquist.roundoff" :srate 44100.0)

        )

        (s-read "/tmp/nyquist.negsin" :srate 44100.0)

      )

    );)

  )

)

(setq hp

  (scale 0.75

    (sim

      (scale 0.25 (osc (hz-to-step 300) 10))

      (scale 0.225 (osc (hz-to-step 900) 10))

      (scale 0.20 (osc (hz-to-step 1500) 10))

      (scale 0.1755 (osc (hz-to-step 2100) 10))

      (scale 0.15 (osc (hz-to-step 2700) 10))

      (scale 0.125 (osc (hz-to-step 3300) 10))

      (scale 0.10 (osc (hz-to-step 3900) 10))

    )

  )

)

(defun round-hp (scale-bits)

  (progn

    (snd-save

     (scale (/ (expt 2.0 (1- scale-bits)) (expt 2.0 15.0))
	    (scale 0.6 hp)
     )

     1000000 "/tmp/nyquist.roundoff"

    )

;    (play

      (scale (/ (expt 2.0 15.0) (expt 2.0 (1- scale-bits)))

             (s-read "/tmp/nyquist.roundoff" :srate 44100.0)

;      )

    )

  )

)

(defun round-hp-error (scale-bits scale-out)

  (progn

    (snd-save

     (scale (/ (expt 2.0 (1- scale-bits)) (expt 2.0 15.0))
	    (scale 0.6 hp)
     )

     1000000 "/tmp/nyquist.roundoff"

    )

    (snd-save

     (scale -0.6 hp)

     1000000 "/tmp/nyquist.negsin"

    )

;    (play
           (scale scale-out

      (sim

        (scale (/ (expt 2.0 15.0) (expt 2.0 (1- scale-bits)))

               (s-read "/tmp/nyquist.roundoff" :srate 44100.0)

        )

        (s-read "/tmp/nyquist.negsin" :srate 44100.0)

;      )

    ))

  )

)
