function r = sfftwav(wavfile) %% settings spectrumwidth = 196; spectrumkeep = 64; normcutoff = 5; % get ready [numsamples numchannels] = wavread(wavfile,'size'); samplespersecond = 44100; chunkspersecond = 30; samplesperchunk = samplespersecond / chunkspersecond; numchunks = numsamples / samplesperchunk; lumplen = 30 * chunkspersecond; pos = 1; % walk thru wav all = []; lump = []; lumpcount = 0; for i = 1:numchunks last = pos + samplesperchunk - 1; if last > numsamples last = numsamples; end % [pos last] bit = wavread(wavfile,[pos,last]); % fft y = fft(bit,spectrumwidth*2); pyy = y.* conj(y) / spectrumwidth / 2; rpyy = pyy(1:spectrumkeep,:)'; lump = [ lump ; rpyy ]; % rpyy lumpcount = lumpcount + 1; if lumpcount == lumplen % normalize lump [h w] = size(lump); for col = 1:normcutoff lump(:,col) = lump(:,col) / (normcutoff + 1 - col); end % add all = [all {lump'}]; lump = []; lumpcount = 0; end pos = pos + samplesperchunk; end r = all;