MATLAB乐器(如何用matlab演奏音乐)
近期在家无聊,刷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乐器关键词可以获得文中的代码。
文章发于公众号:数学建模教程
简介:涵盖大学的各个方面,数模入门到轻松拿奖,萌新如何成长成为大佬,升学是保研还是出国,英语该怎么学,其他竞赛怎么办,资料该怎么找,请关注这里~