# HG changeset patch # User Chris Cannam # Date 1355350922 0 # Node ID dc72a1d159013e529e0c7c80a28e5445be5034fd # Parent c5dc45708e74ab21f0f86c38180bb78d89218cf0 Add mixedDown, start framer diff -r c5dc45708e74 -r dc72a1d15901 audiofile.yeti --- 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 } diff -r c5dc45708e74 -r dc72a1d15901 floatrix.yeti --- 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? -> ~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, } diff -r c5dc45708e74 -r dc72a1d15901 framer.yeti --- /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)); + + + +{ } +