Maab音乐合成实验报告

上传人:公**** 文档编号:503650256 上传时间:2023-11-19 格式:DOCX 页数:24 大小:451.96KB
返回 下载 相关 举报
Maab音乐合成实验报告_第1页
第1页 / 共24页
Maab音乐合成实验报告_第2页
第2页 / 共24页
Maab音乐合成实验报告_第3页
第3页 / 共24页
Maab音乐合成实验报告_第4页
第4页 / 共24页
Maab音乐合成实验报告_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《Maab音乐合成实验报告》由会员分享,可在线阅读,更多相关《Maab音乐合成实验报告(24页珍藏版)》请在金锄头文库上搜索。

1、音乐合成实验目录音乐合成实验1摘要:1第一部分 简单的合成音乐11.1 合成东方红 21.2 除噪音,加包络31.3 改变程序,实现1.2中的音乐升高和降低一个八度 71.4 在1.2的音乐中加入谐波 81.5 自选音乐合成两只老虎 8第二部分 用傅里叶变换分析音乐92.1 载入 fmt.wav 并播放 92.2 载入文件Guitar.mat,处理原始数据realwave92.3 分析 wave2proc 的基波和谐波 112.4 自动分析 fmt.wav 的音调和节拍 14第三部分 基于傅里叶级数的音乐合成163.1 用2.3分析出来的结果重新加谐波163.2 通过2. 4提取的吉他音调信息

2、弹奏东方红. . . . . . . . . . . . . 17 实验收获 17摘要:本文共有三大部分:第一部分,简单的音乐合成;第二部分,用傅里叶变换 分析音乐;第三部分,基于傅里叶级数的音乐合成。由潜入深,一步一步分析了 用 MATLAB 进行音乐合成的过程。通过本实验达到了加深对傅里叶级数和傅里叶 分析的理解,熟悉对MATLAB基本使用的目标。第一部分 简单的合成音乐1.1 合成东方红根据东方红第一小节的简谱和十二平均律计算出该小节每个乐音的频率, 在 MATLAB 中生成幅度为 1,抽样频率为 8kHz 的正弦信号表示这些乐音,用 sound 播放合成的音乐=F 5 jil 3 -

3、I 16 S - I圈筑3号曲t血方红孑第一小节曲谱由图可知东方红的曲调定为F,即1=F,对应的频率为349.23Hz,据此 可以计算出其他乐音的频率,例如 5 对应的频率为f二349.23 x 2加2二523.25,次类推计算出第一小节各乐音对应的频率 为:乐音55621 1 62频率523.25 523.25 587.33392349.23 349.23 293.66392在确定了各乐音的频率之后需要确定每个乐音的持续时间。每小节有两拍 一拍的时间是0.5s,因此各乐音的持续时间为:乐音55621162时间0.50.250.2510.50.250.251而在MATLAB中表示乐音所用的抽样

4、频率为fs=8000Hz,也就是所Is钟内有 8000个点,抽样点数的多少就可表示出每个乐音的持续时间的长短。用一个行向 量来存储这段音乐对应的抽样点,在用sound函数播放即可。根据以上分析在M ATLAB中编写如下程序:sound_1_1.m%各个乐音对应的频率 time二fs*1/2,1/4,1/4,1,1/2,1/4,1/4,1; %各个乐音的抽样点数 N=leng th( time);%这段音乐的总抽样点数eas t二zeros(l,N); %用eas t向量来储存抽样点n=1;for num=1:N%利用循环产生抽样数据,num表示乐音编号t=l/fs:l/fs: time(num

5、)/fs;%产生第n um个乐音的抽样点eas t(n:n+ti me(num)-1)=sin(2 *pi*f( num )*t);%抽样点对应的幅值 n=n+ti me(num);endsound(eas t,8000); %播放音乐在MATLAB中运行sound_l_l.m,播放出了东方红的第一段,但是可以听 出效果很不好,只能听出具有东方红的调子而已。1.2 除噪音,加包络在1.1中听到有“啪”的杂声,下面通过加包络来消噪音。最简单的包络为指数衰减。最简单的指数衰减是对每个音乘以e-at因子,在实验中首先加的是e 7的衰减,这种衰减方法使用的是相同速度的衰减,但是发现噪音并没有完全消除,

6、播放的音乐效果不是很好,感觉音乐起伏性不强。于 是采用不同速度的衰减,根据乐音持续时间的长短来确定衰减的快慢,乐音持续 时间越长,衰减的越慢,持续时间越短,衰减的越快。在1.1程序的基础上加上 包络,编写如下程序: sound_1_21.m%各个乐音对应的频率 time二fs*1/2,1/4,1/4,1,1/2,1/4,1/4,1; %各个乐音的抽样点数 N=leng th( time);%这段音乐的总抽样点数eas t二zeros(l,N); %用eas t向量来储存抽样点n=1;for num=1:N%利用循环产生抽样数据,num表示乐音编号t=l/fs:l/fs: time(num)/f

