#lang scribble/manual
@(require (for-label racket))

@title{(lin-cong-c rate freq a c m xi)}

(lin-cong-l rate freq a c m xi)
(lin-cong-n rate freq a c m xi)

linear congruential chaotic generator.

freq - iteration frequency in Hertz
a    - multiplier amount
c    - increment amount
m    - modulus amount
xi   - initial value of x

A cubic-interpolating sound generator based on the difference
equation:

	xn+1 = (axn + c) % m

The output signal is automatically scaled to a range of [-1, 1].


Default initial parameters.


@racketblock[
(audition
 (out 0 (let ((x (mouse-x kr 20 sample-rate 0 0.1)))
	  (mul (lin-cong-c ar x 1.1 0.13 1 0) 0.2))))
]


randomly modulate parameters.


@racketblock[
(audition
 (out 0 (mul (lin-cong-c ar
			 (mul-add (lf-noise2 kr 1.0) 1e4 1e4)
			 (mul-add (lf-noise2 kr 0.1) 0.5 1.4)
			 (mul-add (lf-noise2 kr 0.1) 0.1 0.1)
			 (lf-noise2 kr 0.1)
			 0)
	     0.2)))
]

As frequency control...


@racketblock[
(audition
 (out 0 (mul (sin-osc ar (mul-add (lin-cong-c ar
					      40 
					      (mul-add (lf-noise2 kr 0.1) 0.1 1.0)
					      (mul-add (lf-noise2 kr 0.1) 0.1 0.1)
					      (lf-noise2 kr 0.1)
					      0)
				  500 600) 0)
	     0.4)))
]


