# HG changeset patch # User Chris Cannam # Date 1368269204 -3600 # Node ID c4f4e8def0aa64e61c532001d569e854c3d90a58 # Parent 709fba377099d370ddd4dd89198312a8d5d064b6 Update channels diff -r 709fba377099 -r c4f4e8def0aa yetilab/stream/channels.yeti --- a/yetilab/stream/channels.yeti Sat May 11 11:39:09 2013 +0100 +++ b/yetilab/stream/channels.yeti Sat May 11 11:46:44 2013 +0100 @@ -3,6 +3,15 @@ vec = load yetilab.block.vector; mat = load yetilab.matrix.matrix; + +load yetilab.block.vectortype; + +//!!! "internal" vector function to retrieve data for read-only +// purposes without copying +//!!! need to have this in some internal-use module +raw = + (raw' v is ~double[] -> ~double[] = v; + raw' as vector -> ~double[]); interleaved m = ({ columns, rows } = (mat.size m); @@ -24,7 +33,7 @@ else rows = (vec.length b) / channels; vv = array (map \(new double[rows]) [0..channels-1]); - v = vec.data b; + v = raw b; for [0..rows-1] do row: for [0..channels-1] do col: vv[col][row] := v[channels * row + col]; @@ -47,8 +56,8 @@ if channels == 1 then b; else - v = vec.data b; - columns = ((vec.length v) / channels); + columns = ((vec.length b) / channels); + v = raw b; v' = new double[columns]; for [0..channels-1] do row: for [0..columns-1] do col: @@ -64,8 +73,8 @@ elif targetChannels == 1 then mixedDownFromInterleaved channels b; else - v = vec.data b; - columns = ((vec.length v) / channels); + columns = ((vec.length b) / channels); + v = raw b; v' = new double[columns * targetChannels]; for [0..targetChannels-1] do target: for [0..columns-1] do col: