Chris@2: function [] = doMultiF0(inputFile,outputFile) Chris@2: Chris@2: Chris@2: % Transcribe file Chris@2: fprintf('%s',['Preprocessing............']); Chris@2: [ph pz sumY] = transcriptionMultipleTemplates(inputFile,12,1.1,1.3); Chris@2: fprintf('\n'); Chris@45: Chris@2: fprintf('%s',['Postprocessing...........']); Chris@2: pianoRoll = repmat(sumY,88,1).*pz(1:88,:); Chris@45: Chris@45: pfid = fopen('pitchmatrix.lab','w'); Chris@45: for i=1:size(pianoRoll,2) Chris@45: fprintf(pfid, '%.2f ', pianoRoll(1:88,i)); Chris@45: fprintf(pfid, '\n'); Chris@45: end; Chris@45: fclose(pfid); Chris@45: Chris@2: pianoRoll = pianoRoll'; Chris@2: for j=[1:15 74:88] pianoRoll(:,j)=0; end; Chris@2: pianoRoll = medfilt1(pianoRoll,3); Chris@2: Chris@2: Chris@2: % Max polyphony 5 Chris@2: [B,IX] =sort(pianoRoll,2,'descend'); Chris@2: tempPianoRoll = zeros(size(pianoRoll,1),88); Chris@2: for j=1:size(pianoRoll,1) for k=1:5 tempPianoRoll(j,IX(j,k)) = B(j,k); end; end; Chris@2: pianoRoll = tempPianoRoll; Chris@2: Chris@2: Chris@2: % Expand piano-roll and perform thresholding Chris@2: expandedPianoRoll = zeros(4*size(pianoRoll,1),88); Chris@2: for j=1:4*size(pianoRoll,1) Chris@2: expandedPianoRoll(j,:) = pianoRoll(floor((j-1)/4)+1,:); Chris@2: end; Chris@2: finalPianoRoll = (expandedPianoRoll>4.8)'; Chris@2: Chris@2: Chris@2: % Create output and perform minimum duration pruning Chris@2: auxPianoRoll = diff([zeros(1,88); finalPianoRoll'; zeros(1,88);],1); k=0; Chris@2: for i=1:88 Chris@2: onsets = find(auxPianoRoll(:,i)==1); Chris@2: offsets = find(auxPianoRoll(:,i)==-1); Chris@2: for j=1:length(onsets) Chris@2: if((offsets(j)/100-0.01) - (onsets(j)/100) > 0.05) Chris@2: k=k+1; Chris@2: nmat(k,1) = onsets(j)/100; Chris@2: nmat(k,2) = offsets(j)/100-0.01; Chris@2: nmat(k,3) = 27.5*2.^((( i-1)*10 )/120); Chris@2: end; Chris@2: end; Chris@2: end; Chris@2: nmat = sortrows(nmat,1); Chris@2: Chris@2: Chris@2: % Print output Chris@2: fid=fopen(outputFile,'w'); Chris@2: for i=1:size(nmat,1) Chris@2: fprintf(fid,'%.2f\t%.2f\t%.2f\n',nmat(i,1),nmat(i,2),nmat(i,3)); Chris@2: end; Chris@2: fclose(fid); Chris@2: fprintf('%s','done'); Chris@2: fprintf('\n'); Chris@2: Chris@2: Chris@2: exit;