# HG changeset patch # User Chris Cannam # Date 1355415667 0 # Node ID 2afcb56f57b11e42b3ea924197a06a79b9f0dcf8 # Parent ed031bfa8184579eff8d46213772f1611df201c8 Add (rather clumsy) overlapping framer diff -r ed031bfa8184 -r 2afcb56f57b1 framer.yeti --- a/framer.yeti Thu Dec 13 13:52:41 2012 +0000 +++ b/framer.yeti Thu Dec 13 16:21:07 2012 +0000 @@ -4,6 +4,19 @@ vec = load fvector; af = load audiofile; +flist2 blocksize hopsize file saved is number -> number -> 'a -> ~double[] -> 'b = + if af.finished? file then + (af.close file; [] ); //!!! wrong! need unit tests! need to read from any stream, not only a file, to facilitate that + else + block = af.readMono file blocksize; + blen = vec.vectorLength block; + for [0..blen-1] do i: saved[hopsize + i] := block[i] done; + for [blen..blocksize-1] do i: saved[hopsize + i] := 0.0 done; + v = vec.subVector saved 0 blocksize; + for [0..blocksize-1] do i: saved[i] := saved[i + hopsize] done; + v :. \(flist2 blocksize hopsize file saved); + fi; + flist blocksize file = if af.finished? file then (af.close file; [] ); @@ -11,9 +24,11 @@ af.readMono file blocksize :. \(flist blocksize file); fi; +overlappingFrames blocksize hopsize filename = flist2 blocksize hopsize (af.open filename) (new double[blocksize + hopsize]); + frames blocksize filename = flist blocksize (af.open filename); { - frames + frames, overlappingFrames } diff -r ed031bfa8184 -r 2afcb56f57b1 fvector.yeti --- a/fvector.yeti Thu Dec 13 13:52:41 2012 +0000 +++ b/fvector.yeti Thu Dec 13 16:21:07 2012 +0000 @@ -18,9 +18,11 @@ copyOfVector v is ~double[] -> ~double[] = Arrays#copyOf(v, length(arrayWrap v)); +subVector v start len is ~double[] -> number -> number -> ~double[] = Arrays#copyOfRange(v, start, start + len); + { zeros, ones, vector, vectorLength, -copyOfVector, +copyOfVector, subVector, }