Chris@2
|
1 function [ph pz sumY] = transcriptionMultipleTemplates(filename,iter,sz,su)
|
Chris@2
|
2
|
Chris@2
|
3
|
Chris@2
|
4 % Load note templates
|
Chris@2
|
5 load('noteTemplatesBassoon'); W(:,:,1) = noteTemplatesBassoon;
|
Chris@2
|
6 load('noteTemplatesCello'); W(:,:,2) = noteTemplatesCello;
|
Chris@2
|
7 load('noteTemplatesClarinet'); W(:,:,3) = noteTemplatesClarinet;
|
Chris@2
|
8 load('noteTemplatesFlute'); W(:,:,4) = noteTemplatesFlute;
|
Chris@2
|
9 load('noteTemplatesGuitar'); W(:,:,5) = noteTemplatesGuitar;
|
Chris@2
|
10 load('noteTemplatesHorn'); W(:,:,6) = noteTemplatesHorn;
|
Chris@2
|
11 load('noteTemplatesOboe'); W(:,:,7) = noteTemplatesOboe;
|
Chris@2
|
12 load('noteTemplatesTenorSax'); W(:,:,8) = noteTemplatesTenorSax;
|
Chris@2
|
13 load('noteTemplatesViolin'); W(:,:,9) = noteTemplatesViolin;
|
Chris@2
|
14 load('noteTemplatesSptkBGCl'); W(:,:,10) = noteTemplatesSptkBGCl;
|
Chris@2
|
15
|
Chris@2
|
16
|
Chris@2
|
17 %pitchActivity = [14 16 30 40 20 21 38 24 35 1; 52 61 69 76 56 57 71 55 80 88]';
|
Chris@2
|
18 pitchActivity = [16 16 30 40 20 21 38 24 35 16; 52 61 69 73 56 57 71 55 73 73]';
|
Chris@2
|
19
|
Chris@2
|
20
|
Chris@2
|
21 W = permute(W,[2 1 3]);
|
Chris@2
|
22 W0 = squeeze(num2cell(W,1))';
|
Chris@2
|
23 clear('noteTemplatesBassoon','noteTemplatesCello','noteTemplatesClarinet','noteTemplatesFlute','noteTemplatesGuitar',...
|
Chris@2
|
24 'noteTemplatesHorn','noteTemplatesOboe','noteTemplatesTenorSax','noteTemplatesViolin','noteTemplatesSptkBGCl','W');
|
Chris@2
|
25
|
Chris@2
|
26
|
Chris@2
|
27 % Compute CQT
|
Chris@2
|
28 [intCQT] = computeCQT(filename);
|
Chris@2
|
29 X = intCQT(:,round(1:7.1128:size(intCQT,2)))';
|
Chris@2
|
30 noiseLevel1 = medfilt1(X',40);
|
Chris@2
|
31 noiseLevel2 = medfilt1(min(X',noiseLevel1),40);
|
Chris@2
|
32 X = max(X-noiseLevel2',0);
|
Chris@2
|
33 Y = X(1:4:size(X,1),:); % 40ms step
|
Chris@2
|
34 sumY = sum(Y');
|
Chris@2
|
35 clear('intCQT','X','noiseLevel1','noiseLevel2');
|
Chris@2
|
36
|
Chris@2
|
37 fprintf('%s','done');
|
Chris@2
|
38 fprintf('\n');
|
Chris@2
|
39 fprintf('%s',['Estimating F0s...........']);
|
Chris@2
|
40
|
Chris@2
|
41 % For each 2sec segment, perform SIPLCA with fixed W0
|
Chris@2
|
42 ph = zeros(440,size(Y,1));
|
Chris@2
|
43 pz = zeros(88,size(Y,1));
|
Chris@2
|
44
|
Chris@2
|
45 for j=1:floor(size(Y,1)/100)
|
Chris@2
|
46
|
Chris@2
|
47 x=[zeros(2,100); Y(1+(j-1)*100:j*100,:)'; zeros(2,100)];
|
Chris@2
|
48 [w,h,z,u,xa] = cplcaMT( x, 88, [545 1], 10, W0, [], [], [], iter, 1, 1, sz, su, 0, 1, 1, 1, pitchActivity);
|
Chris@2
|
49
|
Chris@2
|
50 H=[]; for i=1:88 H=[H; h{i}]; end;
|
Chris@2
|
51 ph(:,1+(j-1)*100:j*100) = H;
|
Chris@2
|
52 Z=[]; for i=1:88 Z=[Z z{i}]; end;
|
Chris@2
|
53 pz(:,1+(j-1)*100:j*100) = Z';
|
Chris@2
|
54 perc = 100*(j/(floor(size(Y,1)/100)+1));
|
Chris@2
|
55 fprintf('\n');
|
Chris@2
|
56 fprintf('%.2f%% complete',perc);
|
Chris@2
|
57 end;
|
Chris@2
|
58
|
Chris@2
|
59 len=size(Y,1)-j*100; % Final segment
|
Chris@2
|
60
|
Chris@2
|
61 if (len >0)
|
Chris@2
|
62 x=[zeros(2,len); Y(1+j*100:end,:)'; zeros(2,len)];
|
Chris@2
|
63 [w,h,z,u,xa] = cplcaMT( x, 88, [545 1], 10, W0, [], [], [], iter, 1, 1, sz, su, 0, 1, 1, 1, pitchActivity);
|
Chris@2
|
64 fprintf('\n');
|
Chris@2
|
65 fprintf('100%% complete');
|
Chris@2
|
66
|
Chris@2
|
67 H=[]; for i=1:88 H=[H; h{i}]; end;
|
Chris@2
|
68 ph(:,1+j*100:end) = H;
|
Chris@2
|
69 Z=[]; for i=1:88 Z=[Z z{i}]; end;
|
Chris@2
|
70 pz(:,1+j*100:end) = Z';
|
Chris@2
|
71 end; |