Mercurial > hg > cip2012
diff matlab/fileplay.m @ 20:6464cf684717
Added drum analysis functions and archive of plots
author | samer |
---|---|
date | Mon, 12 Mar 2012 15:51:05 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/matlab/fileplay.m Mon Mar 12 15:51:05 2012 +0000 @@ -0,0 +1,36 @@ +% fileplay - Do plots for given file and play over MIDI channel 9 +% Data is played on kick and snare (note numbers 36 and 38). +% Metrical grid can be played on hi-hat, cowbell etc. +function player=fileplay(MO,file,varargin) + opts=prefs('vel',80,'dur',0.1,'shift',file{2},'metre',[],varargin{:}); + + disp(file{1}); + BDT=shift_beat(opts.shift,read(file{1})); + drumplot(BDT,'bar',4,'pause',0,varargin{:}); + player=playdrums(MO,[36,38,42,44,51,56,49,53],addmetre(opts.metre,BDT(:,[2,1,4])),opts); +end + +function player=playdrums(MO,PercMap,Evs,opts) + NN=map(PercMap,Evs(:,1)); + Times=(Evs(:,2)-Evs(1,2))/1000; + player=rendermidi(MO,window(zipmidi_abs(Times,opts.dur,9,NN,opts.vel)'),nows(MO)+1); +end + +function Evs=addmetre(metre,Evs) + for i=1:size(metre,1) + Evs=add_periodic(metre(i,1),metre(i,2),Evs); + end +end + +function X=add_periodic(m,type,Y) + [UMetPos,K]=unique(Y(:,3)); + Bars=(0:m:max(UMetPos))'; + BarTimes=interp1(UMetPos,Y(K,2),Bars); + Types=repmat(type,size(BarTimes)); + X=sort_by(2,vertcat(Y,[Types,BarTimes,Bars])); +end + +function X=sort_by(col,Y) + [dummy,K]=sort(Y(:,col)); + X=Y(K,:); +end