samer@0: function u=construct(s,sizes_in) samer@0: src=construct(s.source); samer@0: ch=channels(s.source); samer@0: samer@0: span=s.block; samer@0: jump=s.hop; samer@0: olap=span-jump; samer@0: rdr=src.reader(jump); samer@0: samer@0: if olap>0 samer@0: buf=[zeros(ch,jump),sigreadn(src,olap)]; % preload with overlap samer@0: OL1=1:olap; samer@0: OL=(jump+1):span; samer@0: HOP=(olap+1):span; samer@0: process=@proc; samer@0: fprintf(' Using signal reader with overlap=%d.\n',olap); samer@0: else samer@0: process=@proc0; samer@0: fprintf(' Using zero-overlap signal reader.\n'); samer@0: end samer@0: samer@0: u=mkunit(s); samer@0: u.starting = src.start; samer@0: u.stopping = src.stop; samer@0: u.dispose = src.dispose; samer@0: u.process = process; samer@0: u.sizes_out = {[ch,span]}; samer@0: samer@0: function out=proc0, samer@0: [out,rem]=rdr(); samer@0: if rem>0, error('ARROW:EOF','End of stream'); end samer@0: end samer@0: samer@0: function out=proc, samer@0: buf(:,OL1)=buf(:,OL); % copy overlap from end of buf to head samer@0: [buf(:,HOP),rem]=rdr(); samer@0: if rem>0, error('ARROW:EOF','End of stream'); end samer@0: %out=[buf,chunk]; samer@0: out=buf; samer@0: end samer@0: samer@0: % old version samer@0: function out=proc1, samer@0: [chunk,rem]=rdr(); samer@0: if rem>0, error('ARROW:EOF','End of stream'); end samer@0: out=[buf,chunk]; samer@0: buf=out(:,OL); samer@0: end samer@0: end