diff sinks/@sinkmap/sinkmap.m @ 0:672052bd81f8

Initial partial import.
author samer
date Wed, 19 Dec 2012 22:38:28 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sinks/@sinkmap/sinkmap.m	Wed Dec 19 22:38:28 2012 +0000
@@ -0,0 +1,42 @@
+% sinkmap - sink that applies arbitrart function before sending to subsink.
+%
+% sinkmap ::
+%    ([[C1,N]] -> [[C2,N]]) ~'function to tranform samples',
+%    (C2:natural -> C1:natural) ~'function to compute number of channels',
+%    sink(C2,R)
+% -> sink(C1,R).
+classdef sinkmap < sink
+	properties (GetAccess=private,SetAccess=immutable)
+		fun
+		dest
+		chans
+	end
+	methods
+		function s=sinkmap(f,chf,sig)
+			s.fun=f;
+			s.sig=sig;
+			s.chans=chf(channels(dest));
+		end
+
+		function c=channels(s), c=s.chans; end
+		function c=rate(s), c=rate(s.dest); end
+		function s=construct(sig)
+
+			f=sig.fun;
+			s1=construct(sig.dest);
+			s.start   = s1.start;
+			s.stop    = s1.stop;
+			s.dispose = s1.dispose;
+			s.writer  = @writer;
+
+			function r=writer(n)
+				r1=s1.writer(n);
+				r =@(x)r1(f(x));
+			end
+		end
+		function s=tostring(sig)
+			s=sprintf('map(%s,%s)',tostring(sig.fun),tostring(sig.dest));
+			end
+		end
+	end
+end