annotate util/classes/@audio/buffer.m @ 188:2f5ce7c8792a danieleb

removed check for wLength as not necessary.
author daniele@danieleb.com
date Wed, 15 Feb 2012 11:02:45 +0100
parents f8bc99a5470c
children 82b0d3f982cb
rev   line source
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@188 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);