为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

matlab音乐合成大作业

2013-01-26 9页 doc 339KB 154阅读

用户头像

is_033350

暂无简介

举报
matlab音乐合成大作业 信号与系统 Matlab大作业报告 前言 该报告将分为两个部分介绍: 基本任务详解 创新点介绍 作业中最终模仿的乐器是钢琴,当然限于技术水平,音色的模仿并不十分到位,但也比较近似。 由于代码占空间比较大,因此贴在附带打包的.m文件中,每个文件均以对应的函数命名。如需参考请自行打开这些文件。 题目: 音乐合成 完成的任务: 用简单实验来实际感受和了解乐音的基本特征 1) 用基波正弦(余弦)信号合成一段音乐 􀂃 2) 增加谐波分量提升音乐的厚度 修正包络控制音量的变化和停顿及叠接部分的时间 2....
matlab音乐合成大作业
信号与系统 Matlab大作业 前言 该报告将分为两个部分介绍: 基本任务详解 创新点介绍 作业中最终模仿的乐器是钢琴,当然限于技术水平,音色的模仿并不十分到位,但也比较近似。 由于代码占空间比较大,因此贴在附带打包的.m文件中,每个文件均以对应的函数命名。如需参考请自行打开这些文件。 题目: 音乐合成 完成的任务: 用简单实验来实际感受和了解乐音的基本特征 1) 用基波正弦(余弦)信号合成一段音乐 􀂃 2) 增加谐波分量提升音乐的厚度 修正包络控制音量的变化和停顿及叠接部分的时间 2. 载入一段由乐器演奏的音乐 􀂃 1) 提取并分析音乐中各个乐音的频率 􀂃 2) 分析乐音的基频是什么,谐波分量是什么 􀂃 3) 去除非线性谐波和噪声 􀂃 4) 分析出乐曲的音调和节拍 基于傅里叶级数合成音乐 利用已掌握乐器的演奏资料,合成该乐器演奏的任何音乐 基本任务详解 1.1 用基波正弦(余弦)信号合成一段音乐 此题我是依照当下著名流行歌曲《我的歌声里》的简谱,利用傅里叶变换合成的(原版简谱见http://www.jianpu.cn/pu/13/137900.htm )。整个的合成在函数in_meinem_Lied(德语:我的歌声里)中完成。整体的思路为: 人工统计简谱中用到的音符,用变量定义并列出这些音符 利用一个函数(我命名为all_waves),通过加入谐波合成这些音符,具体包括: 根据查到的资料设定了谐波配比 尝试引入了一种指数衰减与正弦混合类型的包络函数(但是音符衔接未修正) 设置时间轴t0, t1, t2(分别对应前奏,非高潮部分与高潮部分),用于划分各个音 符所占的时间 运行效果:仅仅简单地合成出来的曲子很难听;此外代码的编写风格有些繁琐,或者说不便于修改。这一步合成出来的音乐我放在了百度网盘中,以下是分享链接,可以下载试听(在线播放可能有问题,不出声音): http://pan.baidu.com/share/link?shareid=186746&uk=2651317097 1.2 增加谐波分量提升音乐的厚度 在1.1中已经增加了谐波并合成 1.3 修正包络控制音量的变化和停顿及叠接部分的时间 在这一步,我对整个程序的架构做了大幅地改动,当然这种改动是基于以下假设的: 1) 认为音符衔接部分的振幅可以设置为0:实际的音乐演奏中往往并非如此,也 就是说,实际演奏中上一个音还没有完全停止,下一个音便会开始;然而在我 的程序中,由于最终模仿的乐器是钢琴,而曲子的节奏并不快,因此允许衔接 处振幅为0并无大碍 2) 每个音有完全固定的时间:例如以1/16音符的持续时间设为1/4s左右,其余 拍子的音符以此为参照 这样我把音符划分地更详细了,比如1/16音符的do和1/4音符的do分开定义了(在上一步并不是如此)。音符定义的如下: “音名” + “音阶(低音,中音,高音或超高音)” + “拍子标志字母” 例如:do1e代中音do,占1/8拍,la2f代表高音la,占1/4拍 最后合成出的曲子对应的行向量则形如y = [do1e la2f ...]。这样一来,只需要根据谱子在[]内按顺序填写相应的音符变量就可以了,不必再考虑时间轴;否则那样会非常麻烦。当然这是建立在音符衔接处振幅为0的假设之上的。 在这一步,我对包络也有所修正。经过多方查找资料,我在此引入了ADSR包络控制机制(Attack, Decay, Sustain, Release),通过调整ADSR的相关(如Attack部分的上升时间,Sustain部分的下降斜率等),使得音色逐渐趋近钢琴。 这一步合成的曲子的下载链接(在线播貌似真的不行): http://pan.baidu.com/share/link?shareid=186748&uk=2651317097 2.1 提取并分析音乐中各个乐音的频率 这一步应该是考察傅里叶变换的,我在网上下载了钢琴的全部单音音效,随机挑选了几个进行试验。下面仅举一例,即中央C。 用自己定义的函数wave_analysis分析中央C的钢琴音效如下: 基波与谐波分布图 提取出的基波与谐波频率 (建议将图放大之后看……)可知中央C的基频为265Hz,谐波如上图所列 2.2 分析乐音的基频是什么,谐波分量是什么 跟2.1一样 2.3 去除非线性谐波和噪声 这一步采用的方法十分普通(不是很文艺),原理上就是利用非线性谐波噪声的随机性,将曲子分别读入100次并累加,然后再除以100平均一下,那么噪声的影响便大大减弱。 去噪前与去噪后波形图如下(其实是看不出什么差别的,因为原本读入的就没有多少非线性噪声)。 去噪前 去噪后 2.4 分析出乐曲的音调和节拍 这一步感觉比较困难,所以有的地方借鉴了网友提供的经验。大致的设计思路是(参见代码中的pre_manu函数,wave_analysis函数,maxp函数): 先把节拍分析出来,否则无法截取单个音符,也就无法分析音调 我设计的节拍分析方法依次是: 载入一段音乐(我用的是钢琴曲《秋日私语》的前奏的一部分) 取出这段音乐的包络。取包络的函数是从Matlab官方论坛中找到的,也不是非 常好用,通常要连续取好几次才能得到比较满意的结果 在取出的包络中统计较陡的上升沿有多少个 根据C中统计的个数及这段音乐的持续时间来推算其节拍 截取包络如下 推算节拍如下(为2/4拍) 根据之前对较陡的上升沿的标定,以及曲子节拍,估算每个音符的开始及截止时间,将其从整首曲子中截取出来并利用wave_analysis函数进行傅里叶变换得到其基频频率 运行结果如下(这一段总共8个音) 3.1 利用已掌握乐器的演奏资料,合成该乐器演奏的任何音乐 这里仍然以《我的歌声里》的合成为例。这一步里,我继续对ADSR参数进行修正,终于找到了我比较满意的一组;此外就是加入了和弦、鸟鸣声与小孩的笑声,使得整个曲子在艺术表现力上提高了一个档次。 当然,如果我们想合成其他曲子的话,只需要按谱子修改音符部分即可(常用的音符在代码中都有定义了)。 参见代码函数in_meinem_Lied_das_zweite. 创新点介绍 由于时间关系及技术水平所限,音乐的合成还是不那么令人满意(比如说音色方面还是与钢琴有一定距离,当然钢琴确实也很难模仿),而且坦诚地讲,作业中也有一些地方是借鉴了网友的分享。 不过我个人认为,这次的作业里还是有一些新意的。比如在最后一版当中加入了鸟鸣、笑声与和弦,曲子听起来的效果比之前好了很多,也更像是音乐而不再是编程出来的“蜂鸣器叫声”,我感觉甚至可以当铃音来使用了(除了wav格式比较大之外)。 此外,分析音乐节拍与音调的部分代码,在分析钢琴曲时是比较有用的。因为钢琴曲的节奏通常都是2/4拍或者4/4拍,其他节奏的十分罕见,所以我想到的就是用第一个上升沿做参考,往后的上升沿间隔大概取采样频率(44100Hz)的1/3至1/2之间,这样可以较好地标定出每个音符在时域的起始位置。 有兴趣的话,您可以通过此链接下载我做的最后一版: http://pan.baidu.com/share/link?shareid=187010&uk=2651317097 之 Matlab大作业 信号与系统 高翔 1000012718 北京大学 信息科学技术学院 电子学系
/
本文档为【matlab音乐合成大作业】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索