Mercurial > hg > may
annotate framer.yeti @ 12:2afcb56f57b1
Add (rather clumsy) overlapping framer
author | Chris Cannam |
---|---|
date | Thu, 13 Dec 2012 16:21:07 +0000 |
parents | ed031bfa8184 |
children | 5da01c5a5e1f |
rev | line source |
---|---|
Chris@8 | 1 |
Chris@8 | 2 module framer; |
Chris@8 | 3 |
Chris@11 | 4 vec = load fvector; |
Chris@8 | 5 af = load audiofile; |
Chris@8 | 6 |
Chris@12 | 7 flist2 blocksize hopsize file saved is number -> number -> 'a -> ~double[] -> 'b = |
Chris@12 | 8 if af.finished? file then |
Chris@12 | 9 (af.close file; [] ); //!!! wrong! need unit tests! need to read from any stream, not only a file, to facilitate that |
Chris@12 | 10 else |
Chris@12 | 11 block = af.readMono file blocksize; |
Chris@12 | 12 blen = vec.vectorLength block; |
Chris@12 | 13 for [0..blen-1] do i: saved[hopsize + i] := block[i] done; |
Chris@12 | 14 for [blen..blocksize-1] do i: saved[hopsize + i] := 0.0 done; |
Chris@12 | 15 v = vec.subVector saved 0 blocksize; |
Chris@12 | 16 for [0..blocksize-1] do i: saved[i] := saved[i + hopsize] done; |
Chris@12 | 17 v :. \(flist2 blocksize hopsize file saved); |
Chris@12 | 18 fi; |
Chris@12 | 19 |
Chris@11 | 20 flist blocksize file = |
Chris@11 | 21 if af.finished? file then |
Chris@11 | 22 (af.close file; [] ); |
Chris@11 | 23 else |
Chris@11 | 24 af.readMono file blocksize :. \(flist blocksize file); |
Chris@11 | 25 fi; |
Chris@8 | 26 |
Chris@12 | 27 overlappingFrames blocksize hopsize filename = flist2 blocksize hopsize (af.open filename) (new double[blocksize + hopsize]); |
Chris@12 | 28 |
Chris@11 | 29 frames blocksize filename = flist blocksize (af.open filename); |
Chris@8 | 30 |
Chris@11 | 31 { |
Chris@12 | 32 frames, overlappingFrames |
Chris@11 | 33 } |
Chris@8 | 34 |