清华大学谷源涛MATLAB音乐合成

清华大学谷源涛MATLAB音乐合成

ID:37567147

大小:737.60 KB

页数:15页

时间:2019-05-25

清华大学谷源涛MATLAB音乐合成_第1页
清华大学谷源涛MATLAB音乐合成_第2页
清华大学谷源涛MATLAB音乐合成_第3页
清华大学谷源涛MATLAB音乐合成_第4页
清华大学谷源涛MATLAB音乐合成_第5页
资源描述:

《清华大学谷源涛MATLAB音乐合成》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、大作业一音乐合成第一部分1.1合成东方红合成源程序如下,程序参考谷老师上课内容(自己编完代码后跟老师的差不多,而且实在是不知道还能做什么改进了。。。)functionk=play()rhythm=[55621162;000000-10;0.50.250.2510.50.250.251;];y=generaterhythm(rhythm,8);sound(y);endfunctiony=generaterhythm(rhythm,basetune)fs=8000;soundpos=[024579110:12];y=zeros

2、(1,sum(rhythm(3,:))*fs+1);curpos=1;forcount=1:length(rhythm)cursoundname=rhythm(1,count);cursoundpos=soundpos(cursoundname);curfreq=220*2.^((cursoundpos+basetune+3)/12+rhythm(2,count));cursound=generatetune(curfreq,rhythm(3,count),fs);y(1,curpos:(curpos+length(cur

3、sound)-1))=cursound;curpos=curpos+length(cursound);endendfunctiony=generatetune(freq,time,fs)t=0:1/fs:(time-1/fs);y=zeros(1,length(t));y=sin(t*freq*2*pi);end1.2用包络修正每个乐音,消除噪音在1.1中听到有“啪”的杂声,下面通过加包络来消噪音。使“啪”音效出的最简便的方法是,为每个音加上外形相似的包络,使不同音的连接处的响度为零即可,题目中提示使用e指数保罗所以,我们

4、添加包络程序如下functiony=amendment(p,l)%pisstartpositionofasyllableandlislengthofasyllableifp/l<0.7y=p/l*exp(-7*p/l);elsey=0.7/0.3*exp(-4.9)*(1-p/l);endend程序运行后,可明显发现没有“啪”音的出现,但由于不管音的长短,最终都要衰减到零,这使音乐的真实感大大降低。加过包络后的波形图如图1.2.1所示图1.2.1在两个不同音的交界处放大图如1.2.2所示,可见由于交界处响度为零,所以不会出

5、现大的高频分量图1.2.2在试验程序中发现,当交界处的响度非常小而非零时,“啪”音也不会出现,例如当交界处响度为最大的10%时,“啪”也会消除,波形如图1.2.3所示图1.2.31.3用最简单的方法将1.2中的音乐分别升高和降低一个八度,并用resample函数将上述音乐升高半个音阶根据乐理知识,每一个整八度的频率差为2倍,也就是说,升高一个八度就是把频率改为原来的两倍,降低一个八度是将频率改为原来的二分之一,所以在频率标记上乘以2或除以2即可。例如y=sin(t*2*freq*2*pi);%twicefrequencyy

6、=sin(t*freq*pi);%halffrequency若要上升半个音阶,则频率上升为原来的倍即可,所以利用resample函数对原数据进行采样率改变,即y=resample(y,100,106);但此时,由于采样率的改变,每个音的储蓄时间会相对缩短至倍,由于很接近1,所以影响不大。1.4在1.2中加入适量谐波,重新生成音乐仅修改generaterune函数即可,修改如下functiony=generatetune(freq,time,fs)c=[10.20.3];t=0:1/fs:(time-1/fs);y=zero

7、s(1,length(t));forcount=1:3;y=y+c(count)*sin(t*freq*count*2*pi);endforcount1=1:length(y)y(1,count1)=20*y(1,count1)*amendment(count1,length(y));end1.5自选合成音乐KissGoodbye副歌部分曲调为C,2/4拍程序如下functionk=play()rhythm=[54323435217121654346134613432;011111101101110111101110111

8、11;0.50.50.50.50.50.510.50.50.50.50.50.510.50.50.50.50.50.50.50.50.50.50.50.50.50.51];y=generaterhythm(rhythm,8);sound(y);endfunctiony=generaterhythm(rh

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。