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