wolffd@0: function varargout = mirmidi(orig,varargin) wolffd@0: % m = mirmidi(x) converts into a MIDI sequence. wolffd@0: % Option associated to mirpitch function can be specified: wolffd@0: % 'Contrast' with default value c = .3 wolffd@0: wolffd@0: thr.key = 'Contrast'; wolffd@0: thr.type = 'Integer'; wolffd@0: thr.default = .3; wolffd@0: option.thr = thr; wolffd@0: wolffd@0: mono.key = 'Mono'; wolffd@0: mono.type = 'Boolean'; wolffd@0: mono.default = 1; wolffd@0: option.mono = mono; wolffd@0: wolffd@0: release.key = {'Release','Releases'}; wolffd@0: release.type = 'String'; wolffd@0: release.choice = {'Olivier','Valeri',0,'no','off'}; wolffd@0: release.default = 'Valeri'; wolffd@0: option.release = release; wolffd@0: wolffd@0: specif.option = option; wolffd@0: wolffd@0: varargout = mirfunction(@mirmidi,orig,varargin,nargout,specif,@init,@main); wolffd@0: wolffd@0: wolffd@0: function [x type] = init(x,option) wolffd@0: try wolffd@0: hz2midi(440); wolffd@0: catch wolffd@0: mirerror('MIRMIDI','MIDItoolbox does not seem to be installed.'); wolffd@0: end wolffd@0: if not(isamir(x,'mirmidi')) && not(isamir(x,'mirpitch')) wolffd@0: if isa(x,'mirdesign') && not(option.mono) wolffd@0: x = set(x,'SeparateChannels',1); wolffd@0: end wolffd@0: o = mironsets(x,'Attacks','Releases',option.release); wolffd@0: x = {o x}; wolffd@0: end wolffd@0: type = 'mirmidi'; wolffd@0: wolffd@0: wolffd@0: function m = main(x,option,postoption) wolffd@0: if iscell(x) %not(isamir(x,'mirmidi')) wolffd@0: o = x{1}; wolffd@0: a = x{2}; wolffd@0: s = mirsegment(a,o); wolffd@0: x = mirpitch(s,'Contrast',option.thr,'Sum',0); wolffd@0: do = get(o,'PeakVal'); wolffd@0: da = get(o,'AttackPos'); wolffd@0: dr = get(o,'ReleasePos'); wolffd@0: df = get(o,'FramePos'); wolffd@0: else wolffd@0: do = NaN; wolffd@0: end wolffd@0: dp = get(x,'Data'); wolffd@0: %fp = get(x,'FramePos'); wolffd@0: nmat = cell(1,length(dp)); wolffd@0: for i = 1:length(dp) wolffd@0: nmat{i} = []; wolffd@0: for j = 2:length(dp{i}) wolffd@0: tij = mean(df{i}{1}(:,da{i}{1}{1}(j-1))); wolffd@0: dij = mean(df{i}{1}(:,dr{i}{1}{1}(j-1))) - tij; wolffd@0: if not(iscell(do)) wolffd@0: vij = 120; wolffd@0: else wolffd@0: vij = round(do{i}{1}{1}(j-1)/max(do{i}{1}{1})*120); wolffd@0: end wolffd@0: for k = 1:size(dp{i}{j},3) wolffd@0: for l = 1:size(dp{i}{j},2) wolffd@0: for n = 1:length(dp{i}{j}{1,l,k}) wolffd@0: f = dp{i}{j}{1,l,k}(n); wolffd@0: p = round(hz2midi(f)); wolffd@0: nmat{i} = [nmat{i}; tij dij 1 p vij tij dij]; wolffd@0: end wolffd@0: end wolffd@0: end wolffd@0: end wolffd@0: end wolffd@0: m = class(struct,'mirmidi',mirdata(x)); wolffd@0: m = set(m,'Data',nmat);