使用matlab进行简单音乐合成.docx
信号与系统-综合试验之音乐合成(1)请依据东方红片断的简诏和“十二平均律”计算出该片断中各个乐音的频隼,AMAT1.AB中生成幅度为1、抽样频率为8kHz的正弦信号表示这些乐音。isound函数播放每个乐音,听一听音调是否正确。最终用这一系列乐音信号拼出东方红片断,留意限制每个乐音持续的时间要符合节拍,Jf1.sound播放你合成的音乐,听起来感觉如何?代码如F:f-8000;t2=(0:1./f:1.;t4-0:1./f:0.5;t8-(0:1./f:0.2S);<ng5=523.35;omg6=587.33;omg2-i392;omg1.-349.23;Omg6129366;m1.=sin(2*pi*omg5*t4);m2三sin(2*pi*omg5fcrt8);m3-si(2*pi*omg6*t8);m4=sin(2*i*omg2*t2);m6=sin(2*pi*omg1.*t4);m7-sin(2fcpiAo?ng1.*t8);m8-si(2*pi*omg61*t8);m9三sin(2*i*o<ng2*t2);m=m1.m2m3m4m6m7m8m9;sound(m);听的时候发觉在相邻乐音之间有杂音,这是由于相位不连续造成的。你为定留恚到(1)的乐曲中和守乐音之间有“啪”的杂声,这是由于相位不连续产生了高频重量。这种噪声严峻影响合成音乐的质量,丢失其实感。为了消退它,我们可以用图1.5所示包络修正每个乐音,以保证在乐音的邻接处信号幅度为零。此外城议用指数求成的包络来表示,我采纳的是指数衰减的包络代码如下:f-8000;t2=0:1./f:1.;t4=0:1./f:0.5J;t8-(0:1./f:0.25;Omg5-523.35;Cmg6-587.33;On1.g2=392;Oeg1.-349.23;Omg61-29366;m1.三e×(-2*t4).*sin(2*i*omg5*t4);m2=exp(-4*t8).*sin(2*pi*omg5*t8);m3-e×p(-4t8).*sin(2*pi*omg6*t8);m4-e×p(-1.*t2).*sin(2*pi*omg2*t2);m6三e×(-2*t4).*sin(2*i*omg1.*t4);m7=exp(-4*t8).*sin(2*pi*omg1.*t8);m8-exp(-4*t8).*sin(2*pi*o<ng61*t8);m9-e×p(-1.t2).*sin(2*pi*omg2*t2);m三m1.m2m3m4m6m7m8m9);sound(m);第一次我采纳的指数衰减没有时间前面的系数,即每个都只乘exp(1.),没有系数;后来依据不同节拍,更改了不同的衰减系数,这样声音听起来感觉更加圆河。(3)请用最硒洁的方法将(2)中的音乐分别上升和降低一个八度.(提示:音乐播放的时间可以改变)再难一些,请用resamp1.e函数也可以用interp和decimate函数)将上述音乐上升半个音阶。(提示:视计算困难度,不必特殊新硝)答:最简洁的方法是干脆更改抽样频率上将f从8K改为4K,则上升一个八度,并且播放速度增快了一倍:将从8k改为16k,则降低一个八度,速度也变慢了一倍。上升半个音阶,只须在(2)代码最终加一句resamp1.e(叫1000,1059)即可。f-8000;$改为4000或者16000t2-0:1./f:1.1.;t4-(0:1./f:0.5);t8-0:1./f:0.25);OnIg5=523.35;Omg6-587.33;Omg2-392;CmgI-349.23;Omg61=293.66;m1.三e×p(-2*t4).*sin(2*pi*ocng5fct4);m2-e×p(-4t8).*si(2*pi*omg5t8);m3=e×(-4*t).*sin(2*i*omg6*t8);m4=exp(-1.*t2).*sin(2*pi*omg2*t2);m6-e×p(-2*t4).*sin(2*pi*omg1.*t4);m7-e×p(-4t8).*sin(2*pi*omg1.*t);m8=e×(-4*t)-*sin(2*i*omg61*t8);m9=exp(-1.*t2).*sin(2*pi*omg2*t2);mm1.m2m3m4m6m7m8m9;resamp1.e(mr1000r10S9);sound(m);(4)试行在(2)的音乐中增加一些谐波重量,听一听音乐是否更有“厚度”了?留意谐波变量的能量要小,否则掩盘住基音反而听不清音调了。(假如选择基波幅度为1,二次谐波幅度0:2,三次谐波福度0;3.听起来像不俅象风?)代码如下:f-8000;t2=0:1./f:1.;t4=0:1./f:0.5J;t8-(0:1./f:0.25;Omg5-523.35;Cmg6-587.33;On1.g2=392;Omg1.ie349.23;Omg61-293.66;m1.三e×(-2*t4).*sin(2*i*omg5*t4)+0.2*e×(-2*t4>.*sin(2*i*2*<xng5*t4)÷0.3*exp<-2*t4).*sin<2*pi*3*omg5*t4>m2三e×p(-4*t8).*sin(2fcpi*omg5fct8)+0.2*exp(-4*t8>.*sin(2*pi*2*o11g5fct8)÷0.3*e×-4*t8>.*sin<2i*3*omgS*t8);m3=e×(-4*t8)-*sin(2*i*o11g6*t8)÷0.2*e×(-4*t8>.*sin(2*i*2*<xng6*t8)+0.3*exp(-4*t8).*sin<2*pi*3*omg6*t8>m4=e×p(-1.*t2).*sin(2fcpiAomg2*t2)÷0.2*exp(-1*t2>,"sin(2*pi*2*omg2*t2)÷0.3*e×p<-1.*t2).*sin<2*i*3*or>g2*t2>m6=e×(-2*t4).*sin(2*i*<xng1.*t4)÷0.2*e×(-2*t4>.*sin(2*i*2*omg1.*t4)÷0.3*exp(-2*t4).*sin<2*pi*3*o11>g1.*t4>m7三e×p(-4t).*sin(2*pi*omg1.fct8)÷0.2*exp(-4*t8>.fcain(2*pi2*omg1.fct8)÷0.3*e×1-4*t8>.*sin<2*i*3*omg1.*t8);m8=e×(-4*t8).*sin(2*i*omg61*t)+0.2*ex(-4*t8).*sin(2*i*2*omg61*t)+0.3*exp(-4*t8).*sin(2*pi*3*omg61*t8);u9三e×p(-1.*t2).*sin(2*pi*omg2*t2)+0.2*exp(-I*t2>.*sin(2*pi2*<xng2*t2)÷0.3*e×<-1.*t2>.*sin<2i*3*otng2*c2>m=m1.m2m3m4m6m7m8m9;sound(m);加入谐波正量后,音色有所改变,感觉更加曝亮一些。(5)自选其它音乐合成.例如贝多芬第五交响乐的开头两小节。我选取的是哈天的第一句代码如下:f-000;t2=0:1./f:1.;t4=0:1./f:0.5J;t8-(0:1./f:0.25;t-O三1.f:0.125);OEg1.-392;Ofng2=440;omg3*493.8;omg4-S23.2S;Omg5=58733;On1.g6=659.25;On1.g7-698.45;的g51-293.66;m0三0;m1.=exp(-2*t4).*sin(2*pi*<xng5*t4);m2-e×p(-2t4).*sin(2fcpi*of11g54ft4);m3-ep(-2t4).*sin(2*pi*omg1.*t4);m4=e×(-1.*t2).*sin(2*i*omg1.*t2);m5=exp(-2*t4).*sin(2*pi*o<ng2*t4);m6三e×p(-2t2).*sin(2fcpi*omg3*t2);m7-e×p(-2*t4).*sin(2*pi*omg5*t4);m8=e×(-2*t4).*sin(2*i*omg5*t4);m9=exp(-2*t4).*sin(2*pi*omg1.*t4);m1.三e×p(-2*t4).*sin(2*pi*omg1.*t4);m1.1.-e×<-4*t81.*sin<2i*omg2t);m1.2三×(-4*t8).*sin(2*i*omg3*t8);m!3=exp(-4*t8).*sin<2*pi*omg2*t8);m1.4-e×p-4*t8).*sin<2*pi*omg1.t8);m1.S-e×p-2*t2).*sin<2i*omg51*t2);m-mm1.m2m3m4m5m6m7r11m9m1.m1.1m1.2m1.3m1.4m15J;sound(m);(6)先用WaVread函数栽入光盘中的fmt.wav文件,播放出来听听效果如何?是否比刚才的合成音乐真实多了?×三wavread(fr.w.v);sound(x);(7)你知道后处理的WaVe2proc是如何从4实值rea1.wave中得到的么?这个ffi处理过程可以去除其实乐为中的非线性谐波和噪声,对于正确分析音调是特别交要的。提示:从时域做,可以接着运用resamp1.e的数。roahavQ中的波形有十个周期,要除去其中的噪声可以采纳时域求均值的方法。步骤如下:首先用JreSamP1.e函数将其采样率增大为十倍,再等分十份取平均,然后重狂这个平均后的波形十次,还原其长度,最终在用resamp1.e函数还原采样率到1/10。代码如下:1.oadCGuitar.51AT,);wavetemp-zeros(1.ength<rea1.wave)1.1);Waveresamp1.ed三resamp1.e(rea!wave,10,1);forn=1:10wavetemp三wavete11p+Waveresamp1.ed(n-1)tr1.engthrea1.wave)+1:n1.ength(rea1.wave>>/10;endmywave2proc=repcnat(wavetemp,10/1);mywave2proc-resamp1.e(mywave2procr1.t10);figure;subp1.ot<3,1z1);piot(rea1.wave);subp1.ot<3/1,2);p1.ot(wave2proc);subp1.ot<3j1/3);p1.ot(mywave2proc);0.50-0.5050100150200250-0.E1.1J1.1050WO1502002500.5-0.511,110501001502250(8)这段音乐的基频是多少?是哪个音调?请用傅里叶级致或者变换的方法分析它的谐波点量分别是什么。提示:筠洁的方法是近似取出一个周期求傅里叶蛟数但这样明显不精确,因为你应当已经发觉卷音周期不是筌数(这里不允许运用resamp1.e函数)。困难