Mercurial > hg > may
changeset 12:2afcb56f57b1
Add (rather clumsy) overlapping framer
author | Chris Cannam |
---|---|
date | Thu, 13 Dec 2012 16:21:07 +0000 |
parents | ed031bfa8184 |
children | 5da01c5a5e1f |
files | framer.yeti fvector.yeti |
diffstat | 2 files changed, 19 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- 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 }
--- 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, }