数学建模故事

MATLAB乐器(如何用matlab演奏音乐)

2019-02-21  本文已影响1人  数学建模教程

近期在家无聊,刷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|里面的每个数字都是四分之一音符,每四分之一音符为一拍,四个四分之一音符不就四拍了嘛。那|11111111|也是四拍,它是由8个八分之一音符构成的一小节。

这里红色方框内,加起来还是一样的。

更简单的来讲,就是数字底下画一条线,就比不划线快一倍,划两条线就再快一倍,在我们的代码里,是如下的转换关系。

3

所以单纯的发出声音是不可取的

于是我们添加0这个休止符的部分,并且增加了八分之一音符和十六分之一音符的部分。

可是即便如此,播放的声音也显得不和谐,于是我们需要引入这三行代码,借此让声音播放更平滑。

mod4 = sin(pi*t/t(end));

mod8 = sin(pi*t_8/t_8(end));

mod16 = sin(pi*t_16/t_16(end));

4

让声音更好听一些

经过测试,我修改了2*pi中的2,并且发现这样“调参”效果还好。

那么如此一来,剩下的工作就是严格根据简谱,把音符输入进去就好了。

…………

…………

…………(有想自己尝试动手的同学,可能需要补一下乐理的基础知识)

…………

…………

5

播放心做し

这首歌几乎全是八分之一音符,其他的歌曲应该是以四分之一音符居多,大家可以修改源代码中此处的4,通过多次修改找到适合的音色。

码完后加上注释总共161行。

在播放的时候输入clear sound可以停止播放。

6

总结

大家可以自行下载简谱,根据简谱的数字,一节一节输入成代码,自行演奏其他歌曲,后台回复matlab乐器关键词可以获得文中的代码。

文章发于公众号:数学建模教程

简介:涵盖大学的各个方面,数模入门到轻松拿奖,萌新如何成长成为大佬,升学是保研还是出国,英语该怎么学,其他竞赛怎么办,资料该怎么找,请关注这里~

上一篇下一篇

猜你喜欢

热点阅读