近期在家无聊,刷B站视频的时候发现有up上传了matlab制作的音乐,效果很是有趣。顺带吐槽一下,手机端的B站总是推荐莫名其妙的内容,但是通过搜索关键词,你又总能搜到不错的视频,我试了几个教学课程,视频质量都很高。
1 代码的简要介绍函数sound(y, Fs, nBits),用于把信号数据的矩阵转换成声音,三个参数分别代表输入信号,采样频率和比特率。标准CD格式为44.1k的采样频率,16位量化位数。所以我们一般设置Fs=44100,nBits暂且默认。
2 乐理小课堂函数sound(y, Fs, nBits)中的y作为包含声音信息的主角,理论上我们可以自由发挥得到任何声音。
为方便理解,看下图,从上往下,我们称它为低音,中音和高音部分。(当然这么多可能不够,大家可以通过下表自行添加。)
这里我们把钢琴中的CDEFGAB七个音设置到中音部分的1234567中去。
根据这张图,中音部分的1为sin(2*pi*261.63 *t),2为sin(2*pi*293.66 *t)。此处t为音长,暂且取0.5s。
于是我们有了如下这个:
简谱来源:http://www.qupu123.com/jipu/p325320.html
但是呢,试运行了下,效果并不是很好,仅仅是机械般地播放出了声音,而且还没有0的停止部分。
下面我简要介绍一下什么是44拍。首先你可以看到下图左上的四分之四,这说明每一个小节都是4拍,就是红色方框内的音符都是4拍。比如 |1 1 1 1|就是4拍。
♩=84这里表示每分钟84拍,那么一拍的时间为60/84约等于0.7143秒。(实际上我把t设置的很小)
那么小白可能就会问了,红框里面有11个数字呀~
实际上,|1 1 1 1|里面的每个数字都是四分之一音符,每四分之一音符为一拍,四个四分之一音符不就四拍了嘛。那|1 1 1 1 1 1 1 1|也是四拍,它是由8个八分之一音符构成的一小节。
这里红色方框内,加起来还是一样的。
更简单的来讲,就是数字底下画一条线,就比不划线快一倍,划两条线就再快一倍,在我们的代码里,是如下的转换关系。
3 所以单纯的发出声音是不可取的于是我们添加0这个休止符的部分,并且增加了八分之一音符和十六分之一音符的部分。
可是即便如此,播放的声音也显得不和谐,于是我们需要引入这三行代码,借此让声音播放更平滑。
4 让声音更好听一些mod4 = sin(pi*t/t(end));mod8 = sin(pi*t_8/t_8(end));mod16 = sin(pi*t_16/t_16(end));
经过测试,我修改了2*pi中的2,并且发现这样“调参”效果还好。
那么如此一来,剩下的工作就是严格根据简谱,把音符输入进去就好了。
…………
…………
…………(有想自己尝试动手的同学,可能需要补一下乐理的基础知识)
…………
…………
5 播放心做し这首歌几乎全是八分之一音符,其他的歌曲应该是以四分之一音符居多,大家可以修改源代码中此处的4,通过多次修改找到适合的音色。
码完后加上注释总共161行。
在播放的时候输入clear sound可以停止播放。
6 总结大家可以自行下载简谱,根据简谱的数字,一节一节输入成代码,自行演奏其他歌曲,后台回复matlab乐器关键词可以获得文中的代码。
后台回复matlab乐器
往期推荐负责代码的同学都应该知道的事情,数学建模应该站在巨人的肩膀上
[入门向]国赛美赛数学建模竞赛matlab速成方法(如何套用改编matlab代码,以三维插值为例)
海量数模教程资料,涵盖95%数学建模竞赛内容汇总,无需转发可直接下载
数模论文写作排版及其技巧
流程图怎么做?果断打开VISIO?其实还有PPT
[新手向]建模的全过程是什么
如何快速搞定论文的参考文献
在数模国赛不明查美术建模前,我们都是如何水奖的?
[纯(小)白向]数学建模美赛LATEX模板应用教程
【新手向】为什么你的MATLAB运行的结果图那么丑,你是不是忘了点那个按钮
数模写作嫌知网论文太少,外文SCI怎么下?
英语才过六级,数模美赛论文怎么写好?
数学建模国赛出题趋势及历史
2019年度大学本科竞赛及考试索引
数学建模教程
ID:Math_Modeling
涵盖大学的各个方面,数模入门到轻松拿奖,萌新如何成长成为大佬,升学是保研还是出国,英语该怎么学,其他竞赛怎么办,资料该怎么找,请关注这里~