Mercurial > hg > smallbox
annotate util/matlab_midi/getTempoChanges.m @ 81:a30e8bd6d948
matlab_midi scripts
author | Ivan <ivan.damnjanovic@eecs.qmul.ac.uk> |
---|---|
date | Mon, 28 Mar 2011 17:35:01 +0100 |
parents | |
children |
rev | line source |
---|---|
ivan@81 | 1 function [tempos,tempos_time]=getTempoChanges(midi) |
ivan@81 | 2 % [tempos,tempos_time]=getTempoChanges(midi) |
ivan@81 | 3 % |
ivan@81 | 4 % input: a midi struct from readmidi.m |
ivan@81 | 5 % output: |
ivan@81 | 6 % tempos = tempo values indexed by tempos_time |
ivan@81 | 7 % tempos_time is in units of ticks |
ivan@81 | 8 % |
ivan@81 | 9 % should tempo changes effect across tracks? across channels? |
ivan@81 | 10 % |
ivan@81 | 11 |
ivan@81 | 12 % Copyright (c) 2009 Ken Schutte |
ivan@81 | 13 % more info at: http://www.kenschutte.com/midi |
ivan@81 | 14 |
ivan@81 | 15 tempos = []; |
ivan@81 | 16 tempos_time = []; |
ivan@81 | 17 for i=1:length(midi.track) |
ivan@81 | 18 cumtime=0; |
ivan@81 | 19 for j=1:length(midi.track(i).messages) |
ivan@81 | 20 cumtime = cumtime+midi.track(i).messages(j).deltatime; |
ivan@81 | 21 % if (strcmp(midi.track(i).messages(j).name,'Set Tempo')) |
ivan@81 | 22 if (midi.track(i).messages(j).midimeta==0 && midi.track(i).messages(j).type==81) |
ivan@81 | 23 tempos_time(end+1) = cumtime; |
ivan@81 | 24 d = midi.track(i).messages(j).data; |
ivan@81 | 25 tempos(end+1) = d(1)*16^4 + d(2)*16^2 + d(3); |
ivan@81 | 26 end |
ivan@81 | 27 end |
ivan@81 | 28 end |
ivan@81 | 29 |
ivan@81 | 30 |
ivan@81 | 31 |