下载此文档

Matlab音乐合成实验报告.doc


文档分类:论文 | 页数:约28页 举报非法文档有奖
1/28
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/28 下载此文档
文档列表 文档介绍
音乐合成实验
目录
音乐合成实验 1
摘要: 1
第一部分 简单的合成音乐 2
《东方红》 2
除噪音,加包络 3
, 8
%这段音乐的总抽样点数
east=zeros(1,N); %用 east向量来储存抽样点
n=1;
for num=1:N %利用循环产生抽样数据,nun表示乐音编号
t=1/fs:1/fs:time(num)/fs; %产生第 nun个乐音的抽样点
G=zeros(1,time( num)); %为存储包络数据的向量
G(1:time( nu m))=exp(1:(-1/time( num)):1/8000);
%产生包络点
east( n:n+time( nu m)-1)=s in (2*pi*f( num)*t).*G(1:time( num));
%合第nun个乐音加上包络
n=n+time( nu m);
end
sou nd(east,8000); %播放
plot(east);
3
播放后可以听出噪音已经消除,同时因为不同时长的乐音衰减的快慢不一样, 音乐听起来更有起伏感,下图是加包络后的 east图像。
2
1
0
-1
-2
0 1 2 3
4
x 10
-3
更科学的包络如下图所示,每个乐音都经过冲激、衰减、持续、消失四个阶
由上图可以看出这个包络是四段直线段构成的, 因此只要确定了每段线段的 端点,即可用端点数据写出直线方程,因为直线方程可以用通式写出(我用的是 斜截式),因此这段包络可以用简单的循环来完成。例如认为包络线上的数据如 下图所示:
据此在MATLA中编写如下程序:

clear;clc; fs=8000;
%抽样频率
f=[ 392 392];
%各个乐音对应的频率
time=fs*[1/2,1/4,1/4,1,1/2,1/4,1/4,1]; %各个乐音的抽样点数
N=le ngth(time); %这段音乐的总抽样点数
east=zeros(1,N); %用 east向量来储存抽样点
n=1;
for num=1:N %利用循环产生抽样数据,nun表示乐音编号
t=1/fs:1/fs:(time(num))/fs; %产生第 nun个乐音的抽样点
P=zeros(1,time( num)); %为存储包络数据的向量
L=(time( nu m))*[0 1/5 333/1000 333/500 1];
T=[0 1 1 0]; s=1;
b=1:1:time( nu m);
for k=1:4
%包络线端点对应的横坐标
%包络线端点对应的纵坐标
泸生包络线抽样点
P(s:L(k+1)-1)=(T(k+1)-T(k))/(L(k+1)-L(k))*(b(s:L(k+1)-1)-L(k+
1)*o nes(1,L(k+1)-s))+T(k+1)* on es(1,L(k+1)-s);
%包络线直线方程通式
s=L(k+1);
end east(n:n+time(num)-1)=sin(2*pi*f(num)*t).*P(1:time(num));
%合第nun个乐音加上包络
n=n+time( nu m);
end
sou nd(east,8000); plot(east);
运行得到的图像为:
2
2


-
-1
-
-2
0
II

■i:

4
X 10
下图是两个乐音交接处的局部放大图,可以看到前一个乐音一直衰减到 0,
后一个乐音从0开始增加,因此消除了噪音。


2
若不需要每个音都衰减到0,例如只需衰减到持续阶段幅值的20%对程序做
简单的修改即可,将T=[0 1 1 0] 改为T=[ 1 1 ] 运行得到的结果
为:
9
4
x 10
由图可见,每个乐音都是衰减到一较小值而不是 0,也能消除噪音,同时音 乐听起来更加连续。
改变程序,
升高

Matlab音乐合成实验报告 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数28
  • 收藏数0 收藏
  • 顶次数0
  • 上传人小s
  • 文件大小949 KB
  • 时间2022-04-11
最近更新