matlabmatlabmatlabmatlab实验一
音乐合成综合实验
电子系无 71717171 2007011252200701125220070112522007011252 李乾
(6.2.26.2.26.2.26.2.2部分第二题由 realwaverealwaverealwaverealwave得到wave2procwave2procwave2procwave2proc 思路为参考资料得到,其它都为原创)
6.2.16.2.16.2.16.2.1
(1111)
思路:
1,定义出小字 a(220Hz)为基准,分别循环列出其 1/12 倍的各个音阶,以备
组合乐谱。
2,用矩形窗函数选取出各个需要音符,并将其相加,得到需要的音乐 x。
3,查表得所需音符,与对应小字 a的倍数为:
4,为编程方便,把第一小节分为 16份。
代码:
f=8000;
E=1;
t=[0:1/f:4-1/f];
for n=1:16
u{n}=(t>(n-1)/4&t
n-1.1&tn-0.8&tn-0.35&tn-1&t标准的四倍时间,所以基准音调降低了四倍,
播放速度比正常提高了 4倍。实际原采样率为 8000.)
在不改变播放速度的情况下,则将基准音调频率小字一组 a1提高到二倍。
代码:
a0=220*pi/2;
改为:
a0=220*pi;
用 resample 函数时,可以将
代码:
sound(x,32000);
改为:
y=resample(x,50,53);%大约为高一个音阶
sound(y,32000);
这样,采样率为原来的50/53,即提高了半个音阶。但是这样做会使播放时间发
生变化。而且根据数据可以看出:采样点减少,是一种有损数据的改变方式。
(4)
加入谐波后,代码如下:
代码:
f=8000;
E=1;
t=[0:1/f:16-1/f];
for n=1:16
u{n}=(t>n-1&t
n-1.1&tn-0.8&tn-0.35&tn-1&tn-1+0.35&tn-1+0.55&tn-1+0.75&t5000
n_tmp=5000;
end
[a_tmp b_tmp]=max(R1(n:n_tmp));
b_tmp=b_tmp+n;
if a_tmp>=A
bb=bb+1;
if k==1
a(k)=a_tmp;
b(k)=b_tmp;
n=b(k)+1;
k=k+1;
elseif k>1
if (b_tmp-b(k-1))<=T
[a(k-1) b_tmp1]=max(R1(b(k-1):b_tmp+1));
b(k-1)=b_tmp1+b(k-1);
n=b_tmp+T;
elseif (b_tmp-b(k-1))>T
a(k)=a_tmp;
b(k)=b_tmp;
n=b(k)+1;
k=k+1;
% count1=count1+1;
end
end
elseif a_tmpn-1.1&tn-0.8&tn-0.35&tn-1&tn-1&t总结 :
1,由于后来波形的判断采用较多的循环,所以编程出错时往往会造成死循环。
也无法停止,只能结束进程。Matlab7.4 启动的初始化要用很长时间,所以频繁
出错造成大量时间浪费。
后来想到一个办法,可以在循环中加入控制循环次数的变量,然后调试时方便了
很多。
2,分块的思想还是应深入贯彻。尤其是 2部分第四题,得到的每一步骤尽量将
结果保存。
这样避免了每次调试都重新进行波形整形,傅里叶变换的步骤。大大节省时间。
3,包络的不同加法会造成音乐的听觉效果不同。