rsc3/doc/examples/graph/bowed-string.rkt

30 lines
892 B
Racket

#lang racket
;; status - working as of 20220820
(require rsc3)
;; bowed string (jmcc)
(define series
(lambda (f n x i)
(if (= n 0)
null
(cons x (series f (- n 1) (f x i) i)))))
(define bowed-string
(let* ((root 5)
(scale (map (lambda (n) (+ n root)) (list 0 2 4 5 7 9 11)))
(oct (list 24 36 48 60 72 84))
(choose (lambda (l) (select (i-rand 0 (length l)) (make-mce l))))
(f (midi-cps (add (choose scale) (choose oct))))
(n0 (clone 2 (brown-noise ar)))
(r0 (exp-rand 0.125 0.5))
(n1 (lf-noise1 kr r0))
(r1 (rand 0.7 0.9))
(r2 (replicate-m 12 (rand 1.0 3.0)))
(x (mul3 n0 0.007 (u:max 0 (mul-add n1 0.6 0.4))))
(d (klank-data (series add 12 f f) (series mul 12 1 r1) r2))
(k (klank x 1 0 1 d)))
(soft-clip (mul k 0.1))))
(audition (out 0 bowed-string))