Chris@2: function [intCQT] = computeCQT(filename) Chris@2: % Settings for computing CQT for music signals (by E. Benetos) Chris@2: Chris@2: % Load .wav file Chris@2: [x fs bits] = wavread(filename); Chris@2: if (size(x,2) == 2) y = mean(x')'; clear('x'); else y=x; clear('x'); end; Chris@2: if (fs ~= 44100) y = resample(y,44100,fs); end; Chris@2: y = 0.5*y/max(y); Chris@2: fs = 44100; Chris@2: Chris@2: Chris@2: % Compute CQT Chris@2: Xcqt = cqt(y,27.5,fs/3,60,fs,'q',0.80,'atomHopFactor',0.3,'thresh',0.0005,'win','hann'); Chris@2: %Xcqt = cqt(y,27.5,fs/3,120,fs,'q',0.35,'atomHopFactor',0.3,'thresh',0.0005,'win','hann'); % old resolution Chris@2: absCQT = getCQT(Xcqt,'all','all'); Chris@2: Chris@2: % Crop CQT to useful time regions Chris@2: emptyHops = Xcqt.intParams.firstcenter/Xcqt.intParams.atomHOP; Chris@2: maxDrop = emptyHops*2^(Xcqt.octaveNr-1)-emptyHops; Chris@2: droppedSamples = (maxDrop-1)*Xcqt.intParams.atomHOP + Xcqt.intParams.firstcenter; Chris@2: outputTimeVec = (1:size(absCQT,2))*Xcqt.intParams.atomHOP-Xcqt.intParams.preZeros+droppedSamples; Chris@2: Chris@2: lowerLim = find(outputTimeVec>0,1); Chris@2: upperLim = find(outputTimeVec>length(y),1)-1; Chris@2: Chris@2: %intCQT = absCQT(112:1200,lowerLim:upperLim); % old resolution Chris@2: intCQT = absCQT(56:600,lowerLim:upperLim); Chris@2: Chris@2: Chris@2: %figure; imagesc(imrotate(abs(intCQT),90));