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

sound_test.m
fcs=[48 54 55 10];

load('w.mat');
load('wn.mat');

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

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;


L=nen-nst+1;
%fab=cell(L,1);
fab=cell(L,3);
fcs1=(nst:nen)+49;

n0=100;
n01=4096;
n02=n01/2;
L=nen-nst+1;

fcs1=(nst:nen)+49;

% 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

    
    

% sum:
st=zeros(n01,1);
for fcsc=1:length(fcs)
    %nst+49 -start note
    st=st+ca{fcs(fcsc)+nst+49-1}(n0:n0+n01-1);
end
%sound(st,44100)

fca=fft(st);
fabt=abs(fca(fmni:fmxi));
fabt=fabt/sum(fabt);

% see covariations:
cmv=zeros(L,1);
for fc=1:L
    cmv(fc)=sum(w(:,fc).*fabt);
end

% plot(cmv,'xg');

[tmp ind]=sort(cmv, 'descend');
ind(1:length(fcs))

Contact us at files@mathworks.com