daniele@182
|
1 %% Buffer function
|
daniele@182
|
2 % Buffers the samples of the audio object into the columns of the matrix S
|
daniele@182
|
3 % based on the input parameters
|
daniele@182
|
4 %%
|
daniele@166
|
5 function obj = buffer(obj,wLength,overlap,window,method)
|
daniele@166
|
6
|
daniele@166
|
7 %% Check inputs & Defaults
|
daniele@166
|
8 error(nargchk(2, 5, nargin, 'struct'));
|
daniele@182
|
9 if rem(length(obj.s),wLength)
|
daniele@192
|
10 % error('The wLength must be an integer divisor of the signal length!');
|
daniele@182
|
11 end
|
daniele@166
|
12 if ~exist('overlap','var') || isempty(overlap), overlap = 0; end
|
daniele@166
|
13 if ~exist('method','var') || isempty(method), method = 'standard'; end
|
daniele@166
|
14
|
daniele@166
|
15 %% Buffer audio
|
daniele@166
|
16 switch lower(method)
|
daniele@166
|
17 case 'standard'
|
daniele@166
|
18 if ~exist('window','var') || isempty(window), window = @rectwin; end
|
daniele@166
|
19 validWindows = {'hanning','hamming','triang','rectwin'};
|
daniele@166
|
20 if ~sum(strcmpi(validWindows,func2str(window)));
|
daniele@166
|
21 error('The window chosen is not valid because it cannot be inverted!');
|
daniele@166
|
22 end
|
daniele@166
|
23 obj.S = diag(window(wLength))*buffer(obj.s,wLength,overlap,'nodelay');
|
daniele@182
|
24 % case 'lot'
|
daniele@182
|
25 % if ~exist('window','var') || isempty(window), window = 'sin2'; end
|
daniele@182
|
26 % s_lot = lot(obj.s,wLength,'id',overlap,window);
|
daniele@182
|
27 % obj.S = buffer(s_lot,wLength);
|
daniele@166
|
28 otherwise
|
daniele@166
|
29 error('Please specify a valid buffer method');
|
daniele@166
|
30 end
|
daniele@166
|
31
|
daniele@166
|
32 obj.bufferOperator = struct('wLength',wLength,'overlap',...
|
daniele@166
|
33 overlap,'window',window,'method',method);
|