#lang racket
;; status - not working as of 20220820 (local soundfile)

(require rsc3)

;; tgb (rd)

(define mkls
  (lambda (bp t)
    (env-gen kr 1 1 0 1 remove-synth (env-bp-linear bp t 1))))

(define pm/t
  (lambda (l r d t)
    (let ((le (mkls l d))
          (re (mkls r d)))
      (t-rand le re t))))

(define wrp
  (lambda (i l r)
    (let ((m (fdiv (sub r l) 2)))
      (mul-add i m (add l m)))))

(define pm/n
  (lambda (rt l r d)
    (let ((le (mkls l d))
          (re (mkls r d)))
      (wrp (white-noise rt) le re))))

(define gb
  (lambda (b d)
    (let* ((gps (pm/n ar
                      (list 0 400 1 0900)
                      (list 0 600 1 1200)
                      d))
           (t (impulse ar gps 0))
           (dur (pm/t (list 0 0.005 0.5 0.015 1 0.005)
                      (list 0 0.009 0.5 0.020 1 0.009)
                      d
                      t))
           (pan (pm/t (list 0 -1.0 0.5 -0.5 1 0.5)
                      (list 0 -0.5 0.5 +0.5 1 1.0)
                      d
                      t))
           (rate (pm/t (list 0 06 0.5 12 1 06)
                       (list 0 12 0.5 12 1 12)
                       d
                       t))
           (cpos (pm/t (list 0 0 1 0.95)
                       (list 0 0 1 1.00)
                       d
                       t))
           (amp (pm/t (list 0 0.25 0.5 0.55 1.0 0.15)
                      (list 0 0.50 0.5 0.75 1.0 0.25)
                      d
                      t)))
      (t-grains 2 t b rate (mul cpos (buf-dur kr b)) dur pan amp 2))))

(define tgb
  (lambda (fn)
    (lambda (fd)
      (async fd (b-alloc-read 10 fn 0 0))
      (play fd (out 0 (gb 10 7))))))

(with-sc3 (tgb "/home/rohan/data/audio/pf-c5.snd"))