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 dpwe@ee.columbia.edu
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