samer@34: function Y=specsynth(S,gen,N,M) samer@34: % specsynth - Spectral synthesis by FIR filtering white noise samer@34: % samer@34: % specsynth :: samer@34: % seq([[L]]) ~'sequence of L-point power spectra', samer@34: % (N:natural=>[[1,N]]) ~'generator of noise buffers', samer@34: % N:natural ~'size of buffers of noise signals to take' samer@34: % M:natural ~'frame overlap' samer@34: % -> seq([[1,M]]) ~'sequence of signal buffers'. samer@34: samer@34: % NOTE: this should really take gen to be seq natural -> seq [[1,_]] samer@34: % eg samer@34: % gen = @(n)rndzip(sampler(gaussian),n,getrndstate) samer@34: % this should be the basic type of a buffered signal generator samer@34: samer@34: if nargin<4, M=N; end samer@34: U=rndmap(gen,repeat(N),getrndstate); samer@34: Y=unbuffer(zipwith(@conv,map(@(s)spec2fir(sqrt(s)),S),U),M);