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,
 }