wolffd@0: function varargout = mirkeysom(orig,varargin) wolffd@0: % ks = mirkeysom(x) projects a chromagram on a self-organizing map. wolffd@0: % Creates a pseudocolor map showing the projection of chromagram onto a wolffd@0: % self-organizing map trained with the Krumhansl-Kessler profiles (modified wolffd@0: % for chromagrams). Colors correspond to Pearson correlation values. wolffd@0: % References: wolffd@0: % Toiviainen, P. & Krumhansl, C. L. (2003). Measuring and modeling wolffd@0: % real-time responses to music: the dynamics of tonality induction. wolffd@0: % Perception, 32(6), 741-766. wolffd@0: % Krumhansl, C. L., & Toiviainen, P. (2001) Tonal cognition. wolffd@0: % In R. J. Zatorre & I. Peretz (Eds.), The Biological Foundations of Music. wolffd@0: % Annals of the New York Academy of Sciences. wolffd@0: wolffd@0: % filename.key = 'File'; wolffd@0: % filename.type = 'String'; wolffd@0: % filename.default = 0; wolffd@0: % option.filename = filename; wolffd@0: wolffd@0: specif.option = struct; wolffd@0: specif.defaultframelength = 1; wolffd@0: specif.defaultframehop = .5; wolffd@0: wolffd@0: varargout = mirfunction(@mirkeysom,orig,varargin,nargout,specif,@init,@main); wolffd@0: wolffd@0: wolffd@0: function [c type] = init(orig,option) wolffd@0: c = mirchromagram(orig,'Normal'); wolffd@0: type = 'mirkeysom'; wolffd@0: wolffd@0: wolffd@0: function s = main(c,option,postoption) wolffd@0: if iscell(c) wolffd@0: c = c{1}; wolffd@0: end wolffd@0: load keysomaudiodata; wolffd@0: m = get(c,'Magnitude'); wolffd@0: disp('Projecting the chromagram to a self-organizing map...') wolffd@0: z = cell(1,length(m)); wolffd@0: p = cell(1,length(m)); wolffd@0: for i = 1:length(m) wolffd@0: mi = m{i}; wolffd@0: if not(iscell(mi)) wolffd@0: mi = {mi}; wolffd@0: end wolffd@0: zi = cell(1,length(mi)); wolffd@0: pi = cell(1,length(mi)); wolffd@0: for j = 1:length(mi) wolffd@0: mj = mi{j}; wolffd@0: zj = zeros(24,size(mj,2),size(mj,3),36); wolffd@0: pi{j} = zeros(24,size(mj,2),size(mj,3),36); wolffd@0: for k = 1:size(mj,2) wolffd@0: for l = 1:size(mj,3) wolffd@0: for kk=1:36 wolffd@0: for ll=1:24 wolffd@0: tmp = corrcoef([mj(:,k,l) somw(:,kk,ll)]); wolffd@0: zj(ll,k,l,kk) = tmp(1,2); wolffd@0: end wolffd@0: end wolffd@0: end wolffd@0: end wolffd@0: zi{j} = zj; wolffd@0: end wolffd@0: z{i} = zi; wolffd@0: p{i} = pi; wolffd@0: end wolffd@0: s = class(struct,'mirkeysom',mirdata(c)); wolffd@0: s = purgedata(s); wolffd@0: s = set(s,'Title','Key SOM','Abs','','Ord','','Weight',z,'Pos',p); wolffd@0: %if option.filename wolffd@0: % mov = display(s,option.filename); wolffd@0: %else wolffd@0: % mov = display(s); wolffd@0: %end wolffd@0: %s = {s,mov};