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

spectum_as_image.m
global L fc fab ind

nst=-24; % start note
nen=35; % end note

disp(' ');
disp('range:');
disp([number2note(nst) '   ' number2note(nen)]);
disp(['note numbers: ' num2str(nst) '  ' num2str(nen)]);
disp(['note order numbers: ' num2str(nst+49) '  ' num2str(nen+49)]);

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;

% make equal length specters
%t01=0.1;
%n01=round(t01*Fs);
n01=4096;
n02=n01/2;

% 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

%n0=8000;
n00=100;
L=nen-nst+1;
%fab=cell(L,1);
sm=1;
fab=zeros(L,n02);
fcs=(nst:nen)+49;
fc0=20;
fc11=1;
for fc=fcs
    cat=ca{fc};
    lcat=length(cat);
    st=floor((lcat-n00-n01)/sm); % step
    cats=zeros(n01,1);
    for i1=n00:st:(st*sm+1);
        cats=cats+cat(i1:i1+n01-1);
    end
%     fc0=ceil(60*rand);
%     cats=cats+ca{fcs(fc0)}(i1:i1+n01-1);
%     fc0=ceil(60*rand);
%     cats=cats+ca{fcs(fc0)}(i1:i1+n01-1);
%     fc0=ceil(60*rand);
%     cats=cats+ca{fcs(fc0)}(i1:i1+n01-1);
    cats=(cats-mean(cats))/std(cats);
    %soundsc(cats,44100);
    %pause(0.12);
    fct=fft(cats);
    fab(fc11,:)=abs(fct(1:n02))';
    
    fc11=fc11+1;
end

nnn=nst:nen;
fff=((0:(n02-1))/n02)*(Fs/2);

imagesc(fff,nnn,fab(:,:));
set(gca,'YDir','normal');
xlabel('frequency, Hz');
ylabel('note number');
colorbar;

% imagesc(fab)



Contact us at files@mathworks.com