daniele@182: %% Buffer function daniele@182: % Buffers the samples of the audio object into the columns of the matrix S daniele@182: % based on the input parameters daniele@182: %% daniele@166: function obj = buffer(obj,wLength,overlap,window,method) daniele@166: daniele@166: %% Check inputs & Defaults daniele@166: error(nargchk(2, 5, nargin, 'struct')); daniele@182: if rem(length(obj.s),wLength) daniele@192: % error('The wLength must be an integer divisor of the signal length!'); daniele@182: end daniele@166: if ~exist('overlap','var') || isempty(overlap), overlap = 0; end daniele@166: if ~exist('method','var') || isempty(method), method = 'standard'; end daniele@166: daniele@166: %% Buffer audio daniele@166: switch lower(method) daniele@166: case 'standard' daniele@166: if ~exist('window','var') || isempty(window), window = @rectwin; end daniele@166: validWindows = {'hanning','hamming','triang','rectwin'}; daniele@166: if ~sum(strcmpi(validWindows,func2str(window))); daniele@166: error('The window chosen is not valid because it cannot be inverted!'); daniele@166: end daniele@166: obj.S = diag(window(wLength))*buffer(obj.s,wLength,overlap,'nodelay'); daniele@182: % case 'lot' daniele@182: % if ~exist('window','var') || isempty(window), window = 'sin2'; end daniele@182: % s_lot = lot(obj.s,wLength,'id',overlap,window); daniele@182: % obj.S = buffer(s_lot,wLength); daniele@166: otherwise daniele@166: error('Please specify a valid buffer method'); daniele@166: end daniele@166: daniele@166: obj.bufferOperator = struct('wLength',wLength,'overlap',... daniele@166: overlap,'window',window,'method',method);