Chris@2
|
1 function [] = doMultiF0(inputFile,outputFile)
|
Chris@2
|
2
|
Chris@2
|
3
|
Chris@2
|
4 % Transcribe file
|
Chris@2
|
5 fprintf('%s',['Preprocessing............']);
|
Chris@2
|
6 [ph pz sumY] = transcriptionMultipleTemplates(inputFile,12,1.1,1.3);
|
Chris@2
|
7 fprintf('\n');
|
Chris@45
|
8
|
Chris@2
|
9 fprintf('%s',['Postprocessing...........']);
|
Chris@2
|
10 pianoRoll = repmat(sumY,88,1).*pz(1:88,:);
|
Chris@45
|
11
|
Chris@45
|
12 pfid = fopen('pitchmatrix.lab','w');
|
Chris@45
|
13 for i=1:size(pianoRoll,2)
|
Chris@45
|
14 fprintf(pfid, '%.2f ', pianoRoll(1:88,i));
|
Chris@45
|
15 fprintf(pfid, '\n');
|
Chris@45
|
16 end;
|
Chris@45
|
17 fclose(pfid);
|
Chris@45
|
18
|
Chris@2
|
19 pianoRoll = pianoRoll';
|
Chris@2
|
20 for j=[1:15 74:88] pianoRoll(:,j)=0; end;
|
Chris@2
|
21 pianoRoll = medfilt1(pianoRoll,3);
|
Chris@2
|
22
|
Chris@2
|
23
|
Chris@2
|
24 % Max polyphony 5
|
Chris@2
|
25 [B,IX] =sort(pianoRoll,2,'descend');
|
Chris@2
|
26 tempPianoRoll = zeros(size(pianoRoll,1),88);
|
Chris@2
|
27 for j=1:size(pianoRoll,1) for k=1:5 tempPianoRoll(j,IX(j,k)) = B(j,k); end; end;
|
Chris@2
|
28 pianoRoll = tempPianoRoll;
|
Chris@2
|
29
|
Chris@2
|
30
|
Chris@2
|
31 % Expand piano-roll and perform thresholding
|
Chris@2
|
32 expandedPianoRoll = zeros(4*size(pianoRoll,1),88);
|
Chris@2
|
33 for j=1:4*size(pianoRoll,1)
|
Chris@2
|
34 expandedPianoRoll(j,:) = pianoRoll(floor((j-1)/4)+1,:);
|
Chris@2
|
35 end;
|
Chris@2
|
36 finalPianoRoll = (expandedPianoRoll>4.8)';
|
Chris@2
|
37
|
Chris@2
|
38
|
Chris@2
|
39 % Create output and perform minimum duration pruning
|
Chris@2
|
40 auxPianoRoll = diff([zeros(1,88); finalPianoRoll'; zeros(1,88);],1); k=0;
|
Chris@2
|
41 for i=1:88
|
Chris@2
|
42 onsets = find(auxPianoRoll(:,i)==1);
|
Chris@2
|
43 offsets = find(auxPianoRoll(:,i)==-1);
|
Chris@2
|
44 for j=1:length(onsets)
|
Chris@2
|
45 if((offsets(j)/100-0.01) - (onsets(j)/100) > 0.05)
|
Chris@2
|
46 k=k+1;
|
Chris@2
|
47 nmat(k,1) = onsets(j)/100;
|
Chris@2
|
48 nmat(k,2) = offsets(j)/100-0.01;
|
Chris@2
|
49 nmat(k,3) = 27.5*2.^((( i-1)*10 )/120);
|
Chris@2
|
50 end;
|
Chris@2
|
51 end;
|
Chris@2
|
52 end;
|
Chris@2
|
53 nmat = sortrows(nmat,1);
|
Chris@2
|
54
|
Chris@2
|
55
|
Chris@2
|
56 % Print output
|
Chris@2
|
57 fid=fopen(outputFile,'w');
|
Chris@2
|
58 for i=1:size(nmat,1)
|
Chris@2
|
59 fprintf(fid,'%.2f\t%.2f\t%.2f\n',nmat(i,1),nmat(i,2),nmat(i,3));
|
Chris@2
|
60 end;
|
Chris@2
|
61 fclose(fid);
|
Chris@2
|
62 fprintf('%s','done');
|
Chris@2
|
63 fprintf('\n');
|
Chris@2
|
64
|
Chris@2
|
65
|
Chris@2
|
66 exit;
|