基于MATLAB的音乐合成和处理( 四 )


clear;clc;
fs=8000;  %抽样频率
part1=[fre(55) fre(60) fre(60) fre(62) fre(64) fre(60) fre(64) fre(62) fre(59)];
part2=[fre(60) fre(60) fre(62) fre(64) fre(60) fre(59) fre(55)];
part3=[fre(60) fre(60) fre(62) fre(64) fre(65) fre(64) fre(62) fre(60) fre(59) fre(55)  fre(57) fre(59) fre(60) fre(60)];
part4=[fre(57) fre(59) fre(57) fre(55) fre(57) fre(59) fre(60)];
part5=[fre(55) fre(57) fre(55) fre(53) fre(52) fre(53) fre(55)];
part6=[fre(57) fre(59) fre(57) fre(55) fre(57) fre(59) fre(60)];
part7=[fre(55) fre(60) fre(59) fre(62) fre(60) fre(60)];
para1=[part1 part2 part3 ];
para2=[part4 part5 ];
para3=[part6 part7 ];
f=[para1 para2 para3]; %各个乐音对应的频率
part1time=[0.5 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25];
part2time=[0.25 0.25 0.25 0.25 0.5 0.25 0.25];
part3time=[0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.5 0.5];
part4time=[0.25 0.125 0.25 0.25 0.25 0.25 0.5];
part5time=[0.25 0.125 0.25 0.25 0.25 0.25 0.5];
part6time=[0.25 0.125 0.25 0.25 0.25 0.25 0.5];
part7time=[0.25 0.25 0.25 0.25 0.5 0.5];
para1time=[part1time part2time part3time ];
para2time=[part4time part5time ];
para3time=[part6time part7time ];
time=fs*[para1time para2time para3time];%各个乐音的抽样点数
N=length(time); %这段音乐的总抽样点数
east=zeros(1,N); %用east标的目的量来储存抽样点
n=1;
for num=1:N  %操纵轮回发生抽样数据 , num暗示乐音编号
    t=1/fs:1/fs:time(num)/fs;  %发生第num个乐音的抽样点
    baoluo=zeros(1,time(num));  %P为存储包络数据的标的目的量
for j=1:time(num)
if(j<0.2*time(num))
   y=7.5*j/time(num);
else
       if(j<0.333*time(num))
             y=-15/4*j/time(num)+9/4;
       else
if(j<0.666*time(num))
      y=1;
else
       y=-3*j/time(num)+3;

        

baoluo(j)=y;

         h=[1 0.2 0.3 0.1];
         xiebo=zeros(1,length(t));
for i=1:length(n)
      xiebo=xiebo+h(i)*sin(2*i*pi*f(num)*t);

east(n:n+time(num)-1)=xiebo.*baoluo(1:time(num));
n=n+time(num);

sound(east,8000)  %播放音乐
plot(east) %图像
插手谐波后音色获得较着好转
运行获得的图像为:

基于MATLAB的音乐合成和处理

文章插图

基于MATLAB的音乐合成和处理

文章插图

基于MATLAB的音乐合成和处理

文章插图

基于MATLAB的音乐合成和处理

文章插图

22.用傅里叶变换阐发音乐
2.1  阐发can.wav的调子和节奏
我们对can进行傅里叶变换阐发其基波协调波 , 获得can的幅值谱 , 频谱图上的第一个凸起的波峰对应的频率即为can的基频 , 可编写了如下法式:
clear;clc;
[y,Fs]= audioread('can.wav');

推荐阅读