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,注意中间有黑键,你也可以根据下表来查询某个音的频率。
输入乐谱(midi),生成音乐,matlab程序我倒见过,好像是合成长号的曲子。识别曲子,生成乐谱,这方面的东西从技术上来讲,限制条件比较多,难以完美的实现。从音乐乐曲转换成midi的软件见过,效果并不不太好。转换成乐谱,难度就更大,首先是节拍,小节划分等,难以量化。单一乐器的曲子倒好说,合奏的曲子想都别想。
matlab这方面的现成的源代码,没有见过。可提示一下思路,主要是计算基音周期,确定各个音符的音高,音长,分析节拍,调号,小节划分等,对单一乐器的演奏曲子,这方面的东西实现起来,并不是特别困难。
[p,fs,bits]=wavread('E:\02-Convolution\female_voice_lab2')N=length(p)
n=1:N
M=p(:,1)
t1=0.1t2=0.05
N1=0.1*fs
N2=0.05*fs
ht=zeros(1,N)
ht(1)=1,ht(N1)=0.8,ht(N2)=0.6
subplot(2,1,1)
plot(ht)axis([0 9000 0 1])
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)