annotate signals/@sigcat/sigcat.m @ 61:eff6bddf82e3 tip

Finally implemented perceptual brightness thing.
author samer
date Sun, 11 Oct 2015 10:20:42 +0100
parents 289445d368a7
children
rev   line source
samer@1 1 classdef sigcat < sigbase
samer@1 2 properties (GetAccess=private, SetAccess=immutable)
samer@1 3 signals
samer@1 4 end
samer@1 5 methods
samer@1 6 function s=sigcat(varargin)
samer@1 7 fs=foldl(@unify_rates,nan,map(@rate,varargin));
samer@1 8 if isinf(fs), error('sampling rate mismatch'); end
samer@1 9 ch=foldl(@unify_channels,nan,map(@channels,varargin));
samer@1 10 if isinf(ch), error('channel count mismatch'); end
samer@1 11 s=s@sigbase(ch,fs);
samer@1 12 s.signals=varargin;
samer@1 13 end
samer@1 14
samer@1 15 function s=tostring(sig)
samer@1 16 n=length(sig.signals);
samer@1 17 strx=map(@tostring,sig.signals);
samer@1 18 if n==1, s=strx{1};
samer@1 19 elseif n==2, s=sprintf('%s & %s',strx{1},strx{2});
samer@1 20 else s=sprintf('sigcat(%s,...)',strx{1});
samer@1 21 end
samer@1 22 end
samer@1 23
samer@1 24 function s=construct(sig)
samer@1 25 sc=construct(sig.signals{1});
samer@1 26 sx=sig.signals(2:end);
samer@1 27
samer@1 28 s.start = @start;
samer@1 29 s.stop = @stop;
samer@1 30 s.dispose = @dispose;
samer@1 31 s.reader = @reader;
samer@1 32
samer@1 33 function start, sc.start(); end
samer@1 34 function stop, sc.stop(); end
samer@1 35 function dispose, sc.dispose(); end
samer@1 36
samer@1 37 function r=reader(n)
samer@1 38 rc=sc.reader(n);
samer@1 39 r = @next;
samer@1 40 function [x,rem]=next
samer@1 41 [x,rem]=rc();
samer@1 42 while rem>0 && ~isempty(sx) % current signal exhausted, try next
samer@1 43 sc.dispose();
samer@1 44 sc=construct(sx{1}); sx=sx(2:end);
samer@1 45 [x(:,end-rem+1:end),rem]=sigreadn(sc,rem);
samer@1 46 rc=sc.reader(n);
samer@1 47 end
samer@1 48 end
samer@1 49 end
samer@1 50 end
samer@1 51 end
samer@1 52 end