用MATLAB制作音乐-小星星


前言

总觉得音乐很神奇,喜欢音乐,所以看到matlab可以制作音乐顿时精神了,也算是学习的乐趣了。

matlab播放音乐是由sound(Y,fs,bits)函数完成的,该函数的3个参数代表输入信号、采样率、比特率。先说采样率fs的设置,人耳能够听到的声音范围是20~20000Hz。根据采样定理fs只需要大于40000即可。此处采样率的设置采用了MP3的标准,即fs=44.1k.再说输入信号Y,Y一般是一个正弦波,如Asin(2piwt)。其中A控制着声音的大小,w控制着声音的高低,t的范围控制着声音的长短,所以理论上利用这个公式可以发出任何声音,只是不能控制音色和音质。比特率采用默认值即可,该参数省略。


摸索

Fs=8192;
x=linspace(0,2*pi,Fs);%播放声音默认采样率8192  1000-38400
y=sin(x);
plot(x,y);
%sound(y,Fs);%识别不了 想办法增加周期
% y=sin(2*x);%1s内两次震动 音乐中标准A 440
y=sin(440*x);
plot(x,y);
sound(y,Fs);

%%
Fs1=8192;
Fs2=20000;
x1=linspace(0,2*pi,Fs1);
x2=linspace(0,2*pi,Fs2);
y1=sin(440*x1);
y2=sin(440*x2);
 sound(y1,Fs);%采样率影响
sound(y2,Fs);

%%
Fs=8192;
x=linspace(0,2*pi,Fs);
y1=sin(440*x);
y2=sin(500*x);
y3=sin(650*x);
sound(y3,Fs);
sound(y3,Fs);%频率影响

%%
%十二平均率表  主音 全音 半音 跨度8阶
%十二平均律,亦称“十二等程律”,世界上通用的一组音(八度)分成十二个半音音程的律制,各相邻两律之间的振动数之比完全相等。十二平均律在交响乐队和键盘乐器中得到广泛使用,钢琴即是根据十二平均律来定音的。-——来源百度百科
%A-F 523,587,659,698,783,880,988
freqs=[523,587,659,698,783,880,988];
y1=sin(freqs(1)*x);
y2=sin(freqs(2)*x);
y3=sin(freqs(3)*x);
y4=sin(freqs(4)*x);
y5=sin(freqs(5)*x);
y=[y1,y2,y3,y4,y5];
sound(y,Fs);

小星星

Fs=8192;
x=linspace(0,2*pi,Fs);  %音与音的分隔  (声音大小一样只是频率不一样)
x2=linspace(0,2*pi*2,Fs*2);
freqs=[523,587,659,698,783,880,988];
y1=sin(freqs(1)*x).*(1-x/(2*pi));
y2=sin(freqs(1)*x).*(1-x/(2*pi));
y3=sin(freqs(5)*x).*(1-x/(2*pi));
y4=sin(freqs(5)*x).*(1-x/(2*pi));
y5=sin(freqs(6)*x).*(1-x/(2*pi));
y6=sin(freqs(6)*x).*(1-x/(2*pi));
y7=sin(freqs(5)*x2).*(1-x2/(2*pi));

y=[y1,y2,y3,y4,y5,y6,y7];
plot(y);
sound(y,Fs);

整合

function y=gen_wave(tone,rythm)
    Fs=8192;
    freqs=[523,587,659,698,783,880,988];
    x=linspace(0,2*pi*rythm,floor(Fs*rythm));
    y=sin(freqs(tone)*x).*(1-x/(rythm*2*pi));
end
Fs=8192;

y1=gen_wave(1,0.5);%半拍
y2=gen_wave(1,0.5);
y3=gen_wave(5,0.5);
y4=gen_wave(5,0.5);
y5=gen_wave(6,0.5);
y6=gen_wave(6,0.5);
y7=gen_wave(5,1);
y8=gen_wave(4,0.5);%半拍
y9=gen_wave(4,0.5);
y10=gen_wave(3,0.5);
y11=gen_wave(3,0.5);
y12=gen_wave(2,0.5);
y13=gen_wave(2,0.5);
y14=gen_wave(1,1);

x1=gen_wave(5,0.5);%半拍
x2=gen_wave(5,0.5);
x3=gen_wave(4,0.5);
x4=gen_wave(4,0.5);
x5=gen_wave(3,0.5);
x6=gen_wave(3,0.5);
x7=gen_wave(2,1);
%
x8=gen_wave(5,0.5);%半拍
x9=gen_wave(5,0.5);
x10=gen_wave(4,0.5);
x11=gen_wave(4,0.5);
x12=gen_wave(3,0.5);
x13=gen_wave(3,0.5);
x14=gen_wave(2,1);
%
f1=gen_wave(1,0.5);%半拍
f2=gen_wave(1,0.5);
f3=gen_wave(5,0.5);
f4=gen_wave(5,0.5);
f5=gen_wave(6,0.5);
f6=gen_wave(6,0.5);
f7=gen_wave(5,1);
f8=gen_wave(4,0.5);%半拍
f9=gen_wave(4,0.5);
f10=gen_wave(3,0.5);
f11=gen_wave(3,0.5);
f12=gen_wave(2,0.5);
f13=gen_wave(2,0.5);
f14=gen_wave(1,1);

y=[y1,y2,y3,y4,y5,y6,y7,y8,y9,y10,y11,y12,y13,y14,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14];

sound(y,Fs);

十二平均率表

  • 1
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值