Mercurial > hg > may
changeset 47:f24e0bf01dda
Replace tagged-type block with an opaque type implementation
author | Chris Cannam |
---|---|
date | Sat, 29 Dec 2012 15:36:05 +0000 |
parents | 00b604d7faf9 |
children | f97abcda094f |
files | block.yeti channels.yeti fft.yeti framer.yeti |
diffstat | 4 files changed, 43 insertions(+), 53 deletions(-) [+] |
line wrap: on
line diff
--- a/block.yeti Sat Dec 29 14:36:13 2012 +0000 +++ b/block.yeti Sat Dec 29 15:36:05 2012 +0000 @@ -1,47 +1,41 @@ + module block; vec = load fvector; -zeros = Block . vec.zeros; -consts m = Block . (vec.consts m); -ones = Block . vec.ones; - -block v is ~double[] -> (Block ~double[]) = - Block v; - -unblock b is (Block ~double[]) -> ~double[] = - case b of Block a: a esac; - -fromList l = - block (vec.vector l); - -list' b = vec.list (unblock b); -length' b = vec.length (unblock b); - -equal b1 b2 = - list' b1 == list' b2; - -copyOf b = - Block (vec.copyOf (unblock b)); - -rangeOf b start len = - Block (vec.rangeOf (unblock b) start len); - -resizedTo n b = - Block (vec.resizedTo n (unblock b)); - -concat blocks = - Block (vec.concat (map unblock blocks)); +typedef opaque block = ~double[]; { -zeros, consts, ones, -block, unblock, -fromList, -length = length', -list = list', -equal, -copyOf, rangeOf, resizedTo, -concat, +zeros = vec.zeros, +consts = vec.consts, +ones = vec.ones, +block v = v, +data b = b, +vector b = vec.copyOf b, +fromList l = vec.vector l, +list = vec.list, +length = vec.length, +equal = vec.equal, +copyOf = vec.copyOf, +rangeOf = vec.rangeOf, +resizedTo = vec.resizedTo, +concat = vec.concat, +} as { +zeros is number -> block, +consts is number -> number -> block, +ones is number -> block, +block is ~double[] -> block, +data is block -> ~double[], +vector is block -> ~double[], +fromList is list?<number> -> block, +list is block -> list<number>, +length is block -> number, +equal is block -> block -> boolean, +copyOf is block -> block, +rangeOf is block -> number -> number -> block, +resizedTo is number -> block -> block, +concat is list?<block> -> block, } +
--- a/channels.yeti Sat Dec 29 14:36:13 2012 +0000 +++ b/channels.yeti Sat Dec 29 15:36:05 2012 +0000 @@ -16,7 +16,7 @@ block.block v); deinterleaved rows b = - (v = block.unblock b; + (v = block.data b; mat.generate do row col: v[rows * col + row] done rows ((vec.length v) / rows)); @@ -34,7 +34,7 @@ fi); mixedDownFromInterleaved rows b = - (v = block.unblock b; + (v = block.data b; cols = ((vec.length v) / rows); v' = vec.zeros cols; for [0..rows-1] do row: @@ -50,7 +50,7 @@ elif targetRows == 1 then mixedDownFromInterleaved rows b; else - v = block.unblock b; + v = block.data b; cols = ((vec.length v) / rows); v' = vec.zeros (cols * targetRows); for [0..targetRows-1] do target:
--- a/fft.yeti Sat Dec 29 14:36:13 2012 +0000 +++ b/fft.yeti Sat Dec 29 15:36:05 2012 +0000 @@ -19,7 +19,7 @@ fft n = (d = new DoubleFFT_1D(n); do bl: - v = b.unblock (b.copyOf bl); + v = b.vector bl; d#realForward(v); unpack v; done);
--- a/framer.yeti Sat Dec 29 14:36:13 2012 +0000 +++ b/framer.yeti Sat Dec 29 15:36:05 2012 +0000 @@ -6,7 +6,6 @@ * overlapping) frames of mono data. */ -vec = load fvector; block = load block; af = load audiofile; @@ -18,18 +17,16 @@ :. \(blockList framesize stream); fi; -overlappingBlockList size hop stream valid buffer - is number -> number -> 'a -> number -> ~double[] -> 'b = +overlappingBlockList size hop stream valid buffer = ( b = stream.readMono hop; obtained = block.length b; - samples = block.unblock b; // Retain framesize - hop samples from old buffer, add hop samples // (zero-padded if necessary) just read - buffer = vec.concat - [vec.rangeOf buffer hop (size-hop), - vec.resizedTo hop samples]; + buffer = block.concat + [block.rangeOf buffer hop (size-hop), + block.resizedTo hop b]; // Number of "valid" elements (not tail-end zero-padding) left in buffer remaining = valid - (hop - obtained); @@ -38,8 +35,7 @@ stream.close (); []; else - v = block.block buffer; - v :. \(overlappingBlockList size hop stream remaining buffer); + buffer :. \(overlappingBlockList size hop stream remaining buffer); fi); frames { framesize, hop } stream = @@ -47,7 +43,7 @@ blockList framesize stream else overlappingBlockList framesize hop stream - framesize (vec.zeros framesize); + framesize (block.zeros framesize); fi; framesOfFile { framesize, hop } filename = @@ -55,7 +51,7 @@ blockList framesize (af.open filename) else overlappingBlockList framesize hop (af.open filename) - framesize (vec.zeros framesize); + framesize (block.zeros framesize); fi; {