wolffd@0: function varargout = mireventdensity(x,varargin) wolffd@0: % e = mireventdensity(x) estimate the mean frequency of events (i.e., how wolffd@0: % many note onsets per second) in the temporal data x. wolffd@0: wolffd@0: % Optional arguments: Option1, Option2 wolffd@0: % Tuomas Eerola, 14.08.2008 wolffd@0: % wolffd@0: normal.type = 'String'; wolffd@0: normal.choice = {'Option1','Option2'}; wolffd@0: normal.default = 'Option1'; wolffd@0: option.normal = normal; wolffd@0: wolffd@0: frame.key = 'Frame'; wolffd@0: frame.type = 'Integer'; wolffd@0: frame.number = 2; wolffd@0: frame.default = [0 0]; wolffd@0: frame.keydefault = [10 1]; wolffd@0: option.frame = frame; wolffd@0: wolffd@0: specif.option = option; wolffd@0: wolffd@0: specif.defaultframelength = 1.00; wolffd@0: specif.defaultframehop = 0.5; wolffd@0: wolffd@0: %specif.eachchunk = 'Normal'; wolffd@0: specif.combinechunk = {'Average','Concat'}; wolffd@0: wolffd@0: varargout = mirfunction(@mireventdensity,x,varargin,nargout,specif,@init,@main); wolffd@0: wolffd@0: wolffd@0: function [x type] = init(x,option) wolffd@0: if not(isamir(x,'mirenvelope')) wolffd@0: if option.frame.length.val wolffd@0: x = mironsets(x,'Klapuri99', 'Frame',option.frame.length.val,... wolffd@0: option.frame.length.unit,... wolffd@0: option.frame.hop.val,... wolffd@0: option.frame.hop.unit); wolffd@0: else wolffd@0: x = mironsets(x,'Klapuri99'); wolffd@0: end wolffd@0: end wolffd@0: type = 'mirscalar'; wolffd@0: wolffd@0: wolffd@0: function e = main(o,option,postoption) wolffd@0: if iscell(o) wolffd@0: o = o{1}; wolffd@0: end wolffd@0: sr = get(o,'Sampling'); wolffd@0: p = mirpeaks(o); %%%%<<<<<<< MORE OPTIONS HERE wolffd@0: pv = get(p,'PeakVal'); wolffd@0: v = mircompute(@algo,pv,o,option,sr); wolffd@0: e = mirscalar(o,'Data',v,'Title','Event density','Unit','per second'); wolffd@0: e = {e o}; wolffd@0: wolffd@0: wolffd@0: function e = algo(pv,o,option,sr) wolffd@0: nc = size(o,2); wolffd@0: nch = size(o,3); wolffd@0: e = zeros(1,nc,nch); wolffd@0: % for i = 1:nch wolffd@0: % for j = 1:nc wolffd@0: % if option.root wolffd@0: % e(1,j,i) = norm(d(:,j,i)); wolffd@0: % else wolffd@0: % disp('do the calc...') wolffd@0: % % e(1,j,i) = d(:,j,i)'*d(:,j,i); wolffd@0: % %tmp = mironsets(d,'Filterbank',10,'Contrast',0.1); % Change by TE, was only FB=20, no other params wolffd@0: % e2 = mirpeaks(e) wolffd@0: % [o1,o2] = mirgetdata(e); wolffd@0: % e(1,j,i) = length(o2)/mirgetdata(mirlength(d)); wolffd@0: % end wolffd@0: % end wolffd@0: % end wolffd@0: for i = 1:nch wolffd@0: for j = 1:nc wolffd@0: e(1,j,i) = length(pv{1,j,i}); wolffd@0: if strcmpi(option.normal,'Option1') wolffd@0: e(1,j,i) = e(1,j,i) *sr/size(o,1); wolffd@0: elseif strcmpi(option.normal,'Option2') wolffd@0: pvs = pv{1}; wolffd@0: high_pvs = length(find(mean(pvs)>pvs)); wolffd@0: e(1,j,i) = high_pvs(1,j,i) *sr/size(o,1); % only those which are larger than mean wolffd@0: end wolffd@0: end wolffd@0: end wolffd@0: wolffd@0: wolffd@0: wolffd@0: %function [y orig] = eachchunk(orig,option,missing,postchunk) wolffd@0: %y = mireventdensity(orig,option); wolffd@0: wolffd@0: wolffd@0: %function y = combinechunk(old,new) wolffd@0: %do = mirgetdata(old); wolffd@0: %dn = mirgetdata(new); wolffd@0: %y = set(old,'ChunkData',do+dn);