Mercurial > hg > silvet
view testdata/scripts/matlab/convertMIDIToPianoRoll.m @ 309:07ee4ebea57c
Add chromagram output
author | Chris Cannam |
---|---|
date | Mon, 19 Jan 2015 11:23:07 +0000 |
parents | 51c18a17404a |
children |
line wrap: on
line source
function [pianoRoll,newnmat] = convertMIDIToPianoRoll(filename,timeResolution,dur) % Time resolution is in msec % eg. pianoRoll = convertMIDIToPianoRoll('bach_847MINp_align.mid',10); % Read MIDI file nmat = readmidi(filename); % Gather MIDI information [n1 n2] = size(nmat); lenthInSec = nmat(n1,6) + nmat(n1,7); pianoRoll = zeros(88,round(lenthInSec*(1000/timeResolution))); % Fill piano roll for i=1:n1 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; end; pianoRoll = pianoRoll'; % Plot piano roll %figure; imagesc(imrotate(pianoRoll,0)); axis xy %colormap('gray'); xlabel('time frame'); ylabel('Pitch'); % Convert to non-MIDI nmat newnmat(:,1) = nmat(:,6); newnmat(:,2) = nmat(:,6)+nmat(:,7); newnmat(:,3) = nmat(:,4)-20;