Matlab模擬鋼琴識別琴譜

音符頻率對應表

音符 頻率/HZ 半週期/us 音符 頻率/HZ 半週期/us
低1DO 262 1908 #4FA# 740 0676
#1DO# 277 1805 中5SO 784 0638
低2RE 294 1700 #5SO# 831 0602
#2RE# 311 1608 中6LA 880 0568
低3M 330 1516 #6LA# 932 0536
低4FA 349 1433 中7SI 988 0506
#4FA# 370 1350 高1DO 1046 0478
低5SO 392 1276 #DO# 1109 0451
#5SO# 415 1205 高2RE 1175 0426
低6LA 440 1136 #2RE# 1245 0402
#6LA# 466 1072 高3M 1318 0372
低7SI 494 1012 高4FA 1397 0358
中1DO 523 0956 #4FA# 1480 0338
#1DO# 554 0903 高5SO 1568 0319
中2RE 578 0842 #5S0# 1661 0292
#2RE# 622 0804 高6LA 1760 0284
中3M 659 0759 #6LA# 1865 0268
中4FA 698 0716 高7SI 1976

("#"表示半音,用於上升或下降半個音)

我們知道用Matlab的sound函數可以發聲,但是那種聲音是很難聽的“電話鈴聲”,那該怎麼模擬成鋼琴音色呢?

每個音符有固定的基音頻率,表格如上。

matlab實測

接下來,我們打開matlab

f=440;
fs=8000;
t=1/fs:1/fs:1;
x=sin(2*pi*f*t);
sound(x,fs);

這樣點擊運行的話,是一聲電話音

%matlab 唱生日快樂
Fs = 8192;

%1-1
y1 = gen_wave(5,0.5,0.5);
y2 = gen_wave(5,0.5,0.5);
y3 = gen_wave(6,1,0.5);
y4 = gen_wave(5,1,0.5);
y5 = gen_wave(1,1,1);
y6 = gen_wave(7,2,0.5);
y = [y1,y2,y3,y4,y5,y6];

y1 = gen_wave(5,0.5,0.5);
y2 = gen_wave(5,0.5,0.5);
y3 = gen_wave(6,1,0.5);
y4 = gen_wave(5,1,0.5);
y5 = gen_wave(2,1,1);
y6 = gen_wave(1,2,1);
y = [y,y1,y2,y3,y4,y5,y6];

y1 = gen_wave(5,0.5,0.5);
y2 = gen_wave(5,0.5,0.5);
y3 = gen_wave(5,1,1);
y4 = gen_wave(3,1,1);
y5 = gen_wave(1,1,1);
y6 = gen_wave(7,1,0.5);
y7 = gen_wave(6,1,0.5);
y = [y,y1,y2,y3,y4,y5,y6,y7];

y1 = gen_wave(4,0.5,1);
y2 = gen_wave(4,0.5,1);
y3 = gen_wave(3,1,1);
y4 = gen_wave(1,1,1);
y5 = gen_wave(2,1,1);
y6 = gen_wave(1,2,1);
y = [y,y1,y2,y3,y4,y5,y6];


sound(y,Fs);
%A bit little slow
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章