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