wolffd@0: %sucht die datei (1) "coelebs_aufn1_ch1"unter sourcedir bei datei (2) wolffd@0: % coelebs_aufn1_ch1_01 im segmentsdir. wolffd@0: % daraufhin wird die genaue stelle des vorkommens von (2) in (1) gesucht, wolffd@0: % und in sekunden an den dateinamen angehängt; wolffd@0: wolffd@0: clear wolffd@0: global globalvars; wolffd@0: addpath('..\vogelst\k-band250905') wolffd@0: sourcedir='F:\Aufnahmen\2006-Juni-3-Remscheid-Daniel'; wolffd@0: %sourcedir='F:\Ample'; wolffd@0: %sourcedir='M:\PrograMathe\matlab\work\hiwi\vogelst\testmaterial\online2'; wolffd@0: wolffd@0: segmentsdir='F:\viele_einzelne_strophen\fringila_coelebs_buchfink\typ1'; wolffd@0: wolffd@0: %segmentsdir='F:\viele_einzelne_strophen\fringila_coelebs_buchfink\tst'; wolffd@0: %segmentsdir='M:\PrograMathe\matlab\work\hiwi\vogelst\testmaterial\online'; wolffd@0: wolffd@0: wolffd@0: wolffd@0: %---------------------------------------------z-------------zugehörige dateien suchen wolffd@0: allpaths=genpath(sourcedir); wolffd@0: data_names=dir(strcat(segmentsdir,'\*.wav')); wolffd@0: psourcedirs = explode(';',allpaths); wolffd@0: for i = 1:length(data_names) wolffd@0: ldata_names{i} = data_names(i).name; wolffd@0: end wolffd@0: wolffd@0: names_done = []; wolffd@0: relsource_files = {}; wolffd@0: for i = 1:length(psourcedirs) wolffd@0: actdir = dir(strcat(psourcedirs{i},'\*.wav')); wolffd@0: ldata_names = ldata_names(setdiff(1:length(ldata_names),names_done)); wolffd@0: for j = 1:length(ldata_names) wolffd@0: for k = 1:length(actdir) wolffd@0: if(strncmp(actdir(k).name,ldata_names{j},length(ldata_names{j})-7)) wolffd@0: names_done = [names_done j]; wolffd@0: relsource_files= cat(1,relsource_files,{[strcat(psourcedirs{i},'\',actdir(k).name)] [strcat(segmentsdir,'\',ldata_names{j})]}); wolffd@0: end wolffd@0: end wolffd@0: end wolffd@0: end wolffd@0: wolffd@0: wolffd@0: wolffd@0: oldsource=''; wolffd@0: oldsamplesource=0; wolffd@0: k=1; wolffd@0: position=zeros(size(relsource_files,1),2); wolffd@0: wolffd@0: i=1; wolffd@0: while i <= size(relsource_files,1) wolffd@0: aktsource =char(relsource_files(i,1)); wolffd@0: aktsamplesource=i; wolffd@0: %--------------------------------------------------features generieren und overhead wolffd@0: wolffd@0: if ~strcmp(aktsource,oldsource) || (aktsamplesource~=oldsamplesource) %neue quelldatei wolffd@0: aktmajstart=1; wolffd@0: siz=WAVREAD(aktsource,'size'); wolffd@0: siz=siz(1,1); wolffd@0: aktmajpointer = min(siz,globalvars.maxaudiodatalen); wolffd@0: [aktdata,sr,nbits]=wavread(aktsource,[aktmajstart aktmajpointer]); wolffd@0: oldsource=aktsource; wolffd@0: if length(aktdata(1,:)) > 1 wolffd@0: aktdata = aktdata(:,1); wolffd@0: end wolffd@0: windowsz=floor(sr/5); wolffd@0: fprintf('generating features for fast search \n'); wolffd@0: aktfeat =resample(abs(specgram(aktdata,windowsz,sr,windowsz,floor(windowsz/2))),1,40); wolffd@0: elseif (aktmajpointer < siz) && (aktsamplesource==oldsamplesource) %alte quelldatei zu lang wolffd@0: aktmajstart=aktmajstart+floor(globalvars.maxaudiodatalen/2); wolffd@0: aktmajpointer=min(aktmajpointer+floor(globalvars.maxaudiodatalen/2),siz); wolffd@0: if (aktmajstart-aktmajpointer) < windowsz wolffd@0: aktmajstart=max(aktmajstart-windowsz,1); wolffd@0: end wolffd@0: [aktdata,sr,nbits]=wavread(aktsource,[aktmajstart aktmajpointer]); wolffd@0: if length(aktdata(1,:)) > 1 wolffd@0: aktdata = aktdata(:,1); wolffd@0: end wolffd@0: fprintf('generating features for fast search \n'); wolffd@0: aktfeat =resample(abs(specgram(aktdata,windowsz,sr,windowsz,floor(windowsz/2))),1,40); wolffd@0: end wolffd@0: wolffd@0: wolffd@0: if (aktsamplesource~=oldsamplesource)%neue suchdatei wolffd@0: [aktsample,sr,nbits]=wavread(char(relsource_files(i,2))); wolffd@0: oldsamplesource=aktsamplesource; wolffd@0: if length(aktsample(1,:)) > 1 wolffd@0: aktsample = aktsample(:,1); wolffd@0: end wolffd@0: wolffd@0: if(length(aktsample)>=windowsz) wolffd@0: aktsamplefeat =resample(abs(specgram(aktsample(1:windowsz),windowsz,sr,windowsz,floor(windowsz/2))),1,40); wolffd@0: for j=1:size(aktfeat,2) wolffd@0: di(j)=dist(aktfeat(:,j),aktsamplefeat(:,1)); wolffd@0: end wolffd@0: bdi = di>mean(di); wolffd@0: else wolffd@0: fprintf('fast search not possible \n'); wolffd@0: bdi=ones(1,size(aktfeat,2)) wolffd@0: end wolffd@0: fprintf(strcat('searching for \n', escape(aktsource ),' in \n' ,escape(char(relsource_files(i,2))),'\n' )); wolffd@0: end wolffd@0: wolffd@0: wolffd@0: %---------------------- bestandteil lokalisieren (k mismatches), ausreichende minmatches wolffd@0: minmatches=length(aktsample); wolffd@0: found=0; wolffd@0: aktpointer=1; wolffd@0: aktstart=1; wolffd@0: len = length(aktdata); wolffd@0: len2=length(aktsample); wolffd@0: while ((aktstart+len2)<=len) &&~found wolffd@0: mismatches=0; wolffd@0: aktstart=aktstart+1; wolffd@0: aktpointer=aktstart; wolffd@0: while (aktpointer <= len)&&(mismatches = minmatches wolffd@0: fprintf('found'); wolffd@0: position(i,:)=[floor((aktmajstart-1+aktstart)/sr) floor((aktmajstart-1+aktpointer)/sr)] wolffd@0: found=1; wolffd@0: break wolffd@0: end wolffd@0: end wolffd@0: end wolffd@0: if(position(i,2)~=0) wolffd@0: wolffd@0: %---------------------------------------------zugehörige infos in dateien schreiben wolffd@0: newfilename= strcat(substr(char(relsource_files(i,2)),0,length(relsource_files(i,2))-5),'__',... wolffd@0: s_to_hhmmss(position(i,1)),'-',s_to_hhmmss(position(i,2)),'.wav'); wolffd@0: movefile(char(relsource_files(i,2)),newfilename); wolffd@0: wolffd@0: filetoopen=strcat(newfilename,'.txt'); wolffd@0: ftoex=dir(filetoopen); wolffd@0: if(length(ftoex)==0) wolffd@0: FID = fopen(filetoopen,'w'); wolffd@0: fprintf(FID,'%s','annotations for '); wolffd@0: fprintf(FID,'%s',newfilename); wolffd@0: fprintf(FID,'\n'); wolffd@0: fprintf(FID,'%s','sourcefile available at'); wolffd@0: fprintf(FID,'\n'); wolffd@0: fprintf(FID,'%s',char(relsource_files(i,1))); wolffd@0: fprintf(FID,'\n'); wolffd@0: fprintf(FID,'%s','time of occurrence in hhmmss format:'); wolffd@0: fprintf(FID,'\n'); wolffd@0: fprintf(FID,'%s',s_to_hhmmss(position(i,1))); wolffd@0: fprintf(FID,'%s','-'); wolffd@0: fprintf(FID,'%s',s_to_hhmmss(position(i,2))); wolffd@0: fprintf(FID,'\n'); wolffd@0: fprintf(FID,'%s','in seconds:'); wolffd@0: fprintf(FID,'\n'); wolffd@0: fprintf(FID,'%s',sprintf('%d',position(i,1))); wolffd@0: fprintf(FID,'\n'); wolffd@0: fprintf(FID,'%s',sprintf('%d',position(i,2))); wolffd@0: fprintf(FID,'\n'); wolffd@0: fprintf(FID,'%s','comments:'); wolffd@0: wolffd@0: fclose(FID); wolffd@0: end wolffd@0: wolffd@0: i=i+1; wolffd@0: elseif(aktmajpointer==siz) wolffd@0: i=i+1; wolffd@0: end wolffd@0: end wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: