diff mirex2012-matlab/transcriptionMultipleTemplates.m @ 2:8017dd4a650d

Add MIREX 2012 code
author Chris Cannam
date Wed, 19 Mar 2014 09:09:23 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mirex2012-matlab/transcriptionMultipleTemplates.m	Wed Mar 19 09:09:23 2014 +0000
@@ -0,0 +1,71 @@
+function [ph pz sumY] = transcriptionMultipleTemplates(filename,iter,sz,su)
+
+
+% Load note templates
+load('noteTemplatesBassoon');      W(:,:,1) = noteTemplatesBassoon;
+load('noteTemplatesCello');        W(:,:,2) = noteTemplatesCello;
+load('noteTemplatesClarinet');     W(:,:,3) = noteTemplatesClarinet;
+load('noteTemplatesFlute');        W(:,:,4) = noteTemplatesFlute;
+load('noteTemplatesGuitar');       W(:,:,5) = noteTemplatesGuitar;
+load('noteTemplatesHorn');         W(:,:,6) = noteTemplatesHorn;
+load('noteTemplatesOboe');         W(:,:,7) = noteTemplatesOboe;
+load('noteTemplatesTenorSax');     W(:,:,8) = noteTemplatesTenorSax;
+load('noteTemplatesViolin');       W(:,:,9) = noteTemplatesViolin;
+load('noteTemplatesSptkBGCl');     W(:,:,10) = noteTemplatesSptkBGCl;
+
+
+%pitchActivity = [14 16 30 40 20 21 38 24 35 1; 52 61 69 76 56 57 71 55 80 88]';
+pitchActivity = [16 16 30 40 20 21 38 24 35 16; 52 61 69 73 56 57 71 55 73 73]';
+
+
+W = permute(W,[2 1 3]);
+W0 = squeeze(num2cell(W,1))';
+clear('noteTemplatesBassoon','noteTemplatesCello','noteTemplatesClarinet','noteTemplatesFlute','noteTemplatesGuitar',...
+    'noteTemplatesHorn','noteTemplatesOboe','noteTemplatesTenorSax','noteTemplatesViolin','noteTemplatesSptkBGCl','W');
+
+
+% Compute CQT
+[intCQT] = computeCQT(filename);
+X = intCQT(:,round(1:7.1128:size(intCQT,2)))';
+noiseLevel1 = medfilt1(X',40);
+noiseLevel2 = medfilt1(min(X',noiseLevel1),40);
+X = max(X-noiseLevel2',0);
+Y = X(1:4:size(X,1),:);  % 40ms step
+sumY = sum(Y');
+clear('intCQT','X','noiseLevel1','noiseLevel2');
+
+fprintf('%s','done');
+fprintf('\n');
+fprintf('%s',['Estimating F0s...........']);
+
+% For each 2sec segment, perform SIPLCA with fixed W0
+ph = zeros(440,size(Y,1));
+pz = zeros(88,size(Y,1));
+
+for j=1:floor(size(Y,1)/100)
+
+    x=[zeros(2,100); Y(1+(j-1)*100:j*100,:)'; zeros(2,100)];
+    [w,h,z,u,xa] = cplcaMT( x, 88, [545 1], 10, W0, [], [], [], iter, 1, 1, sz, su, 0, 1, 1, 1, pitchActivity);
+   
+    H=[]; for i=1:88 H=[H; h{i}]; end;
+    ph(:,1+(j-1)*100:j*100) = H;
+    Z=[]; for i=1:88 Z=[Z z{i}]; end;
+    pz(:,1+(j-1)*100:j*100) = Z';   
+    perc = 100*(j/(floor(size(Y,1)/100)+1));
+    fprintf('\n');
+    fprintf('%.2f%% complete',perc);
+end;
+
+len=size(Y,1)-j*100; % Final segment
+
+if (len >0)
+x=[zeros(2,len); Y(1+j*100:end,:)'; zeros(2,len)];
+[w,h,z,u,xa] = cplcaMT( x, 88, [545 1], 10, W0, [], [], [], iter, 1, 1, sz, su, 0, 1, 1, 1, pitchActivity);
+fprintf('\n');
+fprintf('100%% complete');
+
+H=[]; for i=1:88 H=[H; h{i}]; end;
+ph(:,1+j*100:end) = H;
+Z=[]; for i=1:88 Z=[Z z{i}]; end;
+pz(:,1+j*100:end) = Z'; 
+end;
\ No newline at end of file