mgcOpt=mgcOptSet; corpusDir='d:/dataSet/musicGenreClassification/GTZAN'; auSet=recursiveFileList(corpusDir, 'au'); auNum=length(auSet); outputName=unique({auSet.parentDir}); for i=1:auNum auFile=auSet(i).path; fprintf('%d/%d: auFile=%s\n', i, auNum, auFile); wObj=waveFile2obj(auFile); % y=y*2^nbits/2; % temp=wave2mfccmex(y, fs, nbits, 'mfcc39.cfg'); % auSet(i).mfcc=temp(1:13, :); mfccOpt=mfccOptSet(wObj.fs); mfccOpt.frameSize=1024; mfccOpt.overlap=512; mfccOpt.useDelta=2; auSet(i).mfcc=wave2mfcc(wObj.signal, wObj.fs, mfccOpt); auSet(i).output=find(strcmp(outputName, auSet(i).parentDir)); end %fprintf('Saving auSet...\n'); %save auSet auSet % ====== Feature extraction for i=1:auNum fea=[]; fea(end+1,:)=mean(auSet(i).mfcc, 2); % Mean fea(end+1,:)=var(auSet(i).mfcc, 1, 2); % Standard deviation fea(end+1,:)=min(auSet(i).mfcc, [], 2); % Min fea(end+1,:)=max(auSet(i).mfcc, [], 2); % Max % fea(end+1,:)=mean(abs(diff(auSet(i).mfcc, 1, 2)), 2); % Mean of abs. diff % fea(end+1,:)=var(abs(diff(auSet(i).mfcc, 1, 2)), 2); % Std of abs. diff auSet(i).fea=fea(:); end % ====== Create DS DS.input=[auSet.fea]; %DS.input(end,:)=[]; % Why this input value is all the same? DS.output=[auSet.output]; DS.outputName=outputName; fprintf('Saving DS...\n'); save DS DS fprintf('Loading DS.mat...\n'); load DS.mat if mgcOpt.useInputNormalize, DS.input=inputNormalize(DS.input); end % Input normalization %if mgcOpt.useInputWhiten, DS.input=inputWhiten(DS.input); end % Input whitening cvPrm.foldNum=mgcOpt.foldNum; cvPrm.classifier=mgcOpt.classifier; plotOpt=1; figure; [tRrMean, vRrMean, tRr, vRr, computedClass]=crossValidate(DS, cvPrm, plotOpt); %% === Confusion matrix for i=1:length(computedClass) computed(i)=computedClass{i}; end desired=DS.output; confMat = confMatGet(desired, computed); cmOpt=confMatPlot('defaultOpt'); confMatPlot(confMat, cmOpt);