matlab创作歌曲——《月半小夜曲》

matlab创作歌曲——《月半小夜曲》

下面是程序(可直接复制粘贴运行)
PS:低版本的matlab需要单独保存两个function函数,然后运行

%%%% 演奏《月半小夜曲》%%%%
clear all;clc;
fs = 48000;  % 采样频率

%% 各个音对应的频率
aa = 440 * 2.^(([1 : 36] - 22) / 12);
aa1 = 440 * 2.^(([1 : 12] - 34) / 12);
aa2 = 440 * 2.^(([1 : 12] + 14) / 12);
mi = 41.204;
so = 49.001;
la = 55.001;
xi = 61.737;

%% tone1是唱音,tone2是伴奏
tone1 = [0 0 0 aa(17) aa(25) aa(24) aa(25) aa(17) aa(17) aa(25) aa(24) ...
    aa(25) aa(18) aa(15) aa(24) aa(22) aa(25) aa(15) aa(15) aa(20) aa(18) ...
    aa(18) aa(17) aa(15) aa(17) aa(17) aa(25) aa(24) aa(25) aa(17) aa(17) aa(22) aa(25) ...
    aa(29) aa(27) aa(27) aa(24) aa(25) aa(27) aa(29) aa(21) ...
    aa(24) aa(22) aa(17) aa(17) aa(25) aa(24) aa(25) aa(17) aa(17) aa(20) ...
    aa(20) aa(22) aa(18) aa(15) aa(24) aa(22) aa(24) aa(15) aa(15) aa(20) aa(18) ...
    aa(18) aa(20) aa(17) aa(17) aa(25) aa(24) aa(25) aa(17) aa(17) aa(22) aa(25) ...
    aa(29) aa(27) aa(27) aa(25) aa(25) aa(25) aa(24) aa(27) aa(25) ...
    aa(25) aa(24) aa(17) aa(17) aa(25) aa(24) aa(25) aa(17) aa(17) aa(17) aa(20) ...
    aa(20) aa(22) aa(18) aa(15) aa(24) aa(22) aa(24) aa(15) aa(15) aa(20) aa(18) ...
    aa(18) aa(18) aa(20) aa(17) aa(17) aa(25) aa(24) aa(25) aa(25) aa(17) aa(17) aa(22) aa(25) ...
    aa(29) aa(27) aa(27) aa(25) aa(25) aa(25) aa(24) aa(24) aa(25) ...
    aa(24) aa(22) aa(34) aa(36) aa2(1) aa2(1) aa2(3) aa(36) aa(34) ...
    aa(32) aa(29) aa(32) aa(34) aa(34) aa(36) aa2(1) aa(36) aa2(1) ...
    aa2(6) aa2(5) aa2(3) aa2(5) 0 aa(24) aa(25) aa(27) ... 
    aa(29) aa(25) aa(29) aa(25) aa(29) aa(25) aa(27) aa(29) ...
    aa(32) aa(30) aa(30) aa(27) aa(25) aa(24) aa(22) aa(20) aa(20) aa(24) aa(27) ...
    aa(30) aa(29) aa(27) aa(29) aa(17) aa(22) aa(24) aa(25) aa(24) aa(25) aa(24) aa(22) aa(24) aa(25) ...
    aa(29) aa(27) aa(27) aa(27) aa(29) aa(27) aa(25) aa(25) aa(27) aa(25) aa(24) aa(24) aa(25) ...
    aa(24) aa(22) 0];

