Daniel@0: function mirsave(a) Daniel@0: Daniel@0: d = get(a,'Data'); Daniel@0: if isa(a,'mirpitch') Daniel@0: amp = get(a,'Amplitude'); Daniel@0: end Daniel@0: n = get(a,'Name'); Daniel@0: t = get(a,'Title'); Daniel@0: c = get(a,'Channels'); Daniel@0: fp = get(a,'FramePos'); Daniel@0: out = cell(1,length(d)); Daniel@0: Daniel@0: for k = 1:length(d) Daniel@0: dk = d{k}; Daniel@0: if not(iscell(dk)) Daniel@0: dk = {dk}; Daniel@0: end Daniel@0: out = []; Daniel@0: for l = 1:size(dk{1},3) Daniel@0: for i = 1:length(dk) Daniel@0: di = dk{i}; Daniel@0: if isa(a,'mirpitch') Daniel@0: ampi = amp{k}{i}; Daniel@0: end Daniel@0: synth = zeros(1,ceil((fp{k}{i}(end)-fp{k}{i}(1))*44100)+1); Daniel@0: for j = 1:size(di,2) Daniel@0: if iscell(di) Daniel@0: dj = di{j}; Daniel@0: else Daniel@0: dj = di(:,j); Daniel@0: end Daniel@0: dj(isnan(dj)) = 0; Daniel@0: ampj = zeros(size(dj)); Daniel@0: if iscell(ampi) Daniel@0: ampj(1:size(ampi{j})) = ampi{j}; Daniel@0: else Daniel@0: ampj(1:size(ampi(:,j))) = ampi(:,j); Daniel@0: end Daniel@0: if not(isempty(dj)) Daniel@0: k1 = floor((fp{k}{i}(1,j)-fp{k}{i}(1))*44100)+1; Daniel@0: k2 = floor((fp{k}{i}(2,j)-fp{k}{i}(1))*44100)+1; Daniel@0: if isa(a,'mirpitch') Daniel@0: ampj = repmat(ampj,1,k2-k1+1); Daniel@0: else Daniel@0: ampj = ones(size(dj),k2-k1+1); Daniel@0: end Daniel@0: synth(k1:k2) = synth(k1:k2) ... Daniel@0: + sum(ampj.*sin(2*pi*dj*(0:k2-k1)/44100),1) ... Daniel@0: .*hann(k2-k1+1)'; Daniel@0: end Daniel@0: end Daniel@0: out = [out synth]; Daniel@0: if size(dk{1},3)>1 Daniel@0: out = [out rand(1,10)]; Daniel@0: end Daniel@0: end Daniel@0: end Daniel@0: fout = miraudio(out,44100); Daniel@0: mirsave(fout,[n{k},'.',t]); Daniel@0: end Daniel@0: Daniel@0: Daniel@0: function oldmirsave % not used anymore Daniel@0: d = get(a,'Data'); Daniel@0: nf = length(d); Daniel@0: fp = get(a,'FramePos'); Daniel@0: nm = get(a,'Name'); Daniel@0: t = get(a,'Title'); Daniel@0: for i = 1:nf Daniel@0: nmi = nm{i}; Daniel@0: di = d{i}{1}; Daniel@0: fpi = fp{i}{1}; Daniel@0: Daniel@0: %Let's remove the extension from the original files Daniel@0: if length(nmi)>3 && strcmpi(nmi(end-3:end),'.wav') Daniel@0: nmi(end-3:end) = []; Daniel@0: elseif length(nmi)>2 && strcmpi(nmi(end-2:end),'.au') Daniel@0: nmi(end-2:end) = []; Daniel@0: end Daniel@0: n = [nmi,'.',lower(t),'.txt']; Daniel@0: Daniel@0: fid = fopen(n, 'wt'); Daniel@0: fprintf(fid,'Frame_start Frame_end Data \n'); Daniel@0: Daniel@0: for j = 1:length(di) Daniel@0: fprintf(fid,'%g %g %g \n',fpi(1,j),fpi(2,j),di(j)); Daniel@0: end Daniel@0: fclose(fid); Daniel@0: disp([n,' saved.']); Daniel@0: end