;; rbd-render.sal -- play with portrait data
;;

load "upic"
load "rbd-upic" ;; the data
load "reverb"

function change-upic-data(data, waveform, envelope)
  begin with rslt
    loop
      for curve in data
      set rslt @= cons(waveform, cons(envelope, rest(rest(curve))))
    end
    return rslt 
  end


set upic-table = simrep(i, 10, build-harmonic(i + 1, 2048) * (1.0 / (i + 2)))
set upic-table = list(upic-table, hz-to-step(1.0), t)

define function rbd-env()
  return env(0.2, 0.05, 0.8, 1, 1, 3)

exec autonorm-off()

define function render()
  begin 
    with snd = seq(upic(change-upic-data(rbd, quote(upic-table),
                                         quote(rbd-env))) ~ 3,
                   s-rest(3))
    set snd = eq-lowshelf(snd, 200, 12)
    set snd = eq-lowshelf(snd, 50, 6)
    set snd = eq-highshelf(snd, 2000, 6)
    ;set snd = snd * pwlv(1, 23.6, 1, 34.4, 0.3, 37.5, 0.1, 40, 0)
    set snd = snd + reverb(snd, 1.0) * 0.4
    set snd = pan(snd, pwlv(0.2, 40, 0.8))
    return snd * 0.01
  end

play render()
