Mercurial > hg > camir-aes2014
view toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirquery/mirquery.m @ 0:e9a9cd732c1e tip
first hg version after svn
author | wolffd |
---|---|
date | Tue, 10 Feb 2015 15:05:51 +0000 |
parents | |
children |
line wrap: on
line source
function res = mirquery(varargin) % r = mirquery(q,b), where % q is the analysis of one audio file and % b is the analysis of a folder of audio files, % according to the same mirtoolbox feature, % returns the name of the audio files in the database b in an % increasing distance to q with respect to the chosen feature. % r = mirquery(d), where % d is the distance between one audio file and a folder of audio % file, according to a mirtoolbox feature, % returns the name of the audio files in an increasing distance d. % % Optional argument: % mirquery(...,'Best',n) returns the name of the n closest audio % files. % mirquery(..,'Distance',d) specifies the distance to use. % Default value: d = 'Cosine' (cf. mirdist) [distfunc,nbout] = scanargin(varargin); if nargin<2 || not(isa(varargin{2},'mirdata')) returnval=0; dist = varargin{1}; name = get(dist,'Name2'); res.query.val = []; res.query.name = get(dist,'Name'); else returnval=1; query = varargin{1}; base = varargin{2}; name = get(base,'Name'); res.query.val = mirgetdata(query); res.query.name = get(query,'Name'); database = mirgetdata(base); dist = mirdist(query,base,distfunc); end datadist = mirgetdata(dist); [ordist order] = sort(datadist); order(isnan(ordist)) = []; nbout = min(nbout,length(order)); res.dist = ordist(1:nbout); if returnval res.val = database(order); else res.val = []; end res.name = name(order); res = class(res,'mirquery'); function [distfunc,nbout] = scanargin(v) distfunc = 'Cosine'; nbout=Inf; i = 1; while i <= length(v) arg = v{i}; if ischar(arg) && strcmpi(arg,'Distance') if length(v)>i && ischar(v{i+1}) i = i+1; distfunc = v{i}; end elseif ischar(arg) && strcmpi(arg,'Best') if length(v)>i && isnumeric(v{i+1}) i = i+1; nbout = v{i}; end %else % error('ERROR IN MIRQUERY: Syntax error. See help mirquery.'); end i = i+1; end