function R = get_hash_hits(H) % R = get_hash_hits(H) % Return values from song hash table for particular hashes % Each element of H is a <(20 bit) hash value> % Each row of R is a hit in format: % % If H is a 2 column matrix, the first element is taken as a % time base which is subtracted from the start time index for % the retrieved hashes. % If H is a 3 column matrix, the first element is taken as a % songID and discarded. % 2008-12-29 Dan Ellis dpwe@ee.columbia.edu if size(H,2) == 3 H = H(:,[2 3]); end if min(size(H))==1 H = [zeros(length(H),1),H(:)]; end global HashTable HashTableCounts nhtcols = size(HashTable,1); TIMESIZE=16384; Rsize = 1000; % preallocate R = zeros(Rsize,3); Rmax = 0; for i = 1:length(H) hash = H(i,2); htime = double(H(i,1)); nentries = min(nhtcols,HashTableCounts(hash+1)); htcol = double(HashTable(1:nentries,hash+1)); songs = floor(htcol/TIMESIZE); times = round(htcol-songs*TIMESIZE); if Rmax+nentries > Rsize R = [R;zeros(Rsize,3)]; Rsize = size(R,1); end dtimes = times-htime; R(Rmax+[1:nentries],:) = [songs, dtimes, repmat(double(hash),nentries,1)]; Rmax = Rmax + nentries; end R = R(1:Rmax,:);