samer@34: % sonify_formant - sonify using formant synthesis samer@34: function Y=sonify_formant(Controllers,S,varargin) samer@34: samer@37: opts=options('bpm',240,'fs',11025,'buffer',0.125,'q',0.05,'cfilter',[],varargin{:}); samer@34: samer@34: CC = cellmap(@(f)f/opts.fs,Controllers); samer@34: f0 = window(map(@getf0,S)); samer@34: fx = window(map(@getfx,S)); samer@34: samer@34: if ~isempty(opts.cfilter) samer@34: f0 = filter(opts.cfilter{1},opts.cfilter{2},f0); samer@34: fx = filter(opts.cfilter{1},opts.cfilter{2},fx,[],2); samer@34: end samer@34: Y = formant_synth(256,opts.q,0.2,f0,fx); samer@34: samer@34: % rebuffer to constant size samer@34: if ~isempty(opts.buffer) samer@34: Y=windowdata(Y,ceil(opts.buffer*opts.fs)); samer@34: end samer@34: samer@34: function z=getf0(s),z=CC{s}(:,1)'; end samer@34: function z=getfx(s),z=CC{s}(:,2:end)'; end samer@34: end