rsc3/doc/examples/graph/dial-history.rkt

45 lines
1.3 KiB
Racket

#lang racket
;; status - working as of 20220820
(require rsc3)
;; dial history (jrhb)
(define range
(lambda (s l r)
(lin-lin s 0 1 l r)))
(define mce-r
(lambda (l)
(make-mce (map make-mce l))))
(define mce-mrg
(lambda (u)
(mrg-n (mce-channels u))))
(define dial-history
(let* ((mfv (transpose (list (list 697 770 852 941)
(list 1209 1336 1477 1633))))
(numbers (transpose (list (list 3 0 0 0 1 1 1 2 2 2)
(list 1 0 1 2 0 1 2 0 1 2))))
(n (dwhite dinf 7 12))
(w (dwhite 1 2 7))
(b (dbrown n 0.1 0.2 0.01))
(rt (dseq dinf (mce2 w b)))
(q (dseq dinf (make-mce (enum-from-to 1 10))))
(g1 (gray-noise ar))
(g2 (gray-noise ar))
(d (lfd-noise3 kr 0.5))
(tr (trig (t-duty kr rt 0 do-nothing q 1) 0.09))
(pat (latch tr tr))
(x (mouse-x* kr 0 1 linear 0.2))
(h (hasher (mul pat x)))
(which (trunc (range h 0 (length numbers)) 1))
(both (select which (mce-r numbers)))
(dial (select both (mce-r mfv)))
(sig (mul3 (sin-osc ar dial 0) 0.05 tr))
(dsig (delay-n sig 0.2 (range d 0 0.01)))
(hiss (mul-add g1 0.01 (hpf (mul g2 0.02) 3000))))
(add dsig hiss)))
(audition (out 0 dial-history))