image thumbnail
from Piano notes recognition research by Maxim Vedenyov
try to define notes from its sound

play_sep_movie.m
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);
    for fc=1:length(dr)
        [s1 Fs1]=wavread(dr(ind(fc)).name);
        s=resample(s1,2,1);
        ca{fc}=s;
     
    end
    %soundsc(ca,44100);
    
end

hp=semilogx(0,0,'b-');
xlim([10 10000]);
ym=1e5;
ylim([0 ym]);
a4n=49;
hold on;
hp1=semilogx([10],[0.3*ym],'rx');
ht=title(' ');
legend('spectum','fundamental frequency');
frr=10; % frames rate 
t=0;
tfr=0; % times for frames;
clear F;
frc=1;
sa=[];
for Lc=1:L
    ss=ca{Lc};
    sound(ss,Fs);
    fss=fft(ss);
    L2=round(length(fss)/2);
    i1=1:L2;
    fss2=fss(i1);
    f=(Fs/2)*i1/i1(end);
    set(hp,'XData',f,'Ydata',abs(fss2).^2);
    
    nc=Lc-a4n;
    ftc=440*2^(nc/12);
    
    set(hp1,'XData',[ftc]);
    
    set(ht,'string',number2note(nc))
    
    xlim([10 10000]);
    ylim([0 ym]);
    drawnow;
    
    
    t=t+length(ss)*(1/Fs);
    while 1
        F(frc)=getframe(gcf);
        frc=frc+1;
        tfr=tfr+(1/frr);
        if tfr>=t
            break;
        end
    end
    sa=[sa; ss];
    pause(length(ss)*(1/Fs));
end

movie2avi(F,'piano','compression','none','fps',frr); % uncoment this to save the movie to avi file
wavwrite(sa,Fs,'../piano_st.wav');


Contact us at files@mathworks.com