#!/usr/bin/octave

function tempo_rec=calcula_tempo()
%Se ha utilizado que el valor no válido -5 para una nota midi quiere decir silencio
%(el rango de notas válidas es desde 0 hasta 127)
%previo=zeros(p,1);	%Las p muestras anteriores al segmento

ilegal=-5;

config=leer();
config.advance=config.segment_size;  %el avance en muestras lo hago igual al tamaño del segmento xq solo es para calcular
        %el tempo
[y,Fs,BITS]=wavread(config.file_input);
energia_media=sum(y.*y)/length(y);
l=0;	%el indice que recorrerá el segmento

tam_maximo=0;
tam_local=0;
ticks=0;
nota_vieja=ilegal;   	%-5 es el valor que he predeterminado
						%para indicar que viene de silencio	(todavía no ha sonados nada)
prim_even=1;		 	%Para saber que es el primer evento
previo=zeros(1,config.num_lpc);
longitud=length(y);
while l*config.advance+config.segment_size<=longitud
	%todo esto mientras no es el ultimo segmento
	%a_imprimir=(l*dm+ts)*100/longitud;
	segmento.actual=y(l*config.advance+1:l*config.advance+config.segment_size);	%tomo segmentos
   if (config.analysis_method==7)&(l~=0)	%no lo hago (por ahorrar)
      %cuando el metodo escogido no es SIFT
      %ni (por seguridad) cuando sea el primer segmento
      segmento.previo=y(l*config.advance+1-config.num_lpc:l*config.advance);
   end
   nota_nueva=seg_a_midi(segmento,Fs,config,energia_media);
   if (nota_nueva==nota_vieja)&(nota_nueva ~= 0)
      %la misma nota sigue
      tam_local=tam_local+1;
      if (tam_local > tam_maximo)
          tam_maximo=tam_local;
      end
   else
       tam_local=1;
   end
   l=l+1;
end		%del while principal


%esto lo hace en el ultimo segmenento

if nota_vieja~=ilegal

end	%no se pone un else porque no es necesario

tempo_rec=60*Fs/(tam_maximo*config.segment_size);
end
