nsn=7; % number of simultanoise notes
%fcs=[60 59];
% fcs=ceil(60*rand(nsn,1));
% fcsr=sort(fcsr);
tm=5000;
load('w.mat');
%load('wn.mat');
nst=-24; % start note
nen=35; % end note
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;
L=nen-nst+1;
%fab=cell(L,1);
fab=cell(L,3);
fcs1=(nst:nen)+49;
n0=100;
n01=4096;
n02=n01/2;
L=nen-nst+1;
n0max=min(lca)-n01-1;
n0min=100;
fcs1=(nst:nen)+49;
% 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
i60=1:60;
ca1=0;
ia=0;
tm=5000;
hwb=waitbar(0,' ');
tic;
for tc=1:tm
rp=randperm(60);
r60=i60(rp(1:nsn));
fcs=r60';
%fcs=ceil(60*rand(nsn,1));
fcs=sort(fcs);
% sum:
st=zeros(n01,1);
for fcsc=1:length(fcs)
%nst+49 -start note
n0=n0min+(n0max-n0min)*rand;
n0=round(n0);
st=st+ca{fcs(fcsc)+nst+49-1}(n0:n0+n01-1);
end
%sound(st,44100)
fca=fft(st);
fabt=abs(fca(fmni:fmxi));
%fabt=real(fca(fmni:fmxi));
%fabt=fca(fmni:fmxi);
%fabt=fabt/sum(fabt);
fabt=fabt/sqrt(sum(abs(fabt).^2));
% see covariations:
cmv=zeros(L,1);
for fc=1:L
cmv(fc)=sum(w(:,fc).*fabt);
end
% plot(cmv,'xg');
[tmp ind]=sort(cmv, 'descend');
fcsr=ind(1:length(fcs));
fcsr=sort(fcsr);
if all(fcsr==fcs)
ca1=ca1+1;
else
ia=ia+1;
end
jr=tc/tm;
toc1=toc;
v=jr/toc1; % velosity
et=(1-jr)/v; % estimated time
waitbar(jr,hwb,['ca: ' num2str(100*ca1/(ca1+ia),'%3.4f') ' % ' ' et:' num2str(et,'%10.0f')]);
end