function y = beat_play(b,d,sr)
% y = beat_play(b,d,sr)
%   Synthesize clicks for a beat track.
%   <b> is a list of beat times (in sec)
%   <d> is a maximum duration (in sec) or a waveform to add in.
%   <sr> is the sampling rate for the output (and for waveform <d>).
%   <y> is the synthesized waveform.
% 2012-03-27 Dan Ellis [email protected]

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