Mercurial > hg > camir-aes2014
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