Mercurial > hg > silvet
annotate testdata/scripts/matlab/convertMIDIToPianoRoll.m @ 372:af71cbdab621 tip
Update bqvec code
author | Chris Cannam |
---|---|
date | Tue, 19 Nov 2019 10:13:32 +0000 |
parents | 51c18a17404a |
children |
rev | line source |
---|---|
emmanouil@71 | 1 function [pianoRoll,newnmat] = convertMIDIToPianoRoll(filename,timeResolution,dur) |
emmanouil@71 | 2 |
emmanouil@71 | 3 % Time resolution is in msec |
emmanouil@71 | 4 % eg. pianoRoll = convertMIDIToPianoRoll('bach_847MINp_align.mid',10); |
emmanouil@71 | 5 |
emmanouil@71 | 6 % Read MIDI file |
emmanouil@71 | 7 nmat = readmidi(filename); |
emmanouil@71 | 8 |
emmanouil@71 | 9 |
emmanouil@71 | 10 % Gather MIDI information |
emmanouil@71 | 11 [n1 n2] = size(nmat); |
emmanouil@71 | 12 lenthInSec = nmat(n1,6) + nmat(n1,7); |
emmanouil@71 | 13 pianoRoll = zeros(88,round(lenthInSec*(1000/timeResolution))); |
emmanouil@71 | 14 |
emmanouil@71 | 15 |
emmanouil@71 | 16 % Fill piano roll |
emmanouil@71 | 17 for i=1:n1 |
emmanouil@71 | 18 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 | 19 end; |
emmanouil@71 | 20 |
emmanouil@71 | 21 pianoRoll = pianoRoll'; |
emmanouil@71 | 22 |
emmanouil@71 | 23 % Plot piano roll |
emmanouil@71 | 24 %figure; imagesc(imrotate(pianoRoll,0)); axis xy |
emmanouil@71 | 25 %colormap('gray'); xlabel('time frame'); ylabel('Pitch'); |
emmanouil@71 | 26 |
emmanouil@71 | 27 |
emmanouil@71 | 28 % Convert to non-MIDI nmat |
emmanouil@71 | 29 newnmat(:,1) = nmat(:,6); |
emmanouil@71 | 30 newnmat(:,2) = nmat(:,6)+nmat(:,7); |
emmanouil@71 | 31 newnmat(:,3) = nmat(:,4)-20; |