tone2 = [0 0 0 0 aa1(10) aa(5) aa(10) aa(12) aa(13) ...
    aa1(3) aa1(10) aa(3) aa(5) aa(6) aa1(8) aa(3) aa(8) aa(10) aa(12) ...
    aa1(1) aa1(8) aa(1) aa1(5) aa1(12) aa(5) la aa1(5) aa1(10) aa(1) aa(5) aa(10) aa(5) ...
    aa1(3) aa1(10) aa(3) aa(6) aa(10) aa(15) aa(10) aa(6) aa1(5) aa1(12) aa(5) aa(9) aa(12) ...
    aa1(10) aa(5) aa(10) aa(12) aa(13) aa1(10) aa(5) aa(10) aa(5) aa(13) ...
    aa1(3) aa1(10) aa(3) aa(6) aa(10) aa(15) aa1(8) aa(3) aa(8) aa(10) aa(12) ...
    aa1(1) aa1(8) aa(1) aa1(5) aa1(12) aa(5) aa1(10) aa(5) aa(10) aa(12) aa(13) ...
    aa1(3) aa1(10) aa(3) aa(5) aa(6) aa(1) aa(6) aa(13) aa(6) aa1(12) aa(3) aa(6) ...
    aa1(5) aa1(12) aa(3) aa(5) aa(9) la aa1(5) aa1(10) aa(1) aa(5) aa(10) aa(5) ...
    aa1(3) aa1(10) aa(3) aa(6) aa(10) so aa1(3) aa1(8) aa(3) aa(8) ...
    aa1(1) aa1(8) aa(1) aa(5) aa1(5) aa1(12) aa(5) la aa1(5) aa1(10) aa(1) aa(5) aa(10) ...
    aa1(3) aa1(10) aa(3) aa(5) aa(6) aa(3) aa1(6) aa(1) aa(10) aa(1) aa1(5) aa1(12) aa(9) ...
    la aa1(5) aa1(10) aa1(12) aa(1) aa1(6) aa(1) aa(6) aa(10) aa1(8) aa(3) aa(12) ...
    aa1(5) aa1(12) aa(8) la aa(5) aa(13) aa1(6) aa(1) aa(6) aa(10) xi aa1(12) aa(1) aa(6) ...
    aa1(5) aa1(12) aa(3) aa(5) aa(10) aa(5) aa(3) aa1(12) aa(9) aa(5) aa1(12) aa1(9) aa1(5) xi mi ...
    so aa(1) aa(1) aa(1) ...
    aa1(3) aa(1) aa(1) aa(1) so aa(8) aa(8) aa(8) ...
    aa1(1) aa(1) aa1(5) aa(9) so aa(1) aa(1) aa(1) ...
    aa1(3) aa(3) aa(3) aa(3) aa1(6) aa(1) aa(6) aa1(5) aa1(12) aa(5) ...
    la aa1(5) aa1(12) aa(1) aa(5) aa1(12) aa(1) aa(5) aa1(5) aa1(12) aa(5) aa1(12) aa1(12)];

%% 节奏
rym1 = [1 1 1/2*ones(1, 4) 3/2 1 1/2 1/2 1/2 3/2 1 1/2 1/2 1/2 3/2 1 1/2 1/2 1/2 ...
    3/2 1/4 1/4 1/2*ones(1, 4) 3/2 1 1/2 1/2 1/2 3/2 1/2 2 3/2 1/4 1/4 1 1 ...
    1/2 2 1/4 1/4 1/2 1/2 3/2 3/2 1/2 1/2 3/2 1/2*ones(1, 5) 3/2 1 1/2 1/2 1/2 ...
    3/2 1/2*ones(1, 5) 3/2 1 1/2*ones(1, 3) 3/2 1/2 3/2 1/2 3/2 1/2 1 1/2 1/2 ...
    1/2 2 1/4 1/4 1/2 1/2 3/2 1/2 1 1/2 1/2 3/2 1/2 1/2*ones(1, 4) 3/2 1/2 1 1/2 1/2 ...
    1 1/2*ones(1, 6) 3/2 1/2 1 1/3 1/3 1/3 3/2 1/2 3/2 1/2 3/2 1/2 1 1/2 1/2 ...
    1/2 2 1/2 1/2 1/2 2 1 1/2 1/2 1 1/2 1/4 5/4 1/2 1/2 2 1 1 ...
    7/2 1/4 1/4 2 1/2*ones(1, 7) 1/4 3/4 1/2 1/2 1/2 ...
    3/2 1/2 2 1/2 1/2 1/2 1/4 3/4 1/2 1/2 1/2 1 1/2 1/4 3/4 1/2*ones(1, 6) 1 1/2 1/2 1/2 ...
    3/2 1/2 5/4 1/4 1/4 1/4 5/4 1/4 1/4 1/4 1 1/2 1/2 1/2 7/2 4]*fs;
   
rym2 = [1 1 1 1 1/2*ones(1, 4) 2 1/2*ones(1, 4) 2 1/2*ones(1, 4) 2 ...
    1/2 1/2 1 1/2 1/2 1 1/2*ones(1, 6) 1 1/2*ones(1, 12) 2 ...
    1/2*ones(1, 4) 2 1/2*ones(1, 4) 2 1/2*ones(1, 5) 3/2 1/2*ones(1, 4) 2 ...
    1/2 1/2 1 1/2 1/2 1 1/2*ones(1, 4) 2 1/2*ones(1, 4) 2 1/2*ones(1, 6) 1 ...
    1/2*ones(1, 4) 2 1/2*ones(1, 6) 1 1/2*ones(1, 4) 2 1/2*ones(1, 4) 2 ...
    1/2*ones(1, 6) 1 1/2*ones(1, 4) 1 1 1/2*ones(1, 4) 1 1 1/2*ones(1, 6) 1 ...
    1/2*ones(1, 4) 2 1/2*ones(1, 6) 1 1/2 1/2 1 1/2 1/2 1 1/2*ones(1, 8) ...
    1/2*ones(1, 6) 1 1/2 1/4*ones(1, 6) 2 1 1 1 1 ...
    ones(1, 16) ...
    ones(1, 4) 1/2 1/2 1 1/2 1/2 1 1/2*ones(1, 12) 2].*fs;

%% 加包络
x1 = [];
x2 = [];

for n = 1:length(tone1)
      M = length(x1);
      t = [];
      t = 1 : rym1(n);
      t = t ./ fs;
      N = length(t);
      a1 = (sin(2*pi*tone1(n)*t/fs) + sin(4*pi*tone1(n)*t) + 0.9217*sin(6*pi*tone1(n)*t) + ...
          0.2318*sin(8*pi*tone1(n)*t) + 0.0524*sin(10*pi*tone1(n)*t) + 0.1355*sin(12*pi*tone1(n)*t) + ...
          0.1797*sin(14*pi*tone1(n)*t) + 0.09109*sin(16*pi*tone1(n)*t) + 0.0055*sin(18*pi*tone1(n)*t) + ...
          0.1127*sin(20*pi*tone1(n)*t)).*y1(N)*0.92;
      x1(M+1 : M+N) = a1;  
end


for n = 1:length(tone2)
      M = length(x2);
      t = 1 : rym2(n);
      t = t ./ fs;
      N = length(t);
      a2 = (0.6882*sin(2*pi*tone2(n)*t) + sin(4*pi*tone2(n)*t) + 0.9217*sin(6*pi*tone2(n)*t) + ...
          0.2318*sin(8*pi*tone2(n)*t) + 0.0524*sin(10*pi*tone2(n)*t) + 0.1355*sin(12*pi*tone2(n)*t) + ...
          0.1797*sin(14*pi*tone2(n)*t) + 0.09109*sin(16*pi*tone2(n)*t) + 0.0055*sin(18*pi*tone2(n)*t) + ...
          0.1127*sin(20*pi*tone2(n)*t)).*y2(N)*0.92;    
      x2(M+1 : M+N) = a2;  
end


%% 唱音和伴奏结合
x1_left = [x1 zeros(1,1000)];
x2_left = [x2 zeros(1,1000)];
x1_right = [zeros(1,1000) x1];
x2_right = [zeros(1,1000) x2];
        
x_left = x1_left + 3*x2_left;
x_right = x1_right + 3*x2_right;
x_left = x_left / max(x_left);
x_right = x_right / max(x_right);
% melody = [x_left;x_right];
% sound(melody, fs); 

%% 增加混音的效果
violin = x_left;
% Blank Block
blkblock = zeros(1, fs/100);
% violin1
v1 = [violin blkblock blkblock];
% violin2
v2 = [blkblock 0.5*violin blkblock];
% violin3
v3 = [blkblock blkblock 0.25*violin];
% Get dirty
s = v1 + v2 + v3;
s_left = [s zeros(1,1000)];
s_right = [zeros(1,1000) s];
s_left = s_left / max(s_left);
s_right = s_right / max(s_right);
song = [s_left;s_right];  %  左右声道合并
sound(song, fs); 

% filename = '月半小夜曲.wav';
% audiowrite(filename, s_left, fs);

%% 包络函数
function shap_y1 = y1(ylen)
yt = (1 : ylen)/0.96;
shap_y1 = (5*((yt./48000).^(1/2)))./exp(yt./48000*2);
shap_y1 = shap_y1/max(shap_y1);
return
end

function shap_y2 = y2(ylen)
yt = (1 : ylen)/0.96;
shap_y2 = (5*((yt./48000).^(1/15)))./exp(yt./48000*2);
shap_y2 = shap_y2/max(shap_y2);
return
end
  • 11
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值