annotate signals/transfer.m @ 61:eff6bddf82e3 tip

Finally implemented perceptual brightness thing.
author samer
date Sun, 11 Oct 2015 10:20:42 +0100
parents beb8a3f4a345
children
rev   line source
samer@1 1 % transfer - Transfer samples from a signal to a sink
samer@1 2 %
samer@1 3 % transfer :: signal(C,R), sink(C,R) -> action natural.
samer@1 4 %
samer@1 5 % Returns the number of samples transfered.
samer@1 6 function n=transfer(sig,sink,varargin)
samer@37 7 opts=options('chunk',512,varargin{:});
samer@1 8 chunk=uint32(opts.chunk);
samer@1 9
samer@1 10 u=construct(sink);
samer@1 11 try
samer@1 12 write=u.writer(chunk);
samer@1 13 s=construct(sig);
samer@1 14 try % to make sure we dispose of s once opened
samer@1 15 n=uint32(0); CHUNK=1:chunk;
samer@1 16 x=zeros(channels(sig),chunk); % buffer
samer@1 17 r=s.reader(opts.chunk);
samer@1 18 rem=0;
samer@1 19 s.start();
samer@1 20 u.start();
samer@1 21 while rem==0
samer@1 22 [x,rem]=r();
samer@1 23 if rem==0, rem=write(x);
samer@1 24 else rem=rem+write(x(:,1:end-rem));
samer@1 25 end
samer@1 26 n=n+(chunk-rem);
samer@1 27 end
samer@1 28 u.stop();
samer@1 29 s.stop();
samer@1 30 catch ex
samer@1 31 s.dispose();
samer@1 32 rethrow(ex);
samer@1 33 end
samer@1 34 catch ex
samer@1 35 u.dispose();
samer@1 36 rethrow(ex);
samer@1 37 end
samer@1 38
samer@1 39 s.dispose();
samer@1 40 u.dispose();
samer@1 41 end