matlab音乐合成实验报告.docx
- 文档编号:1185939
- 上传时间:2022-10-18
- 格式:DOCX
- 页数:19
- 大小:44.65KB
matlab音乐合成实验报告.docx
《matlab音乐合成实验报告.docx》由会员分享,可在线阅读,更多相关《matlab音乐合成实验报告.docx(19页珍藏版)》请在冰豆网上搜索。
matlab音乐合成实验报告
音乐合成实验
音乐合成实验
摘要:
第-
部分
简单的合成音乐
1.1
合成《东方红》
1.2
除噪音,加包络
1.3
改变程序,实现1.2中的音乐升高和降低一个八度
1.4
在1.2的音乐中加入谐波
1.5
自选音乐合成《两只老虎》
第二部分
用傅里叶变换分析音乐
2.1
载入fmt.wav并播放
2.2
载入文件Guitar.mat,处理原始数据realwave
2.3
分析wave2proc的基波和谐波
2.4
自动分析fmt.wav的音调和节拍
第三
二部分
基于傅里叶级数的音乐合成
3.1
用2.3分析出来的结果重新加谐波
3.2
通过2.4提取的吉他音调信息弹奏《东方红》....
实验收获
摘要:
本文共有三大部分:
第一部分,简单的音乐合成;第二部分,用傅里叶变换分析音乐;
第三部分,基于傅里叶级数的音乐合成。
由潜入深,一步一步分析了用MATLA进行音乐
MATLAB
合成的过程。
通过本实验达到了加深对傅里叶级数和傅里叶分析的理解,熟悉对
基本使用的目标
第一部分简单的合成音乐
1.1合成《东方红》
根据《东方红》第一小节的简谱和十二平均律计算出该小节每个乐音的频率,在MATLAB
中生成幅度为1,抽样频率为8kHz的正弦信号表示这些乐音,用sound播放合成的音乐
由图可知《东方红》的曲调定为F,即仁F,对应的频率为349.23Hz,据此可以计算
_7/12
出其他乐音的频率,例如5对应的频率为f^349.232=523.25,—次类推计算
出第一小节各乐音对应的频率为:
乐音55621162
频率523.25523.25587.33392349.23349.23293.66392
在确定了各乐音的频率之后需要确定每个乐音的持续时间。
每小节有两拍,一拍的时间是0.5s,因此各乐音的持续时间为:
乐音
5
5
6
2
1
1
6
2
■时间
0.5
0.25
0.25
1
0.5
0.25
0.25
1
而在MATLA中表示乐音所用的抽样频率为fs=8000Hz,也就是所1s钟内有8000个点,抽样点数的多少就可表示出每个乐音的持续时间的长短。
用一个行向量来存储这段音乐对应的抽样点,在用sound函数播放即可。
根据以上分析在MATLA中编写如下程序:
sound_1_1.m
clear;clc;fs=8000;%由样频率
f=[523.25523.25587.33392349.23349.23293.66392];
%各个乐音对应的频率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;
fornum=1:
N%利用循环产生抽样数据,nun表示乐音编号
t=1/fs:
1/fs:
time(num)/fs;%产生第nun个乐音的抽样点
east(n:
n+time(num)-1)=sin(2*pi*f(num)*t);
%由样点对应的幅值
n=n+time(num);
end
sound(east,8000);%播放音乐
在MATLA中运行sound_1_1.m,播放出了《东方红》的第一段,但是可以听出效果很不好,只能听出具有《东方红》的调子而已。
1.2除噪音,加包络
在1.1中听到有“啪”的杂声,下面通过加包络来消噪音。
最简单的包络为指数衰减。
最简单的指数衰减是对每个音乘以e—述因子,在实验中首
先加的是e_1'5t的衰减,这种衰减方法使用的是相同速度的衰减,但是发现噪音并没有完
全消除,播放的音乐效果不是很好,感觉音乐起伏性不强。
于是采用不同速度的衰减,根据乐音持续时间的长短来确定衰减的快慢,乐音持续时间越长,衰减的越慢,持续时间越短,衰减的越快。
在1.1程序的基础上加上包络,编写如下程序:
sound_1_21.m
clear;clc;
fs=8000;%由样频率
f=[523.25523.25587.33392349.23349.23293.66392];
%各个乐音对应的频率%各个乐音的抽样点数
time=fs*[1/2,1/4,1/4,1,1/2,1/4,1/4,1];
N=length(time);
east=zeros(1,N);
n=1;
fornum=1:
N
.G=Zeros(1,ti
%这段音乐的总抽样点数
%用east向量来储存抽样点
%利用循环产生抽样数据,num表示乐音编旦
"I经消除,同时因为不同…
包络后I的3(nem))图像00);
点中激、衰减、持续、消失四个阶段。
号
'减的'快慢不一样,音乐听
s:
1/fs:
time(r
后可以听出(
起来更有起伏感nu下
更科学的包络如下图所示,每个
由上图n+以看出这个包络是四pf线段构成的1,:
t因此此只要确定了每段线段的端点可用端点数据写出直线方程,因为直线方程可以用音加上包(我用的是斜截式),因此匕这段包络可以用简单的循环来完成。
例如认为包络线上的数据如下图所示:
据此^”
sound(east,8000);
souodea_22.m
clear;clc;
fs=8000;%由样频率
f=[523.25523.25587.33392349.23349.23293.66392];
%各个乐音对应的频率
%各个乐音的抽样点数
%这段音乐的总抽样点数
%用east向量来储存抽样点
0
MA;LA中编写如下程序钿放
time=fs*[1/2,1/4,1/4,1,1/2,1/4,1/4,1];
N=length(time);
east=zeros(1,N);
n=1;
fornum=1:
N
运行得!
的衰量
音
1都
%利用循环产生抽样数据,num表示乐音编号
:
(time(num))/fs;%产生第num个乐音的抽样点
・—像为e(num));%为存储包络数据的向量
下图是两个乐音交接处5的局/1放大3图3/5可0以看到前一个乐音一直衰减到0,后一个乐
音从0开始增加,因此消除了噪音。
%包络线端点对应的横坐标
T=[01.5110];%包络线端点对应的纵坐标
s=1;
b=1:
1:
time(num);
fork=1:
4
沪生包络线抽样点
time=fs*[1/2,1/4,1/4,1,1/2,1/4,1/4,1];
N=length(time);
east=zeros(1,N);
n=1;
fornum=1:
N
t=1/fs:
1/fs:
(time(num))/fs;
两包只线端点对应的横坐标
%包络线端点对应的纵坐标
%产生包络线抽老虎
若不需要每个音都衰减到0,例如只需衰减到持续阶段幅值的20%对程序做简单的修改即可,将T=[01.5110]改为T=[0.21.5110.2]运行得到的结果为:
由图可见,每个乐音都是衰减到一较小值而不是0,也能消除噪音,同时音乐听起来
更加连续。
1.3改变程序,实现1.2中的音乐升高和降低一个八度
升高一个八度即每个乐音的频率都提高一倍,变为原来的2被;降低一个八度即每个乐音的频率都减小一倍,变为原来的1/2。
因此最简单的办法是将存储乐音频率的向量每个元素改变为2或1/2倍。
即将程序中的f=[523.25523.25587.33392349.23349.23293.66392];改为
f=[523.25523.25587.33392349.23349.23293.66392]*2;或
f=[523.25523.25587.33392349.23349.23293.66392]/2;
1/12
将上述音乐上高半个音阶,即将频率变为原来的2(1.06)倍,可以利用resamlpe
函数对原来的数据点进行重采样来实现
east=resample(east,100,106);
因为resample进行重新采样后会使每个乐音的持续时间改变,但是因为升高半个音阶,频率改变不大,所以每个音的持续时间是基本不变的。
1.4在1.2的音乐中加入谐波
在1.2的音乐中加上二、三、四次谐波,基波幅度为1,高次谐波幅度分别为0.2、0.3、
0.1。
只需将1.2程序改为
sound14.m
clear;clc;
fs=8000;%由样频率
f=[523.25523.25587.33392349.23349.23293.66392];
%各个乐音对应的频率%各个乐音的抽样点数
%这段音乐的总抽样点数
%用east向量来储存抽样点
%利用循环产生抽样数据,num表示乐音编号
畫乐!
果变个乐音了由样点
L=(time(num))*[01/5333/1000333/5001];
1.5自选音乐合成一一《
T=[01.5110];
s=1;
b=1:
1:
time(num);
fork=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)*ones(1,L(k+1)-s))+T(k+1)*ones(1,L(k+1)-s);
%包络线直线方程通式
曲调为C,因此可以得到每个乐音对应的频率分别为:
1
2
3
4
5
262.63
293.66
329.63
349.23
392
每小节有四拍,
一拍的时间是
0.5s
,因此各乐
音的持续时间为:
乐音
1
2
3
1
1
2
3
1
时间
0.5
0.5
0.5
0.5
0.5
0.5
0.5
0.5
乐音
3
4
5
3
4
5
■时间
0.5
0.5
1
0.5
0.5
1
0.25
sound_1_5.m
clear;clc;
fs=8000;%由样频率
f=[262.63293.66329.63262.63262.63293.66329.63262.63329.63
349.23392];
time=fs*[1/2,1/2,1/2,1/2,1/2,1/2,1/2,1/2,1/2,1/2,1,1/2,1/2,1];
%各个乐音的抽样点数
%这段音乐的总抽样点数
%用east向量来储存抽样点
%各个乐音对应的频率
%利用循环产生抽样数据,nun表示乐音编号第二部分s;用%傅生里叶变乐音的分析音乐
N=length(time);east=zeros(1,N);n=1;fornum=1:
Nt=1/fs:
'G=zeros(1,time(num));%为存储包络数据的向量
G(1:
time(num))=exp(1:
(-1/time(num)):
1/8000);
2.1载入fmt.wav并播产生包络点
east(n:
n+time(num)-1)=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlab 音乐 合成 实验 报告