load "spectral-centroid.sal"
load "reverb"

function fminstr (pitch: e4, im: const(0, 1))
  return fmosc(pitch, step-to-hz(pitch) * im * osc((pitch))) * pwl(0, 0.2, 0.25, 0.5, 0.5, 0.2, 0.75, 1.0, 1.0)

function compute(filename, start, dur)
  begin
    with snd = s-read(filename, time-offset: start, dur: dur),
         sc = spectral-centroid(fft-dur: 0.005, skip-period: 0.005, 
                                window: :hamming, input: snd)
    
    return lowpass8(sc, 5) 
  end

variable *sc* = 0.008 * compute("./proj3input.wav", 1, 31) * pwl(0, 0.72, 1, 0.52, 2, 0.16, 3, 0.29, 4, 0.7, 5, 0.83, 6, 0.14, 7, 0.87, 8, 0.68, 9, 0.74, 10, 0.71, 11, 0.45, 12, 0.33, 13, 0.43, 14, 0.84, 15, 0.77, 16, 0.48, 17, 0.36, 18, 0.89, 19, 0.56, 20, 0.26, 21, 0.89, 22, 0.46, 23, 0.64, 24, 0.58, 25, 0.32, 26, 0.28, 27, 0.32, 28, 0.9, 29, 0.98, 30, 0.83, 31, 0.2, 40, 0.0)
plot(*sc*)

function myreverb(s) return reverb(s, 15.0) 



play hp(myreverb(reson(seq(
fminstr(pitch: c3, im: *sc*),
fminstr(pitch: ef3, im: *sc*),
fminstr(pitch: g3, im: *sc*),
fminstr(pitch: a3, im: *sc*),
fminstr(pitch: a3, im: *sc*),
fminstr(pitch: g3, im: *sc*),
fminstr(pitch: bf3, im: *sc*),
fminstr(pitch: d3, im: *sc*),
fminstr(pitch: f3, im: *sc*),
fminstr(pitch: c4, im: *sc*),
fminstr(pitch: c4, im: *sc*),
fminstr(pitch: a3, im: *sc*),
fminstr(pitch: a3, im: *sc*),
fminstr(pitch: a3, im: *sc*),
fminstr(pitch: f2, im: *sc*),
fminstr(pitch: g3, im: *sc*),
fminstr(pitch: af3, im: *sc*),
fminstr(pitch: g3, im: *sc*),
fminstr(pitch: d3, im: *sc*),
fminstr(pitch: d3, im: *sc*),
fminstr(pitch: ds3, im: *sc*),
fminstr(pitch: d3, im: *sc*),
fminstr(pitch: c3, im: *sc*),
fminstr(pitch: af2, im: *sc*),
fminstr(pitch: g3, im: *sc*),
fminstr(pitch: ef3, im: *sc*),
fminstr(pitch: ef4, im: *sc*),
fminstr(pitch: a3, im: *sc*),
fminstr(pitch: bf3, im: *sc*),
fminstr(pitch: a3, im: *sc*),
fminstr(pitch: d3, im: *sc*),
fminstr(pitch: d3, im: *sc*),
fminstr(pitch: d3, im: *sc*)), step-to-hz(d4), step-to-hz(d2))), 200)

