samer@0: % sinkmap - sink that applies arbitrart function before sending to subsink. samer@0: % samer@0: % sinkmap :: samer@0: % ([[C1,N]] -> [[C2,N]]) ~'function to tranform samples', samer@0: % (C2:natural -> C1:natural) ~'function to compute number of channels', samer@0: % sink(C2,R) samer@0: % -> sink(C1,R). samer@0: classdef sinkmap < sink samer@0: properties (GetAccess=private,SetAccess=immutable) samer@0: fun samer@0: dest samer@0: chans samer@0: end samer@0: methods samer@0: function s=sinkmap(f,chf,sig) samer@0: s.fun=f; samer@0: s.sig=sig; samer@0: s.chans=chf(channels(dest)); samer@0: end samer@0: samer@0: function c=channels(s), c=s.chans; end samer@0: function c=rate(s), c=rate(s.dest); end samer@0: function s=construct(sig) samer@0: samer@0: f=sig.fun; samer@0: s1=construct(sig.dest); samer@0: s.start = s1.start; samer@0: s.stop = s1.stop; samer@0: s.dispose = s1.dispose; samer@0: s.writer = @writer; samer@0: samer@0: function r=writer(n) samer@0: r1=s1.writer(n); samer@0: r =@(x)r1(f(x)); samer@0: end samer@0: end samer@0: function s=tostring(sig) samer@0: s=sprintf('map(%s,%s)',tostring(sig.fun),tostring(sig.dest)); samer@0: end samer@0: end samer@0: end samer@0: end