diff 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 diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirquery/mirquery.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,74 @@
+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
\ No newline at end of file