function midi=seg_a_midi(segmento,Fs,config,energia_media)
%function midi=seg_a_midi(segmento,previo,Fs,metodo,fmax,fmin,p,energia_media,silen,porcentaje,x)
segmento.actual=segmento.actual-mean(segmento.actual); %le he quitado la continua
if sum(segmento.actual.*segmento.actual)/length(segmento.actual)<energia_media*config.percen_silen/100
   %Se evalúa la energía del segmento y así no hay que pasar por un
   %análisis más costoso, aunque después del análisis también se puede
   %deducir que era una nota no-válida
   midi=-5;
   config.analysis_method=-30;	%así no hace ningún otro análisis
   %(tampoco estropeo nada al ser una variable local)
endif
    %plot(segmento)
    %pause
if config.analysis_method==1;	%FFT
	%transformada de fourier
	%no aplico Hamming porque lo que hace es eliminar los lóbulos
	%(no importan los lóbulos)
    Transf=abs(fft(segmento.actual));
    Transf=Transf(1:length(Transf)/2);
     %plot(Transf)
    %pause
    num_f_max=round((config.freq_max*length(Transf)-1)/(Fs));
    num_f_min=round((config.freq_min*length(Transf)-1)/(Fs));
    [y,b]=max(Transf(num_f_min:num_f_max));
    freq=(num_f_min+b-1)*Fs/length(segmento);
    midi=freqmid(freq);


elseif config.analysis_method==2    %FFT con paso-bajo
    %transformada de fourier
	%no aplico Hamming porque lo que hace es eliminar los lóbulos
	%(no importan los lóbulos)
    Transf=abs(fft(segmento.actual));
    Transf=Transf(1:length(Transf)/2);
    num_f_max=round((config.freq_max*length(Transf)-1)/(Fs));
    num_f_min=round((fconfig.freq_min*length(Transf)-1)/(Fs));
    x=(linspace(1,0,length(Transf)))';
    Transf=x.*Transf;
%    plot(Transf)
 %   pause
    [y,b]=max(Transf(num_f_min:num_f_max));
    freq=(num_f_min+b-1)*Fs/length(segmento.actual);
    midi=freqmid(freq);

elseif config.analysis_method==3 %%FFt con paso-bajo suave
    %transformada de fourier
	%no aplico Hamming porque lo que hace es eliminar los lóbulos
	%(no importan los lóbulos)
    Transf=abs(fft(segmento.actual));
    Transf=Transf(1:length(Transf)/2);
    num_f_max=round((freq_max*length(Transf)-1)/(Fs));
    num_f_min=round((freq_min*length(Transf)-1)/(Fs));
    x=(linspace(1,0.5,length(Transf)))';
    Transf=x.*Transf;
%     plot(Transf)
 %   pause
    [y,b]=max(Transf(num_f_min:num_f_max));
    freq=(num_f_min+b-1)*Fs/length(segmento.actual);
    midi=freqmid(freq);


elseif config.analysis_method==4			%Autocorrelación bias
    segmento.actual=clip(segmento.actual,config.center_clip_percen);	%Le he quitado el x% antes de hacer autocorr
    R=autocorr(segmento.actual);
    %=R((length(segmento)):end);	%solamente la positiva
    [a,b]=max(R(round(Fs/config.freq_max):round(Fs/config.freq_min)));	%la maxima entre las frecuencias de interes
    b=b+round(Fs/config.freq_max)-1;	%b está en muestras
    %plot(R)
   %pause
   if (R(b)>R(b-1))&(a>((max(R))*config.percen_autocor/100))
      %Se exige que el valor máximo sobrepase en un porcentaje al energía
      %y que además sea creciente en ese punto
      midi=freqmid(Fs/b);
   else
      %fprintf('silencio\n')
      midi=-5;	%silencio
   endif
   %pause


elseif config.analysis_method==5			%Autocorrelación bias
    segmento=clip(segmento.actual,x);	%Le he quitado el x% antes de hacer autocorr
    R=autocor(segmento.actual);
    %=R((length(segmento)):end);	%solamente la positiva
    [a,b]=max(R(round(Fs/config.freq_max):round(Fs/config.freq_min)));	%la maxima entre las frecuencias de interes
    b=b+round(Fs/config.freq_max)-1;	%b está en muestras
    %plot(R)
   %pause
   if (R(b)>R(b-1))&(a>((max(R))*config.percen_autocor/100))
      %Se exige que el valor máximo sobrepase en un porcentaje al energía
      %y que además sea creciente en ese punto
      midi=freqmid(Fs/b);
   else
      %fprintf('silencio\n')
      midi=-5;	%silencio
   endif
   %pause

elseif config.analysis_method==6			%Autocorrelación unbias
    R=autocor(segmento.actual);
    divisor=[length(R):-1:1]';
    R=R./([length(R):-1:1]');
    [a,b]=max(R(round(Fs/config.freq_max):round(Fs/config.freq_min)));	%la maxima entre las frecuencias de interes
    b=b+round(Fs/config.freq_max);	%b esta en muestras
    midi=freqmid(Fs/b);

elseif config.analysis_method==7			%Algoritmo SIFT
L=lpc(segmento.actual,config.num_lpc);	%calculo coeficientes lpc
para_calculo_E=[segmento.previo' segmento.actual'];	%para calcular la Excitación hacen falta p muestras previas
%size(para_calculo_E)
%plot(segmento)
%title('segmento')
%pause

E=conv(para_calculo_E,L);	%Calculo la excitación E
E=E(1:(end-config.num_lpc-1));
%plot(E)
%pause
E=E-mean(E);	%le quito la continua
E=clip(E,config.center_clip_percen);	%le quito el x%
%plot(E)
%pause
R=autocor(E); %Se podria usar 'biased' pero da peores resultados, por eso no se implementa
%R=R((length(E)):end);	%solamente la positiva
%plot(R)
%pause
[a,b]=max(R(round(Fs/config.freq_max):round(Fs/config.freq_min)));	%la maxima entre las frecuencias de interes 
b=b+round(Fs/config.freq_max)-1;	%b está en muestras
%plot(R)
if (R(b)>R(b-1))&(a>((max(R))*config.percen_autocor/100))
	%Se exige que el valor máximo sobrepase en un porcentaje al energía
	%y que además sea creciente en ese punto
	midi=freqmid(Fs/b);
else
	midi=-5;%silencio
endif
endif
  
endfunction