7、s; %产生第n um个乐音的抽样点 G=zeros(1, time(num);%G%存储包络数据的向量G(l:ti me(num)二exp(l:(-l/ti me(num):1/8000);%产生包络点eas t(n:n+ti me(num)-1)=sin(2 *pi*f( num )*t).*G(l:ti me(num);%给第num个乐音加上包络 n=n+ti me(num);endsound(eas t,8000);%播放plot(east);播放后可以听出噪音已经消除,同时因为不同时长的乐音衰减的快慢不一样,音乐听起来更有起伏感,下图是加包络后的eas t图像。-303210-1-2

8、0.511.522.533.5x 104更科学的包络如下图所示,每个乐音都经过冲激、衰减、持续、消失四个阶段。捋建时乐a.ll b.5啻吐变化由上图可以看出这个包络是四段直线段构成的,因此只要确定了每段线段的 端点,即可用端点数据写出直线方程,因为直线方程可以用通式写出(我用的是 斜截式),因此这段包络可以用简单的循环来完成。例如认为包络线上的数据如 下图所示:1.知14/|X门 1FU41/51/齐2/3p据此在MATLAB中编写如下程序:sound_1_22.m%各个乐音对应的频率time二fs*1/2,1/4,1/4,1,1/2,1/4,1/4,1; %各个乐音的抽样点数N=leng t

9、h( time);%这段音乐的总抽样点数eas t二zeros(l,N); %用eas t向量来储存抽样点n=1;for num=1:N%利用循环产生抽样数据,num表示乐音编号t=l/fs:l/fs:( time(num)/fs;%产生第num个乐音的抽样点P=zeros(1, time(num);%卩为存储包络数据的向量L=(time(num)*0 1/5 333/1000 333/500 1;%包络线端点对应的横坐标T=0 1.5 1 1 0;%包络线端点对应的纵坐标s=1;b=1:1: time(num);%产生包络线抽样点for k=1:4P(s:L(k+1)-1) = (T(k+1

10、)-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) *ones(1,L(k+1)s);%包络线直线方程通式s=L(k+1);end eas t(n:n+ti me(num)1)=sin(2 *pi*f( num )*t).*P(1:ti me(num); %给第n um个乐音加上包络n=n+ti me(num);endsound(eas t,8000);plot(east);运行得到的图像为:-0.5-1.5x 104下图是两个乐音交接处的局部放大图,可以看到前一个乐音一直衰减到0后一个乐音从0开始增加,因此消

11、除了噪音。若不需要每个音都衰减到0,例如只需衰减到持续阶段幅值的20%,对程序做简单的修改即可,将T=0 1.5 1 1 0改为T=0.2 1.5 1 1 0.2运行得到的结果 为:21.510.50-0.5-1-1.5x 104由图可见,每个乐音都是衰减到一较小值而不是0,也能消除噪音,同时音 乐听起来更加连续。1.3 改变程序,实现1.2中的音乐升高和降低一个八度升高一个八度即每个乐音的频率都提高一倍,变为原来的2被;降低一个八 度即每个乐音的频率都减小一倍,变为原来的1/2。因此最简单的办法是将存储 乐音频率的向量每个元素改变为2或1/2倍。即将程序中的f=523.25 523.25 5

12、87.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;将上述音乐上高半个音阶,即将频率变为原来的21/12(1.06)倍,可以利用resamlpe函数对原来的数据点进行重采样来实现 east=resample(east,100,106);因为resample进行重新采样后会使每个乐音的持续时间改变,但是因为升高 半个音阶,频率改变不大,所以每个音的持续时间是

13、基本不变的。1.4 在1.2的音乐中加入谐波在1.2的音乐中加上二、三、四次谐波,基波幅度为1,高次谐波幅度分别为0.2、0.3、0.1。只需将1.2程序改为sound_1_4.mclear;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=leng th(t ime);%这段音乐的总抽样点数eas t二zeros(l,N); %用eas t向量来储存抽样点n=1;for num=1:N%

14、利用循环产生抽样数据,num表示乐音编号t=l/fs:l/fs:( time(num)/fs;%产生第num个乐音的抽样点P=zeros(1, time(num);%卩为存储包络数据的向量L=(time(num)*0 1/5 333/1000 333/500 1;%包络线端点对应的横坐标T=0 1.5 1 1 0;%包络线端点对应的纵坐标s=1;b=1:1: time(num);%产生包络线抽样点for k=1:4P(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) *ones(1,L(k+1)s);%包络线直线方程通式s=L(k+1);endm=1 0.3 0.2;%波形幅值矩阵ss=zeros(1,leng th(t);for i=1:length(m)ss=ss+m(i) *sin(2 *i*pi* f(num) *t);%加谐波end eas t(n:n+ti me(num)1)=ss .*P(1:ti me(num);%给第num个乐音加上包络n=n+ti me(num);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号