samer@34
|
1 % sonify_formant - sonify using formant synthesis
|
samer@34
|
2 function Y=sonify_formant(Controllers,S,varargin)
|
samer@34
|
3
|
samer@34
|
4 opts=prefs('bpm',240,'fs',11025,'buffer',0.125,'q',0.05,'cfilter',[],varargin{:});
|
samer@34
|
5
|
samer@34
|
6 CC = cellmap(@(f)f/opts.fs,Controllers);
|
samer@34
|
7 f0 = window(map(@getf0,S));
|
samer@34
|
8 fx = window(map(@getfx,S));
|
samer@34
|
9
|
samer@34
|
10 if ~isempty(opts.cfilter)
|
samer@34
|
11 f0 = filter(opts.cfilter{1},opts.cfilter{2},f0);
|
samer@34
|
12 fx = filter(opts.cfilter{1},opts.cfilter{2},fx,[],2);
|
samer@34
|
13 end
|
samer@34
|
14 Y = formant_synth(256,opts.q,0.2,f0,fx);
|
samer@34
|
15
|
samer@34
|
16 % rebuffer to constant size
|
samer@34
|
17 if ~isempty(opts.buffer)
|
samer@34
|
18 Y=windowdata(Y,ceil(opts.buffer*opts.fs));
|
samer@34
|
19 end
|
samer@34
|
20
|
samer@34
|
21 function z=getf0(s),z=CC{s}(:,1)'; end
|
samer@34
|
22 function z=getfx(s),z=CC{s}(:,2:end)'; end
|
samer@34
|
23 end
|