利用Matlab(2015b)演奏孤勇者
起因
之前在浏览B站的时候,无意间刷到了一个使用Matlab演奏歌曲的视频,这不禁使我大为震撼,原来Matlab不仅只是用来画波形,做计算,还可以这样玩,真是应了网友的那句话,Matlab除了生孩子,是啥都会啊!
于是,怀着好奇的心理,我仔细研究了一下,Matlab是怎么实现这个过程的,一番学习下来,还是颇有收获的,其实原理和代码都不复杂,对我这种音乐小白来说,工作量最大的是乐谱的识别与转换。但我也只是粗略的学习了一下,用孤勇者的简谱进行实现,过程中也还有一些瑕疵,简谱里面有些音符我也不慎详解,但效果最终还是有一点的。
学习
我用Matlab演奏歌曲的入门视频是–>正月点灯笼(点这里<–)UP主的这个视频,怎么用Matlab生成一段音乐,讲解的很细致了,从声音的原理讲到用sound函数生成音乐,发音的不同主要是和频率有关系,与采样频率并无多大关系(虽然根据奈奎斯特采样频率,应该是2倍的关系,但经过测试现,Matlab的默认采样频率即可)。
至于乐谱的学习,我是在网上搜的,看了很多资料,才大致理解了五线谱和简谱,最终也是依照孤勇者的简谱实现了音乐的生成。
分享
Fs = 8192;
%前奏
y1 = LW(2,0.5);
y2 = LW(21,0.5);
y3 = LW(1,0.5);
y4 = LW(20,0.5);
y5 = LW(2,0.5);
y6 = LW(21,0.5);
y7 = LW(1,0.5);
y8 = LW(20,0.5);
y = [y1,y2,y3,y4,y5,y6,y7,y8];
y1 = LW(2,0.5);
y2 = LW(21,0.5);
y3 = LW(1,0.5);
y4 = LW(20,0.5);
y5 = LW(2,0.5);
y6 = LW(21,0.5);
y7 = LW(1,0.5);
y8 = LW(20,0.5);
y = [y,y1,y2,y3,y4,y5,y6,y7,y8];
y1 = LW(2,0.5);
y2 = LW(21,0.5);
y3 = LW(1,0.5);
y4 = LW(20,0.5);
y5 = LW(2,0.5);
y6 = LW(21,0.5);
y7 = LW(1,0.5);
y8 = LW(20,0.5);
y = [y,y1,y2,y3,y4,y5,y6,y7,y8];
y1 = LW(2,0.5);
y2 = LW(21,0.5);
y3 = LW(1,0.5);
y4 = LW(20,0.5);
y5 = LW(2,0.5);
y6 = LW(21,0.5);
y7 = LW(1,0.5);
y8 = LW(20,0.5);
y = [y,y1,y2,y3,y4,y5,y6,y7,y8];
y1 = LW(2,0.5);
y2 = LW(21,0.5);
y3 = LW(1,0.5);
y4 = LW(20,0.5);
y5 = LW(2,0.5);
y6 = LW(21,0.5);
y7 = LW(1,0.5);
y8 = LW(20,0.5);
y = [y,y1,y2,y3,y4,y5,y6,y7,y8];
%都是勇敢的
y1 = LW(3,2);
y2 = LW(22,1);
y3 = LW(22,0.25);
y4 = LW(1,0.25);
y5 = LW(2,0.25);
y6 = LW(1,0.25);
y = [y,y1,y2,y3,y4,y5,y6];
%你额头的伤口
y1 = LW(3,2);
y2 = LW(22,0.5);
y3 = LW(1,0.5);
y4 = LW(2,0.25);
y5 = LW(1,0.25);
y6 = LW(2,0.25);
y7 = LW(3,0.25);
y = [y,y1,y2,y3,y4,y5,y6,y7];
%你的不同
y1 = LW(20,0.5);
y2 = LW(1,0.5);
y3 = LW(20,0.5);
y4 = LW(1,0.5);
y5 = LW(20,0.5);
y6 = LW(1,0.5);
y7 = LW(2,0.5);
y8 = LW(1,0.5);
y = [y,y1,y2,y3,y4,y5,y6,y7,y8];
%你犯的错
y1 = LW(21,2);
y2 = LW(22,1);
y3 = LW(22,1);
y = [y,y1,y2,y3];
%都不必隐藏
y1 = LW(3,2);
y2 = LW(22,1);
y3 = LW(22,0.25);
y4 = LW(1,0.25);
y5 = LW(2,0.25);
y6 = LW(1,0.25);
y = [y,y1,y2,y3,y4,y5,y6];
%你破旧的玩偶
y1 = LW(3,2);
y2 = LW(22,0.5);
y3 = LW(1,0.5);
y4 = LW(2,0.25);
y5 = LW(1,0.25);
y6 = LW(2,0.25);
y7 = LW(3,0.25);
y = [y,y1,y2,y3,y4,y5,y6,y7];
%你的面具
y1 = LW(20,0.5);
y2 = LW(1,0.5);
y3 = LW(20,0.5);
y4 = LW(1,0.5);
y5 = LW(20,0.5);
y6 = LW(1,0.5);
y7 = LW(3,0.5);
y8 = LW(2,0.5);
y = [y,y1,y2,y3,y4,y5,y6,y7,y8];
%你的自我
y1 = LW(21,2);
y2 = LW(22,1);
y3 = LW(22,1);
y = [y,y1,y2,y3];
%他们说要带着光驯服每一头怪兽
y1 = LW(20,0.25);
y2 = LW(1,0.25);
y3 = LW(6,0.5);
y4 = LW(6,0.25);
y5 = LW(6,0.25);
y6 = LW(6,0.25);
y7 = LW(5,0.25);
y8 = LW(6,0.5);
y9 = LW(6,0.25);
y10 = LW(5,0.25);
y11 = LW(6,0.25);
y12= LW(5,0.25);
y13 = LW(6,0.25);
y14= LW(5,0.25);
y=[y,y1,y2,y3,y4,y5,y6,y7,
y8,y9,y10,y11,y12,y13,y14];
%
y1 = LW(3,0.25);
y2 = LW(3,0.5);
y3 = LW(3,1);
y4 = LW(22,1);
y5 = LW(22,0.5);
y6 = LW(20,0.25);
y7 = LW(1,0.25);
y = [y,y1,y2,y3,y4,y5,y6,y7];
%他们说要缝好你的伤没有人爱小丑
y1 = LW(6,0.5);
y2 = LW(6,0.25);
y3 = LW(6,0.25);
y4 = LW(5,0.25);
y5 = LW(6,0.25);
y6 = LW(5,0.25);
y7 = LW(7,0.5);
y8 = LW(7,0.25);
y9 = LW(7,0.25);
y10 = LW(6,0.25);
y11 = LW(7,0.5);
y = [y,y1,y2,y3,y4,y5,y6,y7,
y8,y9,y10,y11];
%为何孤独不可光荣
y1 = LW(7,0.25);
y2 = LW(6,0.5);
y3 = LW(3,0.25);
y4 = LW(3,2);
y5 = LW(22,0.25);
y6 = LW(3,0.25);
y7 = LW(5,0.25);
y8 = LW(3,0.25);
y = [y,y1,y2,y3,y5,y6,y7,y8];
%人只有不完美才值得歌颂
y1 = LW(2,0.5);
y2 = LW(3,0.25);
y3 = LW(2,0.5);
y4 = LW(3,0.25);
y5 = LW(2,0.5);
y6 = LW(3,0.25);
y7 = LW(5,0.25);
y8 = LW(3,0.25);
y9 = LW(5,0.25);
y10 = LW(3,0.25);
y = [y,y1,y2,y3,y4,y5,y6,y7,
y8,y9,y10];
%谁说污泥满身的不算英雄
y1 = LW(2,0.5);
y2 = LW(3,0.25);
y3 = LW(2,0.5);
y4 = LW(3,0.25);
y5 = LW(2,1);
y6 = LW(22,0.5);
y7 = LW(1,0.25);
y8 = LW(2,0.25);
y = [y,y1,y2,y3,y4,y5,y6,y7,y8];
y1 = LW(3,0.5);
y2 = LW(20,0.5);
y3 = LW(1,0.5);
y4 = LW(3,0.5);
y5 = LW(2,0.5);
y6 = LW(3,0.25);
y7 = LW(2,0.25);
y8 = LW(1,0.25);
y9 = LW(1,0.5);
y = [y,y1,y2,y3,y4,y5,y6,y7,y8,y9];
y1 = LW(20,2);
y2 = LW(22,1);
y3 = LW(22,0.5);
y4 = LW(6,0.25);
y5 = LW(7,0.25);
y = [y,y1,y2,y3,y4,y5];
%爱你孤身走暗巷,爱你不跪的模样
y1 = LW(8,0.25);
y2 = LW(9,0.25);
y3 = LW(7,0.25);
y4 = LW(8,0.25);
y5 = LW(8,0.5);
y6 = LW(8,0.25);
y7 = LW(7,0.25);
y8 = LW(8,0.25);
y9 = LW(9,0.25);
y10 = LW(7,0.25);
y11 = LW(8,0.25);
y12= LW(8,0.5);
y13 = LW(8,0.25);
y14= LW(9,0.25);
y = [y,y1,y2,y3,y4,y5,y6,y7,
y8,y9,y10,y11,y12,y13,y14];
%爱你对峙过绝望,不肯哭一场
y1 = LW(10,0.25);
y2 = LW(9,0.25);
y3 = LW(10,0.25);
y4 = LW(9,0.25);
y5 = LW(10,0.5);
y6 = LW(10,0.25);
y7 = LW(9,0.25);
y8 = LW(10,0.5);
y9 = LW(12,0.5);
y10 = LW(10,0.5);
y11 = LW(6,0.25);
y12= LW(7,0.25);
y = [y,y1,y2,y3,y4,y5,y6,y7,
y8,y9,y10,y11,y12];
%爱你破烂的衣裳却敢赌命运的枪
y1 = LW(8,0.25);
y2 = LW(9,0.25);
y3 = LW(7,0.25);
y4 = LW(8,0.25);
y5 = LW(8,0.5);
y6 = LW(8,0.25);
y7 = LW(7,0.25);
y8 = LW(8,0.25);
y9 = LW(9,0.25);
y10 = LW(7,0.25);
y11 = LW(8,0.25);
y12= LW(8,0.5);
y13 = LW(8,0.25);
y14= LW(9,0.25);
y = [y,y1,y2,y3,y4,y5,y6,y7,
y8,y9,y10,y11,y12,y13,y14];
%爱你和我那么像,缺口都一样
y1 = LW(10,0.25);
y2 = LW(9,0.25);
y3 = LW(10,0.25);
y4 = LW(9,0.25);
y5 = LW(10,0.5);
y6 = LW(10,0.25);
y7 = LW(9,0.25);
y8 = LW(10,0.5);
y9 = LW(12,0.5);
y10 = LW(10,0.5);
y11 = LW(12,0.5);
y = [y,y1,y2,y3,y4,y5,y6,y7,
y8,y9,y10,y11];
%去吗 配吗 这褴褛的披风
y1 = LW(10,0.5);
y2 = LW(12,0.25);
y3 = LW(10,0.5);
y4 = LW(12,0.25);
y5 = LW(10,0.25);
y6 = LW(12,0.25);
y7 = LW(13,0.25);
y8 = LW(10,0.25);
y9 = LW(12,0.5);
y10 = LW(12,0.5);
y = [y,y1,y2,y3,y4,y5,y6,y7,
y8,y9,y10];
%战吗 战啊 以最卑微的梦
y1 = LW(10,0.5);
y2 = LW(12,0.25);
y3 = LW(10,0.5);
y4 = LW(12,0.25);
y5 = LW(10,0.25);
y6 = LW(12,0.25);
y7 = LW(13,0.25);
y8 = LW(10,0.25);
y9 = LW(12,0.5);
y10 = LW(12,0.25);
y11 = LW(12,0.25);
y = [y,y1,y2,y3,y4,y5,y6,y7,
y8,y9,y10,y11];
%致那黑夜中的呜咽与怒吼
y1 = LW(10,0.25);
y2 = LW(9,0.25);
y3 = LW(9,0.5);
y4 = LW(9,0.5);
y5 = LW(8,0.25);
y6 = LW(10,0.25);
y7 = LW(10,0.25);
y8 = LW(9,0.25);
y9 = LW(9,0.5);
y10 = LW(9,0.5);
y11 = LW(8,0.25);
y12 = LW(8,0.25);
y = [y,y1,y2,y3,y4,y5,y6,y7,
y8,y9,y10,y11,y12];
%谁说站在光里的才算英雄
y1 = LW(6,2);
y2 = LW(22,1);
y3 = LW(22,0.5);
y4 = LW(12,0.25);
y5 = LW(12,0.25);
y = [y,y1,y2,y3,y4,y5,];
y1 = LW(10,0.25);
y2 = LW(9,0.25);
y3 = LW(9,0.5);
y4 = LW(9,0.5);
y5 = LW(8,0.25);
y6 = LW(10,0.25);
y7 = LW(10,0.25);
y8 = LW(9,0.25);
y9 = LW(9,0.5);
y10 = LW(9,0.5);
y11 = LW(8,0.25);
y12 = LW(8,0.25);
y = [y,y1,y2,y3,y4,y5,y6,y7,
y8,y9,y10,y11,y12];
%空
y1 = LW(6,2);
y2 = LW(22,0.5);
y3 = LW(22,0.5);
y4 = LW(22,0.5);
y5 = LW(6,0.25);
y6 = LW(5,0.25);
y = [y,y1,y2,y3,y4,y5,y6];
%他们说要戒了你的狂就像擦掉了污垢
y1 = LW(6,0.5);
y2 = LW(5,0.25);
y3 = LW(6,0.25);
y4 = LW(5,0.25);
y5 = LW(6,0.25);
y6 = LW(5,0.25);
y7 = LW(6,0.5);
y8 = LW(6,0.25);
y9 = LW(5,0.25);
y10 = LW(6,0.25);
y11 = LW(5,0.25);
y12 = LW(6,0.25);
y13 = LW(5,0.25);
y = [y,y1,y2,y3,y4,y5,y6,y7,
y8,y9,y10,y11,y12,y13];
%
y1 = LW(3,0.25);
y2 = LW(3,0.5);
y3 = LW(3,1);
y4 = LW(22,0);
y5 = LW(22,0.5);
y6 = LW(6,0.25);
y7 = LW(5,0.25);
y = [y,y1,y2,y3,y4,y5,y6,y7];
%他们说要顺台阶而上而代价是低头
y1 = LW(6,0.5);
y2 = LW(5,0.25);
y3 = LW(6,0.25);
y4 = LW(5,0.25);
y5 = LW(6,0.25);
y6 = LW(5,0.25);
y7 = LW(7,0.5);
y8 = LW(7,0.25);
y9 = LW(7,0.25);
y10 = LW(6,0.25);
y11 = LW(7,0.25);
y12 = LW(6,0.25);
y = [y,y1,y2,y3,y4,y5,y6,y7,
y8,y9,y10,y11,y12];
%
y1 = LW(3,0.25);
y2 = LW(3,0.5);
y3 = LW(3,1);
y4 = LW(22,1);
y5 = LW(22,0.5);
y6 = LW(3,0.25);
y7 = LW(5,0.25);
y8 = LW(3,0.25);
y = [y,y1,y2,y3,y4,y5,y6,y7,y8];
%那就让我不可乘风 你一样骄傲者那种孤勇
y1 = LW(2,0.5);
y2 = LW(3,0.25);
y3 = LW(2,0.5);
y4 = LW(3,0.25);
y5 = LW(2,0.5);
y6 = LW(3,0.25);
y7 = LW(5,0.25);
y8 = LW(3,0.25);
y9 = LW(5,0.25);
y10 = LW(3,0.25);
y = [y,y1,y2,y3,y4,y5,y6,y7,
y8,y9,y10];
y1 = LW(2,0.5);
y2 = LW(3,0.25);
y3 = LW(2,0.5);
y4 = LW(3,0.25);
y5 = LW(2,1);
y6 = LW(22,0.5);
y7 = LW(1,0.25);
y8 = LW(2,0.25);
y = [y,y1,y2,y3,y4,y5,y6,y7,y8];
%谁说对弈平凡的不算英雄
y1 = LW(3,0.5);
y2 = LW(6,0.5);
y3 = LW(8,0.5);
y4 = LW(10,0.5);
y5 = LW(9,0.5);
y6 = LW(10,0.25);
y7 = LW(9,0.25);
y8 = LW(8,0.25);
y9 = LW(8,0.5);
y = [y,y1,y2,y3,y4,y5,y6,y7,
y8,y9];
y1 = LW(6,4);
y2 = LW(22,0.5);
y3 = LW(6,0.25);
y4 = LW(7,0.25);
y = [y,y1,y2,y3,y4];
%爱你孤身走暗巷,爱你不跪的模样
y1 = LW(8,0.25);
y2 = LW(9,0.25);
y3 = LW(7,0.25);
y4 = LW(8,0.25);
y5 = LW(8,0.5);
y6 = LW(8,0.25);
y7 = LW(7,0.25);
y8 = LW(8,0.25);
y9 = LW(9,0.25);
y10 = LW(7,0.25);
y11 = LW(8,0.25);
y12= LW(8,0.5);
y13 = LW(8,0.25);
y14= LW(9,0.25);
y = [y,y1,y2,y3,y4,y5,y6,y7,
y8,y9,y10,y11,y12,y13,y14];
%爱你对峙过绝望,不肯哭一场
y1 = LW(10,0.25);
y2 = LW(9,0.25);
y3 = LW(10,0.25);
y4 = LW(9,0.25);
y5 = LW(10,0.5);
y6 = LW(10,0.25);
y7 = LW(9,0.25);
y8 = LW(10,0.5);
y9 = LW(12,0.5);
y10 = LW(10,0.5);
y11 = LW(6,0.25);
y12= LW(7,0.25);
y = [y,y1,y2,y3,y4,y5,y6,y7,
y8,y9,y10,y11,y12];
%爱你破烂的衣裳却敢赌命运的枪
y1 = LW(8,0.25);
y2 = LW(9,0.25);
y3 = LW(7,0.25);
y4 = LW(8,0.25);
y5 = LW(8,0.5);
y6 = LW(8,0.25);
y7 = LW(7,0.25);
y8 = LW(8,0.25);
y9 = LW(9,0.25);
y10 = LW(7,0.25);
y11 = LW(8,0.25);
y12= LW(8,0.5);
y13 = LW(8,0.25);
y14= LW(9,0.25);
y = [y,y1,y2,y3,y4,y5,y6,y7,
y8,y9,y10,y11,y12,y13,y14];
%爱你和我那么像,缺口都一样
y1 = LW(10,0.25);
y2 = LW(9,0.25);
y3 = LW(10,0.25);
y4 = LW(9,0.25);
y5 = LW(10,0.5);
y6 = LW(10,0.25);
y7 = LW(9,0.25);
y8 = LW(10,0.5);
y9 = LW(12,0.5);
y10 = LW(10,0.5);
y11 = LW(12,0.5);
y = [y,y1,y2,y3,y4,y5,y6,y7,
y8,y9,y10,y11];
%去吗 配吗 这褴褛的披风
y1 = LW(10,0.5);
y2 = LW(12,0.25);
y3 = LW(10,0.5);
y4 = LW(12,0.25);
y5 = LW(10,0.25);
y6 = LW(12,0.25);
y7 = LW(13,0.25);
y8 = LW(10,0.25);
y9 = LW(12,0.5);
y10 = LW(12,0.5);
y = [y,y1,y2,y3,y4,y5,y6,y7,
y8,y9,y10];
%战吗 战啊 以最卑微的梦
y1 = LW(10,0.5);
y2 = LW(12,0.25);
y3 = LW(10,0.5);
y4 = LW(12,0.25);
y5 = LW(10,0.25);
y6 = LW(12,0.25);
y7 = LW(13,0.25);
y8 = LW(10,0.25);
y9 = LW(12,0.5);
y10 = LW(12,0.25);
y11 = LW(12,0.25);
y = [y,y1,y2,y3,y4,y5,y6,y7,
y8,y9,y10,y11];
%致那黑夜中的呜咽与怒吼
y1 = LW(10,0.25);
y2 = LW(9,0.25);
y3 = LW(9,0.5);
y4 = LW(9,0.5);
y5 = LW(8,0.25);
y6 = LW(10,0.25);
y7 = LW(10,0.25);
y8 = LW(9,0.25);
y9 = LW(9,0.5);
y10 = LW(9,0.5);
y11 = LW(8,0.25);
y12 = LW(8,0.25);
y = [y,y1,y2,y3,y4,y5,y6,y7,
y8,y9,y10,y11,y12];
%谁说站在光里的才算英雄
y1 = LW(6,2);
y2 = LW(22,1);
y3 = LW(22,0.5);
y4 = LW(12,0.25);
y5 = LW(12,0.25);
y = [y,y1,y2,y3,y4,y5,];
y1 = LW(10,0.25);
y2 = LW(9,0.25);
y3 = LW(9,0.5);
y4 = LW(9,0.5);
y5 = LW(8,0.25);
y6 = LW(10,0.25);
y7 = LW(10,0.25);
y8 = LW(9,0.25);
y9 = LW(9,0.5);
y10 = LW(9,0.5);
y11 = LW(8,0.25);
y12 = LW(8,0.25);
y = [y,y1,y2,y3,y4,y5,y6,y7,
y8,y9,y10,y11,y12];
audiowrite('LonelyWarrior.wav',y,Fs)
sound(y,Fs)
2016版本以上可以将函数直接写在主程序里面,否则需要另建一个文件
function y = LW(tone,rhythm )%参数为第几个音,和节奏,例如0.5代表半拍
Fs=8192;
x=linspace(0,2*rhythm*pi,floor(rhythm*Fs));%floor对值取整,rhythm*Fs为采样率
freqs = [494,554,622,659,740,830,932, 988,1049,1245,1319,1480,1661,1865, 247,277,311,330,370,415,466, 0];%全音,最后一个代表休止
y=sin(freqs(tone)*x).*exp(-1*x);
end
效果展示
–>B站视频<–
百度网盘链接
链接:https://pan.baidu.com/s/1yhS705RZBN0GYJxJBi5keA?pwd=0000
提取码:0000
–来自百度网盘超级会员V4的分享
Gitee地址:https://gitee.com/chinamuke/Matlab.git
Github地址:https://github.com/KorHui/Matlab.git