diff toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirlowenergy.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/mirlowenergy.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,92 @@
+function varargout = mirlowenergy(x,varargin)
+%   p = mirlowenergy(f) computes the percentage of frames showing a RMS 
+%       energy that is lower than a given threshold. 
+%   For instance, for a musical excerpt with some very loud frames and 
+%       lots of silent frames, we would get a high low-energy rate.
+%   Optional argument:
+%       mirlowenergy(...,'Threshold',t) expressed as a ratio to the average
+%           energy over the frames.
+%           Default value: t = 1
+%       mirlowenergy(...,'Frame',l,h) specifies the use of frames of
+%           length l seconds and a hop rate h.
+%           Default values: l = .05 s, h = .5
+%       mirlowenergy(...,'Root',0) uses mean square instead of root mean
+%           square
+%       mirlowenergy(...,'ASR') computes the Average Silence Ratio, which
+%           corresponds in fact to mirlowenergy(...,'Root',0,'Threshold',t)
+%           where t is fixed here by default to t = .5
+%   [p,e] = mirlowenergy(...) also returns the RMS energy curve.
+    
+        asr.key = 'ASR';
+        asr.type = 'Boolean';
+        asr.default = 0;
+    option.asr = asr;
+    
+        root.key = 'Root';
+        root.type = 'Boolean';
+        root.default = 1;
+    option.root = root;
+    
+        thr.key = 'Threshold';
+        thr.type = 'Integer';
+        thr.default = NaN;
+    option.thr = thr;
+
+        frame.key = 'Frame';
+        frame.type = 'Integer';
+        frame.number = 2;
+        frame.default = [.05 .5];
+    option.frame = frame;
+
+specif.option = option;
+
+specif.combinechunk = {'Average',@nothing};
+specif.extensive = 1;
+
+varargout = mirfunction(@mirlowenergy,x,varargin,nargout,specif,@init,@main);
+
+
+function [x type] = init(x,option)
+if option.asr
+    option.root = 0;
+end
+if isamir(x,'miraudio')
+    if isframed(x)
+        x = mirrms(x,'Root',option.root);
+    else
+        x = mirrms(x,'Frame',option.frame.length.val,option.frame.length.unit,...
+                             option.frame.hop.val,option.frame.hop.unit,...
+                             'Root',option.root);
+    end
+end
+type = 'mirscalar';
+
+
+function e = main(r,option,postoption)
+if iscell(r)
+    r = r{1};
+end
+if isnan(option.thr)
+    if option.asr
+        option.thr = .5;
+    else
+        option.thr = 1;
+    end
+end
+v = mircompute(@algo,get(r,'Data'),option.thr);
+fp = mircompute(@noframe,get(r,'FramePos'));
+e = mirscalar(r,'Data',v,'Title','Low energy','Unit','/1','FramePos',fp);
+e = {e,r};
+
+
+function v = algo(d,thr)
+v = sum(d < repmat(thr*mean(d,2),[1 size(d,2) 1]));
+v = v / size(d,2);
+
+
+function fp = noframe(fp)
+fp = [fp(1);fp(end)];
+
+
+function y = nothing(old,new)
+y = old;
\ No newline at end of file