Code covered by the BSD License  

Highlights from
MIRtoolbox

image thumbnail
from MIRtoolbox by Olivier Lartillot
An innovative environment, on top of Matlab, for music and audio analysis

mirkey(orig,varargin)
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};

Contact us at files@mathworks.com