好文档 - 专业文书写作范文服务资料分享网站

Matlab音乐合成实验报告 

天下 分享 时间: 加入收藏 我要投稿 点赞

音乐合成实验

目录

音乐合成实验........................................................ 1

摘要:.......................................................... 1 第一部分 简单的合成音乐....................................... 2

1.1 合成《东方红》 ......................................... 2 1.2 除噪音,加包络 ........................................ 3 1.3 改变程序,实现1.2中的音乐升高和降低一个八度 ........... 8 1.4 在1.2的音乐中加入谐波 ................................ 9 1.5 自选音乐合成——《两只老虎》 ......................... 10 第二部分 用傅里叶变换分析音乐................................ 11

2.1 载入fmt.wav并播放 ................................... 11 2.2 载入文件Guitar.mat,处理原始数据realwave .......... 11 2.3 分析wave2proc的基波和谐波 .......................... 13 2.4 自动分析fmt.wav的音调和节拍 ......................... 16 第三部分 基于傅里叶级数的音乐合成............................. 19

3.1 用2.3分析出来的结果重新加谐波 ......................... 19 3.2 通过2.4提取的吉他音调信息弹奏《东方红》 ............. 19 实验收获....................................................... 21

摘要:

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

第一部分 简单的合成音乐

1.1 合成《东方红》

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

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

f5?349.23?27/12?523.25,一次类推计算出第一小节各乐音对应的频率为: 乐音

在确定了各乐音的频率之后需要确定每个乐音的持续时间。每小节有两拍,

一拍的时间是0.5s,因此各乐音的持续时间为: 乐音 时间

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

5 0.5 5 0.25 6 0.25 2 1 1 0.5 1 0.25 6 0.25 2 1 5

5

6

2 392 1

1

6

2 392 频率 523.25 523.25 587.33 349.23 349.23 293.66

clear;clc; fs=8000; %抽样频率 f=[523.25 523.25 587.33 392 349.23 349.23 293.66 392]; %各个乐音对应的频率 time=fs*[1/2,1/4,1/4,1,1/2,1/4,1/4,1]; %各个乐音的抽样点数 N=length(time); %这段音乐的总抽样点数 east=zeros(1,N); %用east向量来储存抽样点 n=1; for num=1:N %利用循环产生抽样数据,num表示乐音编号 t=1/fs:1/fs:time(num)/fs; %产生第num个乐音的抽样点 east(n:n+time(num)-1)=sin(2*pi*f(num)*t); %抽样点对应的幅值 n=n+time(num); end sound(east,8000); %播放音乐

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

1.2 除噪音,加包络

在1.1中听到有“啪”的杂声,下面通过加包络来消噪音。 最简单的包络为指数衰减。最简单的指数衰减是对每个音乘以e实验中首先加的是e?1.5t??t因子,在

的衰减,这种衰减方法使用的是相同速度的衰减,但是

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

sound_1_21.m

clear;clc; fs=8000; %抽样频率 f=[523.25 523.25 587.33 392 349.23 349.23 293.66 392]; %各个乐音对应的频率 time=fs*[1/2,1/4,1/4,1,1/2,1/4,1/4,1]; %各个乐音的抽样点数 N=length(time); %这段音乐的总抽样点数 east=zeros(1,N); %用east向量来储存抽样点 n=1; for num=1:N %利用循环产生抽样数据,num表示乐音编号 t=1/fs:1/fs:time(num)/fs; %产生第num个乐音的抽样点 G=zeros(1,time(num)); %G为存储包络数据的向量 G(1:time(num))=exp(1:(-1/time(num)):1/8000); %产生包络点 east(n:n+time(num)-1)=sin(2*pi*f(num)*t).*G(1:time(num)); %给第num个乐音加上包络 n=n+time(num); end sound(east,8000); %播放 plot(east);

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

3210-1-2-300.511.522.533.5x 104

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

段。

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

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

Matlab音乐合成实验报告 

音乐合成实验目录音乐合成实验........................................................1摘要:..........................................................1第一部分简单的合成音乐................
推荐度:
点击下载文档文档为doc格式
2qdjt24dmf79c964hjsm5kaxd91bpl00krm
领取福利

微信扫码领取福利

微信扫码分享