changeset 8:dc72a1d15901

Add mixedDown, start framer
author Chris Cannam
date Wed, 12 Dec 2012 22:22:02 +0000
parents c5dc45708e74
children 1c5b70c79859
files audiofile.yeti floatrix.yeti framer.yeti
diffstat 3 files changed, 46 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/audiofile.yeti	Wed Dec 12 17:12:34 2012 +0000
+++ b/audiofile.yeti	Wed Dec 12 22:22:02 2012 +0000
@@ -79,7 +79,13 @@
     mat.deinterleaved channels doubles;
    );
 
-//!!! these need to reset first (and there needs to be a reset function!)
+readMono { format is ~AudioFormat, stream is ~AudioInputStream } n =
+   (doubles = readInterleaved { format, stream } n;
+    channels = format#getChannels();
+    mat.mixedDown channels doubles;
+   );
+
+//!!! need to read only remaining, not whole stream length
 
 readAllInterleaved { format is ~AudioFormat, stream is ~AudioInputStream } =
    readInterleaved { format, stream } stream#getFrameLength();
@@ -87,12 +93,17 @@
 readAll { format is ~AudioFormat, stream is ~AudioInputStream } =
    read { format, stream } stream#getFrameLength();
 
+readAllMono { format is ~AudioFormat, stream is ~AudioInputStream } =
+   readMono { format, stream } stream#getFrameLength();
+
 {
     open,
     read,
     readAll,
     readInterleaved,
     readAllInterleaved,
+    readMono,
+    readAllMono,
     close
 }
 
--- a/floatrix.yeti	Wed Dec 12 17:12:34 2012 +0000
+++ b/floatrix.yeti	Wed Dec 12 22:22:02 2012 +0000
@@ -3,6 +3,13 @@
 zeros n = new double[n];
 ones  n = (a = zeros n; for [0..n-1] do i: a[i] := 1.0 done; a);
 
+vector l is list?<number> -> ~double[] =
+   (arr = array(l);
+    len = length arr;
+    v = new double[len];
+    for [0..len-1] do i: n = arr[i]; v[i] := n done;
+    v);
+
 zeroMatrix rows cols = array (map \(zeros cols) [1..rows]);
 
 generateMatrix f rows cols =
@@ -46,15 +53,26 @@
     done;
     v);
 
-deinterleaved rows v is number -> ~double[] -> 'a =
+deinterleaved rows v is number -> ~double[] -> array<~double[]> =
     generateMatrix do row col:
         v[rows * col + row]
     done rows (length (arrayWrap v) / rows);
 
+    //!!! too inefficient!
+mixedDown rows v is number -> ~double[] -> ~double[] =
+   (cols = (length (arrayWrap v) / rows);
+    mv = new double[cols];
+    for [0..cols-1] do col:
+        val = sum (map do row: v[col * rows + row] done [0..rows-1]) / rows;
+        mv[col] := val;
+    done;
+    mv);
+
 {
-zeros, ones,
+zeros, ones, vector,
 generateMatrix, constMatrix, randomMatrix, zeroMatrix, identityMatrix,
 width, cols, height, rows, dimensions,
 transposed, interleaved, deinterleaved,
+mixedDown,
 }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/framer.yeti	Wed Dec 12 22:22:02 2012 +0000
@@ -0,0 +1,14 @@
+
+module framer;
+
+af = load audiofile;
+
+
+
+retrieveFrame blocksize filename =
+   (f = af.open filename; \(af.read f blocksize));
+
+
+
+{ }
+