Mercurial > hg > may
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, }