1、matlab播放音乐是由sound(Y,fs,bits)函数完成的,该函数的3个参数代表输入信号、采样率、比特率。先说采样率fs的设置,人耳能够听到的声音范围是20~20000Hz。
2、根据采样定理fs只需要大于40000即可。此处采样率的设置采用了MP3的标准,即fs=44.1k.再说输入信号Y,Y一般是一个正弦波,如A*sin(2*pi*w*t)。其中A控制着声音的大小,w控制着声音的高低,t的范围控制着声音的长短,所以理论上利用这个公式可以发出任何声音,只是不能控制音色和音质比特率采用默认值即可。
3、于是用下面的公式就可以播放出标准音la:(座机电话提示音就是la,可以用来调吉他)
fs=44100;
t=0: 1/fs: 0.5;
la = sin(2*pi*440*t); (下文介绍440是怎么来的)
sound(la, fs)
4、下面介绍一下简单乐理:
音高和频率是指数的关系,它们满足下面的公式,其中p是音高,f是频率
标准音la,即钢琴的A4键,定义为p=69。音高每上升一个半音,p加1。
如上图所示,从C4到B4分别对应着do re mi fa sol la xi,它们的p值分别为 60 62 64 65 67 69 71,注意中间有黑键,你也可以根据下表来查询某个音的频率。
clear;clc;
A4=440;%标准音A4
pt=44100;p0=pt/2;%频率
scale12=A4/2^(9/12)*2.^((0:11)/12);%十二平均律
map=[1 3 5 6 8 10 12];%七音符
%乐谱
score=[1 1 5 5 6 6 5,...do do sol sol la la sol-
4 4 3 3 2 2 1,...fa fa mi mi re re do-
5 5 4 4 3 3 2,...sol sol fa fa mi mi re-
5 5 4 4 3 3 2,...sol sol fa fa mi mi re-
1 1 5 5 6 6 5,...do do sol sol la la sol-
4 4 3 3 2 2 1];%fa fa mi mi re re do-
%节拍
rhythm=repmat([1 1 1 1 1 1 2],1,6);
%歌词
lyric=['一闪一闪亮晶晶' ...Twinkle twinkle little star
'满天都是小星星' ...How I wonder what you are
'挂在天上放光明' ...Up above the world so high
'好像许多小眼睛' ...like a diamond in the sky
'一闪一闪亮晶晶' ...Twinkle twinkle little star
'满天都是小星星'];%How I wonder what you are
%下面开始播放
for i=1:length(score)
fprintf(1,'%c',lyric(i))
wavplay(sin((1:rhythm(i)*p0)/pt*2*pi*scale12(map(score(i)))),pt);
if mod(i,7)==0
fprintf(1,'\n');
end
end