diff toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirgetdata.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/mirgetdata.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,97 @@
+function [d,d2] = mirgetdata(x,varargin)
+%   d = mirgetdata(x) return the data contained in the object x in a
+%       structure that can be used for further computation outside MIRtoolbox.
+%       If x corresponds to one non-segmented audio sequence, the result is 
+%           returned as a matrix. The columns of the matrix usually 
+%           correspond to the successive frames of the audio signal. The 
+%           third dimension of the matrix corresponds to the different
+%           channels of a filterbank.
+%       If x is a keystrength curve, the fourth dimension distinguishes
+%           between major and minor keys. i.e. d(:,:,:,1) is the
+%           keystrength for the major keys, and d(:,:,:,2) is the
+%           keystrength for the minor keys.
+%       If x is a key estimation, two output are returned: the first one
+%           gives the keys (from 1 to 12) and the second one indicates the
+%           modes (1 for major, 2 for minor).
+%
+%       If x corresponds to a set of audio sequences, and if each sequence
+%           has same number of frames, the corresponding resulting matrices 
+%           are concatenated columnwise one after the other. If the number
+%           of raws of the elementary matrices varies, the missing values
+%           are replaced by NaN in the final matrix. On the contrary, if 
+%           the number of columns (i.e., frames) differs, then the result
+%           remains a cell array of matrices.
+%       Idem if x corresponds to one or several segmented audio
+%           sequence(s).
+%
+%   If x is the result of a peak detection,
+%       [px,py] = getdata(x) return the position of the peaks (px) and the
+%           value corresponding to these peaks (py), in the units
+%           predefined for this data.
+
+if isempty(x)
+    d = {};
+    d2 = {};
+    return
+end
+
+if isstruct(x)
+    fields = fieldnames(x);
+    for f = 1:length(fields)
+        d.(fields{f}) = mirgetdata(x.(fields{f}));
+    end
+    d2 = {};
+    return
+end
+
+if iscell(x)
+    x = x{1};
+end
+v = get(x,'Data');
+if isa(x,'mirscalar')
+    m = get(x,'Mode');
+end
+d2 = {};
+
+if isa(x,'mirclassify')
+    d = get(x,'Data');
+    return
+end
+
+if isa(x,'mirsimatrix')
+    pt = [];
+else
+    pt = get(x,'PeakPrecisePos');
+end
+pv = get(x,'PeakPreciseVal');
+if not(isempty(pt)) && not(isempty(pt{1})) && not(isempty(pt{1}{1}))
+    d = uncell(pt);
+    d2 = uncell(pv);
+    if not(isempty(d))
+        return
+    end
+end
+
+if isa(x,'mirsimatrix')
+    pt = [];
+else
+    pt = get(x,'PeakPosUnit');
+end
+pv = get(x,'PeakVal');
+if not(isempty(pt)) && not(isempty(pt{1})) && not(isempty(pt{1}{1}))
+    d = uncell(pt);
+    d2 = uncell(pv);
+    if not(isempty(d))
+        return
+    end
+end
+
+d = uncell(v,isa(x,'mirscalar'));
+if iscell(d) && not(isempty(d)) && nargin == 1
+    disp('The result is an array of cell.')
+    disp(['If d is the name of the output variable, ',...
+        'the successive cells can be accessed by typing d{1}, d{2}, etc.']);
+end
+if exist('m')==1 && not(isempty(m)) && not(isempty(m{1}))
+    d2 = uncell(m);
+end
\ No newline at end of file