function [Q,SR] = gen_random_queries(IDs,Dur,Noise,Seed)
% [Q,SR] = gen_random_queries(IDs,Dur,Noise,Seed)
%    Generate a cell array of random queries for testing the
%    fingerprinter.  IDs is a cell array of ID strings to 
%    indicate the files.  Dur is the duration of the excerpt to 
%    randomly pull from the file.  Noise is a level of noise 
%    to add (0 => no noise).  Return Q as a cell array of 
%    waveforms, one for each entry in IDs, that can be passed to
%    eval_fprint.m. 
%    Optional Seed will initialize RNG to a fixed point.
% 2010-04-21 DAn Ellis [email protected]

if nargin < 2; Dur = 30; end
if nargin < 3; Noise = 0; end

if nargin > 3
  rns = RandStream.create('mt19937ar','seed',Seed);
  RandStream.setDefaultStream(rns);
end

nIDs = length(IDs);

prepend = '';
postpend = '';

SR = 0;

for i = 1:length(IDs)
  
  id = IDs{i};
  fname = [prepend,id,postpend];
  [pth,nm,ext] = fileparts(fname);
  if strcmp(ext,'.mp3') == 1
    [d,sr] = mp3read(fname);
  else
    [d,sr] = wavread(fname);
  end
  if size(d,2) == 2
    % convert to mono if stereo
    d = mean(d,2);
  end
  % choose random excerpt
  ld = length(d);
  qlen = round(Dur * sr);
  sp = round((ld - qlen)*rand(1));
  Q{i} = d(sp + [1:qlen]) + Noise * randn(qlen,1);

  if SR == 0
    SR = sr;
  elseif SR ~= sr
    error(['File ',fname,' has sr ',num2str(sr),' not ', num2str(SR)]);
  end
  
end