annotate matlab/fileplay.m @ 75:8a146c651475 tip

Added ready made bbl
author samer
date Fri, 01 Jun 2012 16:19:55 +0100
parents 6464cf684717
children
rev   line source
samer@20 1 % fileplay - Do plots for given file and play over MIDI channel 9
samer@20 2 % Data is played on kick and snare (note numbers 36 and 38).
samer@20 3 % Metrical grid can be played on hi-hat, cowbell etc.
samer@20 4 function player=fileplay(MO,file,varargin)
samer@20 5 opts=prefs('vel',80,'dur',0.1,'shift',file{2},'metre',[],varargin{:});
samer@20 6
samer@20 7 disp(file{1});
samer@20 8 BDT=shift_beat(opts.shift,read(file{1}));
samer@20 9 drumplot(BDT,'bar',4,'pause',0,varargin{:});
samer@20 10 player=playdrums(MO,[36,38,42,44,51,56,49,53],addmetre(opts.metre,BDT(:,[2,1,4])),opts);
samer@20 11 end
samer@20 12
samer@20 13 function player=playdrums(MO,PercMap,Evs,opts)
samer@20 14 NN=map(PercMap,Evs(:,1));
samer@20 15 Times=(Evs(:,2)-Evs(1,2))/1000;
samer@20 16 player=rendermidi(MO,window(zipmidi_abs(Times,opts.dur,9,NN,opts.vel)'),nows(MO)+1);
samer@20 17 end
samer@20 18
samer@20 19 function Evs=addmetre(metre,Evs)
samer@20 20 for i=1:size(metre,1)
samer@20 21 Evs=add_periodic(metre(i,1),metre(i,2),Evs);
samer@20 22 end
samer@20 23 end
samer@20 24
samer@20 25 function X=add_periodic(m,type,Y)
samer@20 26 [UMetPos,K]=unique(Y(:,3));
samer@20 27 Bars=(0:m:max(UMetPos))';
samer@20 28 BarTimes=interp1(UMetPos,Y(K,2),Bars);
samer@20 29 Types=repmat(type,size(BarTimes));
samer@20 30 X=sort_by(2,vertcat(Y,[Types,BarTimes,Bars]));
samer@20 31 end
samer@20 32
samer@20 33 function X=sort_by(col,Y)
samer@20 34 [dummy,K]=sort(Y(:,col));
samer@20 35 X=Y(K,:);
samer@20 36 end