function y = beat_play(b,d,sr) % y = beat_play(b,d,sr) % Synthesize clicks for a beat track. % is a list of beat times (in sec) % is a maximum duration (in sec) or a waveform to add in. % is the sampling rate for the output (and for waveform ). % is the synthesized waveform. % 2012-03-27 Dan Ellis dpwe@ee.columbia.edu if nargin < 2; d = 0; end if nargin < 3; sr = 11025; end % Maybe read in a soundfile for d? if ischar(d); [d,sr] = audioread(d,sr,1); end if length(d) == 1 l = round(d*sr); d = zeros(l,1); end l = length(d); % The waveform to use for each beat tdur = 0.1; tt = (0:round(tdur*sr))'; %% 100ms pip @ 2khz %fblip = 2000; %blip = tt.*exp(-tt/((tdur*sr)/10)).*cos(2*pi*tt/sr*fblip)/200; % 100ms exponential decay white noise burst blip = exp(-tt/((tdur*sr)/20)).*randn(length(tt),1)/5; lblip = length(blip); bsamp = round(b*sr); % remove beats that would run off end if l > 0 bsamp = bsamp(bsamp < (l-lblip)); else l = max(bsamp)+lblip; end % ensure d is long enough d(l) = 0; for bbx = 1:length(bsamp) bb = bsamp(bbx); d(bb+[1:lblip]) = d(bb+[1:lblip]) + blip; end if nargout == 0 soundsc(d,sr); else y = d; end