changeset 29:3b237a05e785

Simplify framer
author Chris Cannam
date Thu, 20 Dec 2012 23:17:08 +0000
parents 7c1f0996b1f7
children 45a57e2fb4ae
files framer.yeti
diffstat 1 files changed, 8 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/framer.yeti	Thu Dec 20 23:11:13 2012 +0000
+++ b/framer.yeti	Thu Dec 20 23:17:08 2012 +0000
@@ -20,16 +20,16 @@
 
 overlappingBlockList bs hop stream valid buffer
     is number -> number -> 'a -> number -> ~double[] -> 'b =
-   (b = stream.readMono hop;
+   (
+    b = stream.readMono hop;
     obtained = block.length b;
     samples = block.unblock b;
 
-    // Shift existing buffer down by hop
-    for [hop..bs-1] do i: buffer[i-hop] := buffer[i] done;
-
-    // Copy hop new elements in from samples (and extra zeros if needed)
-    for [0..obtained-1] do i: buffer[bs-hop+i] := samples[i] done;
-    for [obtained..hop-1] do i: buffer[bs-hop+i] := 0.0 done;
+    // Retain blocksize - hop samples from old buffer, add hop samples
+    // (zero-padded if necessary) just read
+    buffer = vec.concat
+       (vec.rangeOf buffer hop (bs-hop))
+       (vec.resizedTo hop samples);
 
     // Number of "valid" elements (not tail-end zero-padding) left in buffer
     remaining = valid - (hop - obtained);
@@ -38,8 +38,7 @@
         stream.close ();
         [];
     else
-        // Copy buffer to return
-        v = block.block (vec.copyOf buffer);
+        v = block.block buffer;
         v :. \(overlappingBlockList bs hop stream remaining buffer);
     fi);