Chris@8: Chris@8: module framer; Chris@8: Chris@11: vec = load fvector; Chris@8: af = load audiofile; Chris@8: Chris@12: flist2 blocksize hopsize file saved is number -> number -> 'a -> ~double[] -> 'b = Chris@12: if af.finished? file then Chris@12: (af.close file; [] ); //!!! wrong! need unit tests! need to read from any stream, not only a file, to facilitate that Chris@12: else Chris@12: block = af.readMono file blocksize; Chris@12: blen = vec.vectorLength block; Chris@12: for [0..blen-1] do i: saved[hopsize + i] := block[i] done; Chris@12: for [blen..blocksize-1] do i: saved[hopsize + i] := 0.0 done; Chris@12: v = vec.subVector saved 0 blocksize; Chris@12: for [0..blocksize-1] do i: saved[i] := saved[i + hopsize] done; Chris@12: v :. \(flist2 blocksize hopsize file saved); Chris@12: fi; Chris@12: Chris@11: flist blocksize file = Chris@11: if af.finished? file then Chris@11: (af.close file; [] ); Chris@11: else Chris@11: af.readMono file blocksize :. \(flist blocksize file); Chris@11: fi; Chris@8: Chris@12: overlappingFrames blocksize hopsize filename = flist2 blocksize hopsize (af.open filename) (new double[blocksize + hopsize]); Chris@12: Chris@11: frames blocksize filename = flist blocksize (af.open filename); Chris@8: Chris@11: { Chris@12: frames, overlappingFrames Chris@11: } Chris@8: