MATLAB趣味应用:演奏音乐‌

目前我用MATLAB演奏音乐主要通过我编写fplay函数和fchord函数。最基础的是fplay函数,它用来实现单个乐音,fchord用来实现和弦。

下面是两个函数的文件:

这两个函数只能实现比较简单的音,演奏简单的谱,比较复杂的琶音等我还不懂呢~

1.fplay.m

% Usage : music=fplay(freq,time) %     input : %         freq : frequency code %           the number 49 represents a1( 440 Hz ), %           the number 89 represents a rest %         time : the continuing time of tone %           1 represents the time spends in 1 beat %     output : %         music : the data of the tone with the samping frequency is 44100 function music=fplay(freq,time) freqs=440*2.^([-48:60]/12); Fs=44100; t=linspace(0,time,floor(time*Fs)); % 一种琴音衰减曲线 % if freq==89 %     music=0*sin(freqs(freq)*2*pi*t).*(1-t/time); % else %     music=sin(freqs(freq)*2*pi*t).*(1-t/time); % end % 另一种琴音衰减曲线 if freq==89     music=0*sin(freqs(freq)*2*pi*t).*exp(-4*t); else     %随便加的泛音数据     music=(sin(freqs(freq)*2*pi*t)+0.6*sin(freqs(freq+12)*2*pi*t)+0.3*sin(freqs(freq+24)*2*pi*t)...         ).*exp(-4*t); end end

fplay函数需要让乐音的频率对应编号,下面是我自编的编号

另外,休止符是89。

2.fchord.m

% 演奏和弦 function c=fchord(f,t) c=fplay(f(1),t); for i=2:length(f)     c=c+fplay(f(i),t); end

3.这是一部分我和我的祖国的代码,剩下的大家可以找谱自己编写

clear;clc;

Fs=44100;

bt=0.36;

music=[];

% 1

mg=[];

mf=[];

g=[89,64,66,68,66,64,61];

t=ones(1,7)*bt;

for i=1:length(g)

   m=fplay(g(i),t(i));

   mg=[mg,m];

end

f=[89,28,35,40,44,40,35];

for i=1:length(f)

   m=fplay(f(i),t(i));

   mf=[mf,m];

end

music=[music,mg+mf];

% 2

mg=[];

mf=[];

g=[63,61,56,59];

t=[1,1.5,0.5,6]*bt;

for i=1:length(g)

   m=fplay(g(i),t(i));

   mg=[mg,m];

end

f=[28,35,40,28,35,40,44,40,35];

t=ones(1,9)*bt;

for i=1:length(f)

   m=fplay(f(i),t(i));

   mf=[mf,m];

end

mg(length(mf))=0;

music=[music,mg+mf];

% 3

mg=[];

mf=[];

g=[64,66,68,66,64,61];

t=ones(1,6)*bt;

for i=1:length(g)

   m=fplay(g(i),t(i));

   mg=[mg,m];

end

f=[28,35,40,44,40,35];

for i=1:length(f)

   m=fplay(f(i),t(i));

   mf=[mf,m];

end

music=[music,mg+mf];

% 4

mg=[];

mf=[];

g=[63,59,56,61];

t=[1,1.5,0.5,6]*bt;

for i=1:length(g)

   m=fplay(g(i),t(i));

   mg=[mg,m];

end

f=[28,35,40,33,40,45,49,45,40];

t=ones(1,9)*bt;

for i=1:length(f)

   m=fplay(f(i),t(i));

   mf=[mf,m];

end

mg(length(mf))=0;

music=[music,mg+mf];

% 5

mg=[];

mf=[];

g=[59,57,56,54];

t=[1,1,1,3]*bt;

for i=1:length(g)

   m=fplay(g(i),t(i));

   mg=[mg,m];

end

f=[30,37,42,45,42,37];

t=ones(1,6)*bt;

for i=1:length(f)

   m=fplay(f(i),t(i));

   mf=[mf,m];

end

mg(length(mf))=0;

music=[music,mg+mf];

% 6

mg=[];

mf=[];

g=[51,49,47,56];

t=[1,1,1,3]*bt;

for i=1:length(g)

   m=fplay(g(i),t(i));

   mg=[mg,m];

end

f=[23,30,35,28,35,40];

t=ones(1,6)*bt;

for i=1:length(f)

   m=fplay(f(i),t(i));

   mf=[mf,m];

end

mg(length(mf))=0;

music=[music,mg+mf];

soundsc(music,Fs) % soundsc好像比sound要好听

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空