global L fc fab ind
nsn=4; % number of simultanoise notes
nst=-24; % start note
nen=35; % end note
load('w.mat');
disp(' ');
disp('range:');
disp([number2note(nst) ' ' number2note(nen)]);
disp(['note numbers: ' num2str(nst) ' ' num2str(nen)]);
disp(['note order numbers: ' num2str(nst+49) ' ' num2str(nen+49)]);
Fs=44100;
dr=dir('*.wav');
if length(dr)>0
nm=[];
for fc=1:length(dr)
fln=dr(fc).name;
lfln=length(fln);
ns=fln(1:lfln-4);
nm=[nm str2num(ns)];
end
[nms ind]=sort(nm);
L=length(dr);
ca=cell(L,1);
lca=zeros(L,1);
for fc=1:length(dr)
[s1 Fs1]=wavread(dr(ind(fc)).name);
s=resample(s1,2,1);
ca{fc}=s;
lca(fc)=length(s);
end
%soundsc(ca,44100);
end
Fs=Fs1*2;
% make equal length specters
%t01=0.1;
%n01=round(t01*Fs);
n01=4096;
n02=n01/2;
% for spectrum cut (not need all):
fmx=440*2^((nen+1)/12); % maximal frequency
fmxi=round(n02*fmx/(Fs/2)); % maximal index
fmn=440*2^((nst-1)/12); % maximal frequency
fmni=round(n02*fmn/(Fs/2)); % minimal index
nfi=fmxi-fmni+1; % number of elements in cuted spectrum
%n0=8000;
n00=100;
n0=100;
L=nen-nst+1;
%fab=cell(L,1);
fab=cell(L,3);
fcs=(nst:nen)+49;
for sc=1:3
fc11=1;
for fc=fcs
i1=n00+1+(sc-1)*n01;
i2=n00+sc*n01;
lcat=length(ca{fc});
if i2>lcat;
i2=lcat;
i1=i2-n01+1;
end
%catmp=ca{fc}(n0:n0+n01-1);
catmp=ca{fc}(i1:i2);
%catmp=ca{fc}(n0:n0+n01-1);
fca=fft(catmp);
%fabt=abs(fca(1:(n01/2)));
fabt=abs(fca(fmni:fmxi));
fab{fc11,sc}=fabt/sum(fabt);
fc11=fc11+1;
end
end
cl=[1 0 0;
0 1 0;
0 0 1;
0 0 0;
0.5 0.5 0];
% ii=1:nsnc; % start position of indexes, array(ind(ii(...)))
% hps=zeros(1,nsnc);
% for n1=1:nsnc
% hps(n1)=plot(ii(n1),0,'x');
% hold on;
% set(hps(n1),'color',cl(n1,:));
% end
% xlim([0 L]);
% drawnow;
smc=0; % simullar counter
nv=1; % number of variants
nvm=25852861;
hwb=waitbar(0,' ');
tic;
sma=cell(1,nsn-1); % simular notes
%sma{1} 2-simulatniuse
%sma{2} 3-simulatniuse
%sma{3} 4-simulatniuse
for nsnc=2:nsn % 2-simulatniuse, 3-simulatniuse, 4-simulatniuse
sma{nsnc-1}=[];
%for nsnc=2
for fc=1:L
ind=find((1:L)~=fc); % exclude itself
ow=sum(w(:,fc).*fab{fc,1});
ii=1:nsnc; % start position of indexes, array(ind(ii(...)))
while true
% processing:
% sum:
st=zeros(n01,1);
for inds=ind(ii)
%nst+49 -start note
%n0=n0min+(n0max-n0min)*rand;
%n0=round(n0);
st=st+ca{inds+nst+49-1}(n0:n0+n01-1);
end
fca=fft(st);
fabt=abs(fca(fmni:fmxi));
fabt=fabt/sum(fabt);
nw=sum(w(:,fc).*fabt);
if nw>ow
smc=smc+1;
sma{nsnc-1}=[sma{nsnc-1}; [fc ind(ii) ow nw]];
end
if mod(nv,5000)==0
jr=nv/nvm;
toc1=toc;
v=jr/toc1; % velosity
et=(1-jr)/v; % estimated time
waitbar(jr,hwb,['jr: ' num2str(100*jr,'%3.2f') ' % ' ' et:' num2str(et,'%10.0f') ' ' 'smc:' num2str(smc) ' ' 'nsnc:' num2str(nsnc)]);
end
nv=nv+1;
%%if ii(1)>=45
% for n1=1:nsnc
% set(hps(n1),'XData',ii(n1));
% end
% %pause(0.01);
% drawnow;
%%end
% cange indexes:
if ii(end)~=(L-1)
ii(end)=ii(end)+1;
else
gbr=false; % global break
for nb=(nsnc-1):-1:1
if (ii(nb+1)-ii(nb))>=2
% has space
ii(nb)=ii(nb)+1;
ii(nb+1)=ii(nb)+1; % return
break;
else
% no space:
if nb==1
gbr=true;
break;
end
end
end
if gbr
break;
end
end
end
end
end
jr=nv/nvm;
toc1=toc;
v=jr/toc1; % velosity
et=(1-jr)/v; % estimated time
waitbar(jr,hwb,['jr: ' num2str(100*jr,'%3.2f') ' % ' ' et:' num2str(et,'%10.0f') ' ' 'smc:' num2str(smc) ' ' 'nsnc:' num2str(nsnc)]);
toc
nv
save('sma.mat','sma');