d@0: function [ceps] = mfcc(audioFile, FFTsize, hop, mfccFilterWeights, mfccDCTMatrix) d@0: d@0: %Beat synched data d@0: cepstralCoefficients = 13; d@0: %BeatLength = 60/BPM*Fs; d@0: %FrameSize = round(BeatLength*NoteDiv); d@0: hop = hop; d@0: %Nfft = 2^nextpow2(FrameSize); d@0: Nfft = FFTsize; d@0: FrameSize = FFTsize; d@0: %number_of_frame = length([1:FrameSize:length(audioFile)])-1; d@0: d@0: seg_start = [1:FrameSize:length(audioFile)]'; d@0: seg_stop = min(seg_start+FrameSize,length(audioFile)); d@0: d@0: if(seg_stop(end)-seg_start(end)~=FrameSize) d@0: seg_stop(end) =[]; d@0: seg_start(end)=[]; d@0: end d@0: d@0: number_of_frame = length(seg_start); d@0: d@0: hamWindow = 0.54 - 0.46*cos(2*pi*(0:FrameSize-1)/FrameSize); d@0: d@0: % Filter the input with the preemphasis filter d@0: preEmphasized = audioFile; %filter([1 -.97], 1, audioFile); d@0: d@0: % Allocate all the space we need for the output arrays. d@0: ceps = zeros(cepstralCoefficients, number_of_frame); d@0: d@0: %Tuning related variables : d@0: averagedPowerSpectrogram = zeros(Nfft/2,1); d@0: d@0: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% d@0: %%% Mel - Frequencies Cepstrum Coefficients d@0: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% d@0: h=waitbar(0,'MFCC Calculus - Please wait..'); d@0: for start=1:number_of_frame d@0: d@0: %Frame position d@0: waitbar(start/number_of_frame); d@0: d@0: first = seg_start(start); d@0: last = seg_stop(start); d@0: d@0: d@0: %Hanning window mult d@0: fftData = zeros(1,Nfft); d@0: preEmphasizedSlice = preEmphasized(first:last-1); d@0: fftData(1:FrameSize) = preEmphasizedSlice.*hamWindow'; d@0: d@0: %magnitude of the fft d@0: fftMag = abs(fft(fftData)); d@0: fftMag = fftMag(1:Nfft/2); d@0: d@0: %Sum the spectrogram magnitude d@0: averagedPowerSpectrogram = averagedPowerSpectrogram + fftMag'.^2; d@0: d@0: %fft data into filter bank outputs + Log Compression d@0: FilteredFFT = mfccFilterWeights * fftMag'; d@0: d@0: factorLogCompr = 10; d@0: addTermLogCompr = 1; d@0: earMag = log10(addTermLogCompr+FilteredFFT*factorLogCompr); d@0: d@0: %Cosine transform to reduce dimensionality d@0: ceps(:,start) = mfccDCTMatrix * earMag; d@0: d@0: end %Loop on frames d@0: d@0: close(h); d@0: d@0: end