Mercurial > hg > camir-aes2014
diff toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirkey.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/mirkey.m Tue Feb 10 15:05:51 2015 +0000 @@ -0,0 +1,61 @@ +function varargout = mirkey(orig,varargin) +% k = mirkey(x) estimates the key. +% Optional argument: +% mirkey(...,'Total',m) selects not only the most probable key, but +% the m most probable keys. +% The other parameter 'Contrast' related to mirpeaks can be specified +% here (see help mirchromagram). +% The optional parameters 'Weight' and 'Triangle' related to +% mirchromagram can be specified here (see help mirchromagram). +% [k,ks] = mirkey(...) also returns the key clarity, corresponding here +% to the key strength associated to the best candidate. +% [k,ks,ksc] = mirkey(...) also displays the key strength curve used for +% the key estimation and shows in particular the peaks corresponding +% to the selected key(s). + + tot.key = 'Total'; + tot.type = 'Integer'; + tot.default = 1; + option.tot = tot; + + thr.key = 'Contrast'; + thr.type = 'Integer'; + thr.default = .1; + option.thr = thr; + + wth.key = 'Weight'; + wth.type = 'Integer'; + wth.default = .5; + option.wth = wth; + + tri.key = 'Triangle'; + tri.type = 'Boolean'; + tri.default = 0; + option.tri = tri; + +specif.option = option; +specif.defaultframelength = 1; +specif.defaultframehop = .5; + +varargout = mirfunction(@mirkey,orig,varargin,nargout,specif,@init,@main); + + +function [p type] = init(x,option) +if not(isamir(x,'mirkeystrength')) + x = mirkeystrength(x,'Weight',option.wth,'Triangle',option.tri); +end +p = mirpeaks(x,'Total',option.tot,'Contrast',option.thr); +type = {'mirscalar','mirscalar','mirkeystrength'}; + + +function k = main(p,option,postoption) +if iscell(p) + p = p{1}; +end +pc = get(p,'PeakPos'); +pv = get(p,'PeakMaxVal'); +pm = get(p,'PeakMode'); +k = mirscalar(p,'Data',pc,'Mode',pm,'Title','Key',... + 'Legend',{'C','C#','D','D#','E','F','F#','G','G#','A','A#','B'}); +m = mirscalar(p,'Data',pv,'Title','Key clarity','MultiData',{}); +k = {k m p}; \ No newline at end of file