matlab音乐_wuli玩 | MATLAB的音乐物理学(上)

本文介绍了如何使用MATLAB模拟声音,从简单的440Hz纯音开始,通过理解声音的振幅和频率,探讨了音色的概念。通过引入ADSR(Attack、Decay、Sustain、Release)模型来模拟声音的包络,使生成的音频更接近实际的钢琴音。后续将研究如何进一步改进,使声音更饱满。
摘要由CSDN通过智能技术生成

大家在初中物理学习声学时就听说过,声音(乐音)有三要素:响度,音调和音色;

而在大雾A:力学中学过波动后,我们又知道:声音是一种纵波,波的振幅对应着以前说的响度,其平方与能量成正比;波的频率则对应着以前说的音调,代表波源振动的快慢。

那么问题来了:乐音的第三要素——音色,它到底是个什么玩意?

ecfd2a5123eb3e4533f2bd974a37ff4e.png

在搞清这个问题前,我们先研究一下前两个要素——振幅和频率。

弦线上的横波在略微近似下,可以用下面的波动方程进行极好的描述:

7b50b7f21ee951580bd1b4b625d93bca.png 02e89a28cdac26d87bda1900b5eee21f.gif

图源知乎

而声音是一种疏密波,虽然其“振动”不能直接用我们所熟知的弦线上的横波演示,但可以用弹簧上的疏密波做很好的类比:

fbabd1e8557e22198e79e6460c4751af.gif

图源百度

图中的小点就是空气中的各种分子,橙色的线则是“声源”(实例如吉他弦、钢琴弦,不知道钢琴用弦发声的同学建议重修《猫和老鼠》)。实际情况下,音源会以较高频率振动,持续激发周围的空气产生声波,最终撞击在我们的鼓膜上。

当一种声音仅包含一种频率时,我们称之为“纯音”。实际生活中,有一种“乐器”可以近似发出这样单纯的声音——音叉。

495107bd93d62e4ef8c0531665072d61.png

听说MATLAB除了生孩子什么都会,那不妨让我们用MATLAB模拟一下这种声音吧!

6cf159c1540941d3faba483baad07f38.png

写一个正弦函数,用sound()函数将其以一定采样率播放即可。代码如下:

428f09226db7ab171eca2df37b29737c.png

这串简单的代码模拟了440Hz的纯音,它并没有任何“音色”可言:

(有兴趣的同学不妨点击阅读原文,下载本文中的所有代码自行娱乐。)

有的同学可能就会问了:

我明明听到这种声音特点还挺鲜明的呀,怎么能说它没有音色呢?

2953c721194d0cb8f9915a5df9b7e658.png a1ccae989f5c6ce00208efdd22c4e903.png

有的同学

65f353cce7e49c7b7966e02912cc01fe.png

小编

6b8094e5dc6cdcb0c772844d33cdcd60.png

关于这个问题的答案,相信你在完整看过这篇推送后,自然会有更深刻的了解。

在进一步润饰出更好听的音色前,我们可以先听一听钢琴49号键(即小字一组A)的声音,因为它的频率也是440Hz*。

*注:本文中所写钢琴均为标准88键;上文中的440Hz是精确值,于1939年被英国伦敦国际会议确定为“第一国际标准音高”。(取440Hz可能是因为这个音大致处于人耳听觉舒适频率范围的对数中位)

稍细心的同学就会发现,真正的钢琴音和我们模拟的纯音至少有两点明显的区别:

①有衰减

②实际感官音调比纯音略高

为了解决关于衰减的问题,我们需要先了解一下下面这个问题:

No.1

信号的包络(Envelope)

在声音设计中,通常用“ADSR”模型来描述一个声音的强度随时间的变化。“ADSR”实际上是一个声音从产生到消失的四个阶段,由Attack(起音)、Decay(衰减)、Sustain(延音)和 Release(释音)的首字母组成。

2349947a34423e8f0348d7e2d38e13ac.png

「ADSR」也被形象地称作声音的「生老停死」

声音信号的包络对其音色的影响极大,不同的乐器具有不同的音色,很大程度是因为不同乐器的结构对声音的激发方式不同,导致其包络不同。

e9f38d3d1111d5dc9050bbfa186b0712.png

有条件的话,大家可以奏响自己身边的乐器,充分感受钢琴Attack的稍纵即逝和小提琴Sustain的绕梁三日

加入ADSR修饰后代码如下:

83d08f4a3656bec7f98a7a165c2de9e9.png

这次的代码稍显复杂,但仅仅是为原本的音频信号添加了一个包络,试听一下效果:

【此处插入440HzADSR.m4a】

加入衰减的声音比之前更加自然,但和真正的钢琴相比,不够饱满,显得很单薄。下一期,我们换个思路,研究第二个问题。

参考文献

[1]窦亚星. 钢琴音色库生成系统的设计与实现[D].浙江大学,2018.

[2]程美芳. 钢琴音色识别与电子合成系统的设计与实现[D].电子科技大学,2014.

[3]MakeNoise05 - Envelope 包络(ADSR)https://www.douban.com/note/680825961/

[4]每个人都应该了解的音乐理论 https://zhuanlan.zhihu.com/p/74547235

文案|王奕豪

编辑|王奕豪

e7e92e599e1d79c1c095fd7e5941d622.png

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CSDN海神之光上传的全部代码均可运行,亲测可用,尽我所能,为你服务; 1、代码压缩包内容 主函数:main.m; Fig:GUI操作界面; 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,可私信博主; 3、运行操作步骤 步骤一:将所有文件放到 Matlab的当前文件夹中; 步骤二:双击打开main.m文件;(若有其他m文件,无需运行) 步骤三:点击运行,等程序运行完得到结果; 4、语音处理系列仿真咨询 如需其他服务,可私信博主或扫描博主博客文章底部QQ名片; 4.1 CSDN博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作 语音处理系列程序定制或科研合作方向:语音隐藏、语音压缩、语音识别、语音去噪、语音评价、语音加密、语音合成、语音分析、语音分离、语音处理、语音编码、音乐检索、特征提取、声源定位、情感识别、语音采集播放变速等; CSDN海神之光上传的全部代码均可运行,亲测可用,尽我所能,为你服务; 1、代码压缩包内容 主函数:svddwt.m; 调用函数:其他m文件; 语音信号,其格式为MP4; 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,可私信博主; 3、运行操作步骤 步骤一:将所有文件放到 Matlab的当前文件夹中; 步骤二:双击打开svddwt.m文件;(若有其他m文件,无需运行) 步骤三:点击运行,等程序运行完得到结果; 4、智能优化算法背包问题系列仿真咨询 如需其他服务,可私信博主或扫描博主博客文章底部QQ名片; 4.1 CSDN博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作 语音处理系列程序定制或科研合作方向:语音隐藏、语音压缩、语音识别、语音去噪、语音评价、语音加密、语音合成、语音分析、语音分离、语音处理、语音编码、音乐检索、特征提取、声源定位、情感识别、语音采集播放变速等;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值