首先,你要在网站上搜集一个音乐简谱
然后,无脑输入进我的代码中就行
在X1数组里面输入音调(一般来说都是1-7),就是简谱里面的数字。
在X2数组里面输入声音持续时间(也就是节拍),0.25就是1/4拍。
连着的输入0.25,有加空格的输入0.5。
实际声音响度有高有低怎么办呢?
我设置了另外两个函数,
music2即低响度,只需要X1中输入31-37就行。
music3即高响度,只需要X1中输入41-47就行。
不过都是低音调的,感觉那些高音调没必要。
如何修改音色呢?
我调试了一个口琴音色的ADSR包络,直接用即可。
想要其他各种音色可以搜其他大佬的ADSR。
这样,我们实现了演奏音乐的 音调 节拍 响度 音色 的四重修改,且十分方便快捷。
以下为源码
下面修改根据简谱改x1和x2就行
clc
Fs=44100;
x1=[ 1 4 5 5 6 6 6 6 6 6 5 5 5 5 5 5 4 4 4 4 4 4 4 1 1 1 4 5 5 6 6 6 6 6 36 6 6 6 5 4 5 6 5 5 6 5 4 4 5 6 5 4 4 4 4 4 4 4 4 4 4 3 1 1 4 4 4 4 4 4 4 4 4 3 1 1 4 4 4 4 4 4 4 5 1 1 31 1 2 2 4 4 4 4 4 4 4 4 3 1 1 4 4 4 4 4 4 4 4 4 3 1 1 4 4 4 4 4 4 4 5 1 1 31 1 2 2 2 2 1 2 3 3 3 3 3 3 3 4 4 4 1 31 1 2 2 2 2 1 2 3 3 3 3 3 2 3 4 4 4 5 6 5 4 2 5 6 5 4 2 5 6 5 4 1 31 1 2 2 6 5 4 2 5 6 5 4 2 2 5 4 ];
x2=[0.5 0.5 0.5 0.25 0.25 0.25 0.25 0.25 0.5 0.25 0.25 0.25 0.25 0.25 0.5 0.25 0.25 0.25 0.25 0.25 0.75 0.25 0.25 0.25 0.5 0.5 0.5 0.5 0.25 0.25 0.25 0.25 0.25 0.5 0.15 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.5 0.25 0.25 0.25 0.25 0.5 0.25 0.25 0.25 0.25 0.5 0.25 0.25 0.25 0.25 0.25 0.25 0.5 0.25 0.25 0.5 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.5 0.25 0.25 0.25 0.5 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.5 0.25 0.25 0.5 0.25 0.25 0.25 0.5 0.25 0.25 0.25 0.25 0.25 0.25 0.5 0.5 0.5 0.5 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.5 0.25 0.25 0.25 0.5 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.5 0.25 0.25 0.5 0.25 0.25 0.25 0.5 0.5 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.5 0.25 0.25 0.25 0.5 0.25 0.25 0.25 0.25 0.5 0.5 0.25 0.25 0.25 0.25 0.25 0.5 0.25 0.25 0.5 0.25 0.25 0.25 1 0.25 0.25 0.25 0.25 0.5 0.25 0.25 0.25 0.25 0.5 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.5 1 0.5 0.25 0.25 1 0.25 0.25 0.25 0.25 0.25 0.25 0.25 1 ];
Y=[];
z=length(x1);
for i=1:z
if x1(i)>40
y=music3(x1(i),x2(i));
elseif x1(i)>30
y=music2(x1(i),x2(i));
else y=music1(x1(i),x2(i));
end
Y=[Y y];
end
sound(Y,Fs);
function y = music1( tone, rhythm)
Fs=44100;
A=linspace(0 , 1.75 , Fs*rhythm*0.2 );
D=linspace(1.75 , 1.5 , Fs*rhythm*0.2 );
S=linspace(1.5 , 1.25 , Fs*rhythm*0.4 );
R=linspace(1 , 0 , Fs*rhythm*0.2 );
ADSR=[A D S R];
freqs=[262,294,330,349,392,440,494,0,0,0,523,587,659,698,783,880,988,0,0,0,11046,175,1318,1397,1566,1760,1976,0,0,0];
n=0:length(ADSR)-1;
y=sin(2*pi*freqs(tone)*n/Fs) .* ADSR;
end
function y = music2( tone, rhythm)
Fs=44100;
A=linspace(0 , 1.75 , Fs*rhythm*0.2 );
D=linspace(1.75 , 1.5 , Fs*rhythm*0.2 );
S=linspace(1.5 , 1.25 , Fs*rhythm*0.4 );
R=linspace(1 , 0 , Fs*rhythm*0.2 );
ADSR=[A D S R];
freqs=[262,294,330,349,392,440,494,0,0,0,523,587,659,698,783,880,988,0,0,0,1046,1175,1318,1397,1566,1760,1976,0,0,0,262,294,330,349,392,440,494,0,0];
n=0:length(ADSR)-1;
y=0.8*sin(2*pi*freqs(tone)*n/Fs) .* ADSR;
end
function y = music3( tone, rhythm)
Fs=44100;
A=linspace(0 , 1.75 , Fs*rhythm*0.2 );
D=linspace(1.75 , 1.5 , Fs*rhythm*0.2 );
S=linspace(1.5 , 1.25 , Fs*rhythm*0.4 );
R=linspace(1 , 0 , Fs*rhythm*0.2 );
ADSR=[A D S R];
freqs=[262,294,330,349,392,440,494,0,0,0,523,587,659,698,783,880,988,0,0,0,1046,1175,1318,1397,1566,1760,1976,0,0,0,262,294,330,349,392,440,494,0,0,0,262,294,330,349,392,440,494,0,0,0];
n=0:length(ADSR)-1;
y=1.5*sin(2*pi*freqs(tone)*n/Fs) .* ADSR;
end
注意:想要更高音调输入11-17 21-27即可,不过我只设置了中等响度,想更细致化也是很好改的。
实际演奏效果可来B站听
此为大一时期的matlab课设,使用后记得B站投币点赞。