Mercurial > hg > ishara
annotate signals/transfer.m @ 1:289445d368a7
import.
author | samer |
---|---|
date | Wed, 19 Dec 2012 22:46:05 +0000 |
parents | |
children | beb8a3f4a345 |
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@1 | 7 opts=prefs('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 |