Hi,
I've been using the generators in generators.scm for a while, and enjoy making
sound with them, but for the life of me I cannot seem to understand how they
work. I'm confused about the lambda part and the use of fm. What is fm doing?
I'd be grateful if someone could explain that.
Such as in nxycos, It seems like (set! angle (+ angle fm frequency)) is
critical, but is (+ angle fm frequency), simply the sum of those variables,
such as (+ 3 1 2), > 6? Or does the fm part contribute to the radians value of
angle in some other way in that bit of code. I've tried using display and
formatted output to look at output values such as x, y, den, angle in radians
in lambda, but nothing is really making sense to me yet. I've also
experimented with input of different values and viewing the fft outputs to see
the frequency in hz, ratio, n, and also angle or phase start in the waveform
view of snd.
For ex. if I do something like:
...
(outa i (* .5 (nxycos gen 0.1))
such as adding a value for fm, then the frequency really takes off, so I'm not
sure I'm understanding what fm does in the generator or how it's supposed to be
used.
Thank you,
Jim
(defgenerator (nxycos :make-wrapper convert-frequency)
(frequency 0.0) (ratio 1.0) (n 1) (angle 0.0) fm)
(define nxycos
(let ((+documentation+ "(make-nxycos frequency (ratio 1.0) (n 1)) creates an
nxycos generator. (nxycos gen (fm 0.0))
returns n cosines from frequency spaced by frequency * ratio."))
(lambda* (gen (fm 0.0))
(let-set! gen 'fm fm)
(with-let gen
(let* ((x angle)
(y (* x ratio))
(den (sin (* y 0.5
(set! angle (+ angle fm frequency))
(if (< (abs den) nearly-zero)
1.0
(/ (* (cos (+ x (* 0.5 (- n 1) y)))
(sin (* 0.5 n y)))
(* n den ; n=normalization
#|
(with-sound (:clipped #f :statistics #t :play #t)
(let ((gen (make-nxycos 300 1/3 3)))
(do ((i 0 (+ i 1)))
((= i 2))
(outa i (* .5 (nxycos gen))
|#
___
Cmdist mailing list
Cmdist@ccrma.stanford.edu
https://cm-mail.stanford.edu/mailman/listinfo/cmdist