clear;clc
Fs=8192;
tone1=[5,5,6,5,1,7,5,5,6,5,2,...
1,5,5,5,3,1,7,6,4,4,3,1,3,2,5,5,6,5,1,...
7,5,5,6,5,2,1,5,5,5,3,1,7,6];
tone2=[4,4,3,1,2,1,5,5,...
6,5,1,7,5,5,6,5,2,1,5,5,...
5,3,1,7,6,4,4,3,1,3,2,5,5,...
6,5,1,7,5,5,6,5,2,1,5,5,5,3,1,...
7,6,4,4,3,1,2,1];
tone=[tone1,tone2];
rythm1=[0.5,0.5,1,1,1,2,0.5,0.5,1,1,1,...
2,0.5,0.5,1,1,1,1,1,0.5,0.5,1,1,1,2,0.5,0.5,1,1,1,...
2,0.5,0.5,1,1,1,2,0.5,0.5,1,1,1,1,5];
rythm2=[1,1,2,2,2,7,0.5,0.5,...
1.5,1.5,1,3,0.5,0.5,1.5,1.5,1,3,0.5,0.5,...
1.5,1.5,1,1.5,1.5,0.5,0.5,1.5,1.5,1,3,0.5,0.5,...
1.5,1.55,1,3,0.5,0.5,1.5,1.5,1,3,0.5,0.5,1.5,1.5,1,...
1.5,5.5,0.5,0.5,2,2,4,8];
rythm=[rythm1,rythm2];
length1=length(tone1);
length2=length(tone2);
rythm_change_1=ones(1,length1)*3/4/2;
rythm_change_2=ones(1,length2)*1/4;
rythm_change=[rythm_change_1,rythm_change_2];
rythm=rythm.*rythm_change;
y=[];
len=length(tone);
keynote_type=6;
Soundzone_change=[1,1,1,1,2,1,1,1,1,1,2,...
2,1,1,2,2,2,1,1,2,2,2,2,2,2,1,1,1,1,2,...
1,1,1,1,1,2,2,1,1,2,2,2,1,1,...
2,2,2,2,2,2,1,1,...
1,1,2,1,1,1,1,1,2,2,1,1,...
2,2,2,1,1,2,2,2,2,2,2,1,1,...
1,1,2,1,1,1,1,1,2,2,1,1,2,2,2,...
1,1,2,2,2,2,2,2];
up_down=2;
for i=1:1:len
y=[y,get_ware(tone(i),rythm(i),keynote_type,Soundzone_change(i),up_down)];
end
sound(y,Fs) %按照给定的波,发出声音的函数

上述的音乐绘制还有一些值得研究的地方,比如说,如何发出同时发出多个音,实现更为复杂的乐曲的演奏,以及如何模拟出钢琴按键轻重不同导致的尾音长短的不同。还有就是在转换乐谱上边,如果有更加智能的方式生成就更加好了,因为基础的演奏的函数其实很简单。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)