Matlab音乐合成实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

音乐合成实验

目录

摘要:

本文共有三大部分:第一部分,简单的音乐合成;第二部分,用傅里叶变换分析音乐;第三部分,基于傅里叶级数的音乐合成。由潜入深,一步一步分析了用MATLAB进行音乐合成的过程。通过本实验达到了加深对傅里叶级数和傅里叶分析的理解,熟悉对MATLAB基本使用的目标。

第一部分简单的合成音乐

1.1 合成《东方红》

根据《东方红》第一小节的简谱和十二平均律计算出该小节每个乐音的频率,在MATLAB 中生成幅度为1,抽样频率为8kHz 的正弦信号表示这些乐音,用soun d 播放合成的音乐

由图可知《东方红》的曲调定为F ,即1=F ,对应的频率为349.23Hz ,据此可以计算出其他乐音的频率,例如5对应的频率为

7/125349.232523.25f =⨯=,一次类推计算出第一小节各乐音对应的频率为

: 乐音 5

5

6

2 1

1

6

2

在确定了各乐音的频率之后需要确定每个乐音的持续时间。每小节有两拍,一拍的时间是0.5s ,因此各乐音的持续时间为: 乐音 5 5 6 2 1 1 6 2

而在MATLAB 中表示乐音所用的抽样频率为fs=8000Hz ,也就是所1s 钟内有8000个点,抽样点数的多少就可表示出每个乐音的持续时间的长短。用一个行向量来存储这段音乐对应的抽样点,在用sound 函数播放即可。 根据以上分析在MATLAB 中编写如下程序: sound_1_1.m

在MATLAB中运行sound_1_1.m,播放出了《东方红》的第一段,但是可以听出效果很不好,只能听出具有《东方红》的调子而已。

1.2 除噪音,加包络

在1.1中听到有“啪”的杂声,下面通过加包络来消噪音。

eα-因子,在最简单的包络为指数衰减。最简单的指数衰减是对每个音乘以t

e-衰减,这种衰减方法使用的是相同速度的衰减,但是实验中首先加的是的 1.5t

发现噪音并没有完全消除,播放的音乐效果不是很好,感觉音乐起伏性不强。于是采用不同速度的衰减,根据乐音持续时间的长短来确定衰减的快慢,乐音持续时间越长,衰减的越慢,持续时间越短,衰减的越快。在1.1程序的基础上加上包络,编写如下程序:

sound_1_21.m

播放后可以听出噪音已经消除,同时因为不同时长的乐音衰减的快慢不一样,音乐听起来更有起伏感,下图是加包络后的east 图像。

更科学的包络如下图所示,每个乐音都经过冲激、衰减、持续、消失四个阶

00.51 1.52 2.53 3.5x 10

4

-3

-2

-1

1

2

3

段。

由上图可以看出这个包络是四段直线段构成的,因此只要确定了每段线段的端点,即可用端点数据写出直线方程,因为直线方程可以用通式写出(我用的是斜截式),因此这段包络可以用简单的循环来完成。例如认为包络线上的数据如下图所示:

据此在MATLAB中编写如下程序:

sound_1_22.m

运行得到的图像为:

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

00.51 1.52 2.53 3.5x 10

4

-2

-1.5-1-0.500.511.5

2

若不需要每个音都衰减到0,例如只需衰减到持续阶段幅值的20%,对程序做简单的修改即可,将T=[0 1.5 1 1 0]改为T=[0.2 1.5 1 1 0.2]运行得到的结果为:

由图可见,每个乐音都是衰减到一较小值而不是0,也能消除噪音,同时音乐听起来更加连续。

1.3 改变程序,实现1.2中的音乐升高和降低一个八度

升高一个八度即每个乐音的频率都提高一倍,变为原来的2被;降低一个八度即每个乐音的频率都减小一倍,变为原来的1/2。因此最简单的办法是将存储乐音频率的向量每个元素改变为2或1/2倍。

即将程序中的f=[523.25 523.25 587.33 392 349.23 349.23 293.66 392];改为 f=[523.25 523.25 587.33 392 349.23 349.23 293.66 392]*2;或 f=[523.25 523.25 587.33 392 349.23 349.23 293.66 392]/2;

将上述音乐上高半个音阶,即将频率变为原来的1/12

2

(1.06)倍,可以利用

resamlpe 函数对原来的数据点进行重采样来实现 east=resample(east,100,106);

因为resample 进行重新采样后会使每个乐音的持续时间改变,但是因为升高半个音阶,频率改变不大,所以每个音的持续时间是基本不变的。

00.51 1.52 2.53 3.5x 10

4

-2

-1.5-1-0.500.511.5

2

1.4 在1.2的音乐中加入谐波

在1.2的音乐中加上二、三、四次谐波,基波幅度为1,高次谐波幅度分别为0.2、0.3、0.1。只需将1.2程序改为

sound_1_4.m

即可,加颜色部分为修改的部分,加上谐波后音乐效果变得更好了。

1.5 自选音乐合成——《两只老虎》

两只老虎

曲调为C,因此可以得到每个乐音对应的频率分别为:

每小节有四拍,一拍的时间是0.5s,因此各乐音的持续时间为:

乐音 1 2 3 1 1 2 3 1

sound_1_5.m

相关文档
最新文档