Dimitrios@0
|
1 function [intCQT] = computeCQT(y)
|
Dimitrios@0
|
2 % Settings for computing CQT for music signals (by E. Benetos)
|
Dimitrios@0
|
3
|
Dimitrios@0
|
4 % COMPUTING A CQT WITH 40ms STEP AND BASIC NOISE REDUCTION:
|
Dimitrios@0
|
5 %[intCQT] = computeCQT(filename);
|
Dimitrios@0
|
6 %X = intCQT(:,round(1:7.1128:size(intCQT,2)))';
|
Dimitrios@0
|
7 %noiseLevel1 = medfilt1(X',40);
|
Dimitrios@0
|
8 %noiseLevel2 = medfilt1(min(X',noiseLevel1),40);
|
Dimitrios@0
|
9 %X = max(X-noiseLevel2',0);
|
Dimitrios@0
|
10 %Y = X(1:4:size(X,1),:); % 40ms step
|
Dimitrios@0
|
11
|
Dimitrios@0
|
12
|
Dimitrios@0
|
13 % Load .wav file
|
Dimitrios@0
|
14 %[x fs bits] = wavread(filename);
|
Dimitrios@0
|
15 %if (size(x,2) == 2) y = mean(x')'; clear('x'); else y=x; clear('x'); end;
|
Dimitrios@0
|
16 %if (fs ~= 44100) y = resample(y,44100,fs); end;
|
Dimitrios@0
|
17 %y = 0.5*y/max(y);
|
Dimitrios@0
|
18 fs = 44100;
|
Dimitrios@0
|
19
|
Dimitrios@0
|
20
|
Dimitrios@0
|
21 % Compute CQT
|
Dimitrios@0
|
22 Xcqt = cqt(y,27.5,fs/3,60,fs,'q',0.80,'atomHopFactor',0.3,'thresh',0.0005,'win','hann');
|
Dimitrios@0
|
23 %Xcqt = cqt(y,27.5,fs/3,120,fs,'q',0.35,'atomHopFactor',0.3,'thresh',0.0005,'win','hann'); % old resolution
|
Dimitrios@0
|
24 absCQT = getCQT(Xcqt,'all','all');
|
Dimitrios@0
|
25
|
Dimitrios@0
|
26 % Crop CQT to useful time regions
|
Dimitrios@0
|
27 emptyHops = Xcqt.intParams.firstcenter/Xcqt.intParams.atomHOP;
|
Dimitrios@0
|
28 maxDrop = emptyHops*2^(Xcqt.octaveNr-1)-emptyHops;
|
Dimitrios@0
|
29 droppedSamples = (maxDrop-1)*Xcqt.intParams.atomHOP + Xcqt.intParams.firstcenter;
|
Dimitrios@0
|
30 outputTimeVec = (1:size(absCQT,2))*Xcqt.intParams.atomHOP-Xcqt.intParams.preZeros+droppedSamples;
|
Dimitrios@0
|
31
|
Dimitrios@0
|
32 lowerLim = find(outputTimeVec>0,1);
|
Dimitrios@0
|
33 upperLim = find(outputTimeVec>length(y),1)-1;
|
Dimitrios@0
|
34
|
Dimitrios@0
|
35 %intCQT = absCQT(112:1200,lowerLim:upperLim); % old resolution
|
Dimitrios@0
|
36 intCQT = absCQT(56:600,lowerLim:upperLim);
|
Dimitrios@0
|
37
|
Dimitrios@0
|
38
|
Dimitrios@0
|
39 %figure; imagesc(imrotate(abs(intCQT),90));
|
Dimitrios@0
|
40
|