emmanouil@71: function [pianoRoll,newnmat] = convertMIDIToPianoRoll(filename,timeResolution,dur) emmanouil@71: emmanouil@71: % Time resolution is in msec emmanouil@71: % eg. pianoRoll = convertMIDIToPianoRoll('bach_847MINp_align.mid',10); emmanouil@71: emmanouil@71: % Read MIDI file emmanouil@71: nmat = readmidi(filename); emmanouil@71: emmanouil@71: emmanouil@71: % Gather MIDI information emmanouil@71: [n1 n2] = size(nmat); emmanouil@71: lenthInSec = nmat(n1,6) + nmat(n1,7); emmanouil@71: pianoRoll = zeros(88,round(lenthInSec*(1000/timeResolution))); emmanouil@71: emmanouil@71: emmanouil@71: % Fill piano roll emmanouil@71: for i=1:n1 emmanouil@71: pianoRoll(round(nmat(i,4)-20),round(nmat(i,6)*(1000/timeResolution))+1:round(nmat(i,6)*(1000/timeResolution)+dur*nmat(i,7)*(1000/timeResolution))+1) = 1; emmanouil@71: end; emmanouil@71: emmanouil@71: pianoRoll = pianoRoll'; emmanouil@71: emmanouil@71: % Plot piano roll emmanouil@71: %figure; imagesc(imrotate(pianoRoll,0)); axis xy emmanouil@71: %colormap('gray'); xlabel('time frame'); ylabel('Pitch'); emmanouil@71: emmanouil@71: emmanouil@71: % Convert to non-MIDI nmat emmanouil@71: newnmat(:,1) = nmat(:,6); emmanouil@71: newnmat(:,2) = nmat(:,6)+nmat(:,7); emmanouil@71: newnmat(:,3) = nmat(:,4)-20;