load "project3-demos.sal"
load "proj3.sal"
load "spectral-centroid.sal"

function sc-calc(filename, start, dur)
  begin
    ;; Extract sound from filename from start for dur seconds
    with snd = s-read(filename, time-offset: start, dur: dur),
         ;; compute the spectral centroid using 
         sc = spectral-centroid(fft-dur: 0.005, skip-period: 0.005, 
                                window: :hann, input: snd)
    ;; The following smooths out the spectral centroid. This is of course
    ;; optional. Smaller numbers make sc smoother (e.g. try 1)
    set sc = lowpass8(sc, 6)
    ;; plot the spectral centroid as a function of time. The second parameter
    ;; says to plot up to 20s of duration (the default is only 2s)
    exec s-plot(sc, 20)
    return sc
  end

set *sc* = sc-calc("./proj3input.wav", 0, 60) * 0.001

set *score-right* = {
               { 0 0 {score-begin-end 0 48} }
               { 0 1 {fminstr pitch: c4 im: *sc*} }
               { 1 1 {fminstr pitch: c4 im: *sc*} }
               { 2 1 {fminstr pitch: g4 im: *sc*} }
               { 3 1 {fminstr pitch: g4 im: *sc*} }
               { 4 1 {fminstr pitch: a4 im: *sc*} }
               { 5 1 {fminstr pitch: a4 im: *sc*} }
               { 6 2 {fminstr pitch: g4 im: *sc*} }
               { 8 1 {fminstr pitch: f4 im: *sc*} }
               { 9 1 {fminstr pitch: f4 im: *sc*} }
               { 10 1 {fminstr pitch: e4 im: *sc*} }
               { 11 1 {fminstr pitch: e4 im: *sc*} }
               { 12 1 {fminstr pitch: d4 im: *sc*} }
               { 13 1 {fminstr pitch: d4 im: *sc*} }
               { 14 2 {fminstr pitch: c4 im: *sc*} }
               { 16 1 {fminstr pitch: g4 im: *sc*} }
               { 17 1 {fminstr pitch: g4 im: *sc*} }
               { 18 1 {fminstr pitch: f4 im: *sc*} }
               { 19 1 {fminstr pitch: f4 im: *sc*} }
               { 20 1 {fminstr pitch: e4 im: *sc*} }
               { 21 1 {fminstr pitch: e4 im: *sc*} }
               { 22 2 {fminstr pitch: d4 im: *sc*} }
               { 24 1 {fminstr pitch: g4 im: *sc*} }
               { 25 1 {fminstr pitch: g4 im: *sc*} }
               { 26 1 {fminstr pitch: f4 im: *sc*} }
               { 27 1 {fminstr pitch: f4 im: *sc*} }
               { 28 1 {fminstr pitch: e4 im: *sc*} }
               { 29 1 {fminstr pitch: e4 im: *sc*} }
               { 30 2 {fminstr pitch: d4 im: *sc*} }
               { 32 1 {fminstr pitch: c4 im: *sc*} }
               { 33 1 {fminstr pitch: c4 im: *sc*} }
               { 34 1 {fminstr pitch: g4 im: *sc*} }
               { 35 1 {fminstr pitch: g4 im: *sc*} }
               { 36 1 {fminstr pitch: a4 im: *sc*} }
               { 37 1 {fminstr pitch: a4 im: *sc*} }
               { 38 2 {fminstr pitch: g4 im: *sc*} }
               { 40 1 {fminstr pitch: f4 im: *sc*} }
               { 41 1 {fminstr pitch: f4 im: *sc*} }
               { 42 1 {fminstr pitch: e4 im: *sc*} }
               { 43 1 {fminstr pitch: e4 im: *sc*} }
               { 44 1 {fminstr pitch: d4 im: *sc*} }
               { 45 1 {fminstr pitch: d4 im: *sc*} }
               { 46 2 {fminstr pitch: c4 im: *sc*} }}

set *score-left* = {  
               { 0 0 {score-begin-end 0 48} }  
               { 0 2 {fminstr pitch: c3 im: *sc*} }  
               { 2 2 {fminstr pitch: g3 im: *sc*} }  
               { 4 2 {fminstr pitch: f3 im: *sc*} }  
               { 6 2 {fminstr pitch: c3 im: *sc*} }  
               { 8 2 {fminstr pitch: f3 im: *sc*} }  
               { 10 2 {fminstr pitch: c3 im: *sc*} }  
               { 12 2 {fminstr pitch: g3 im: *sc*} }  
               { 14 2 {fminstr pitch: c3 im: *sc*} }  
               { 16 2 {fminstr pitch: g3 im: *sc*} }  
               { 18 2 {fminstr pitch: f3 im: *sc*} }  
               { 20 2 {fminstr pitch: c3 im: *sc*} }  
               { 22 2 {fminstr pitch: g3 im: *sc*} }  
               { 24 2 {fminstr pitch: g3 im: *sc*} }  
               { 26 2 {fminstr pitch: f3 im: *sc*} }  
               { 28 2 {fminstr pitch: c3 im: *sc*} }  
               { 30 2 {fminstr pitch: g3 im: *sc*} }  
               { 32 2 {fminstr pitch: c3 im: *sc*} }  
               { 34 2 {fminstr pitch: g3 im: *sc*} }  
               { 36 2 {fminstr pitch: f3 im: *sc*} }  
               { 38 2 {fminstr pitch: c3 im: *sc*} }  
               { 40 2 {fminstr pitch: f3 im: *sc*} }  
               { 42 2 {fminstr pitch: c3 im: *sc*} }  
               { 44 2 {fminstr pitch: g3 im: *sc*} }  
               { 46 2 {fminstr pitch: c3 im: *sc*} } }

play timed-seq(score-merge(*score-left*, *score-right*))


