MATLAB生成一段音乐《小星星》

举报
Here大圣 发表于 2023/05/24 16:56:59 2023/05/24
【摘要】 MATLAB《小星星》

 首先,编写一个音乐函数文件,描述音色,节拍。具体直接搜B站即可有详细教学。

function y=music(tone,rhythm)
Fs = 8192;
freqs=[523,587,659,698,783,880,988];%七个音符对应的频率
x=linspace(0,2*pi*rhythm,floor(Fs*rhythm));
y=sin(freqs(tone)*x).*(1-x./(rhythm.*2*pi));
end

 由此可以生成几个音符了,七个代码如下,y1=music(1,0.5),括号内的第一个数字与简谱对应。

第二个数字与节拍对应,节拍小,听起来轻快一些。

y1=music(1,0.5);
y2=music(2,0.5);
y3=music(3,0.5);
y4=music(4,0.5);
y5=music(5,0.5);
y6=music(6,0.5); 
y7=music(7,0.5);
y11=music(1,1);
y22=music(2,1);
y33=music(3,1);
y44=music(4,1);
y55=music(5,1);
y66=music(6,1); 
y77=music(7,1);

然后直接编写对应的简谱即可在函数文件下运行;如一句的运行

Fs=8192,%(视频有讲解)
y=[y1,y1,y5 ,y5,y6,y6,y55];
plot(y)%看看波形,可以省略此行
sound(y,Fs)

y也可分开一句句编写,然后再合并成一个大行矩阵。

如下完整代码:(注意与函数文件在同一路径)

%% 使用music函数,写出对应音符及节拍
clc,clear;
Fs=8192;%采样频率
y1=music(1,0.5);
y2=music(2,0.5);
y3=music(3,0.5);
y4=music(4,0.5);
y5=music(5,0.5);
y6=music(6,0.5); 
y7=music(7,0.5);
y11=music(1,1);
y22=music(2,1);
y33=music(3,1);
y44=music(4,1);
y55=music(5,1);
y66=music(6,1); 
y77=music(7,1);
%%
%直接看音乐简谱,一句句转化成代码
disp('小星星')
j1=[y1,y1,y5 ,y5,y6,y6,y55];
disp('-闪一闪亮晶晶')
j2=[ y4,y4,y3,y3,y2,y2,y11];
disp('满天都是小星星')
j3=[y5,y5,y4,y4,y3,y3,y22];
disp('挂在天上放光明')
j4=[y5,y5,y4,y4,y3,y3,y22];
disp('好像许多小眼睛')
j5=[y1,y1,y5,y5,y6,y6,y55];
disp('一闪一闪亮晶晶')
j6=[y4,y4,y3,y3,y2,y2,y1,y1];
disp('满天都是小星星')
y=[j1,j2,j3,j4,j5,j6,j3,j4];%合并每一句歌词
plot(y)%看看波形
sound(y,Fs)

在函数文件与七个音符对应文件的基础上,可以照着简谱编其他的音乐了。

不过有的不好听(有修改意见欢迎来交流)。

一音乐

clear,clc
Fs=8192;
y1=music(1,0.5);
y2=music(2,0.5);
y3=music(3,0.5);
y4=music(4,0.5);
y5=music(5,0.5);
y6=music(6,0.5); 
y7=music(7,0.5);
y11=music(1,1);
y22=music(2,1);
y33=music(3,1);
y44=music(4,1);
y55=music(5,1);
y66=music(6,1); 
y77=music(7,1);
j1=[y5,y66,y3,y5,y1,y7,y6,y11,y2];
j2=[y3,y6,y5,y3,y2,y11];
j3=[y5,y6,y66,y6,y5,y7,y6,y6,y7,y1];
j4=[y2,y3,y5];
j5=[y3,y5,y3,y5,y5,y5,y1,y6,y11];
y=[j1,j2,j3,j4,j5];
plot(y)
sound(y,Fs)

另一文件

Fs=8192;
y1=music(1,0.25);
y2=music(2,0.25);
y3=music(3,0.25);
y4=music(4,0.25);
y5=music(5,0.25);
y6=music(6,0.25); 
y7=music(7,0.25);
y11=music(1,0.5);
y22=music(2,0.5);
y33=music(3,0.5);
y44=music(4,0.5);
y55=music(5,0.5);
y66=music(6,0.5); 
y77=music(7,0.5);
j1=[y6,y3,y5,y6,y6,y3,y5,y6,y6];
j2=[y6,y3,y5,y6,y6,y3,y5,y3,y3];
j3=j1;
j4=j1;
j5=[y3,y6,y6, y6,y3, y3,y3,y3,y3, y3,y6];
%如果华陀再世  崇洋都被医治
j6=[y3,y3,y3, y3,y3,y3,y3, y3,y3,y3,y3, y3,y6];
%外邦来学汉字   激发我民族意识
j7=[y6,y3,y3, y3,y3,y3,y3, y3,y3,y3,y3 y3,y6];
%马钱子 决明子  苍耳子 还有莲子
j8=[y3,y3,y3, y3,y3,y3,y3, y3,y3,y3,y3, y3,y6];
%黄药子 苦豆子  川楝子 我要面子
j9=[y3,y1,y1, y6, y3, y3,y3,y3,y3, y3,y6];
%用我的方式 改写一部历史

% 没什么别的事
% 
% 跟着我念几个字
% 
% 山药 当归 枸杞
% 
% Go
% 
% 山药 当归 枸杞
% 
% Go
% 
% 看我抓一把中药
% 
% 服下一帖骄傲
% 
% 我表情悠哉 跳个大概
% 
% 动作轻松自在 你学不来
% 
% 霓虹的招牌 调整好状态
% 
% 在华丽的城市 等待醒来
% 
% 我表情悠哉 跳个大概
% 
% 用书法书朝代 内力传开
% 
% 豪气挥正楷 给一拳对白
% 
% 结局平躺下来 看谁厉害
% 
% 练成什么丹 揉成什么丸
% 
% 鹿茸切片不能太薄
% 
% 老师傅的手法不能这样乱抄
% 
% 龟苓膏 云南白药
% 
% 还有冬虫夏草
% 
% 自己的音乐 自己的药
% 
% 份量刚刚好
% 
% 听我说中药苦
% 
% 抄袭应该更苦
% 
% 快翻开本草纲目
% 
% 多看一些善本书
% 
% 蟾苏 地龙 已翻过江湖
% 
% 这些老祖宗的辛苦
% 
% 我们一定不能输
% 
% 就是这个光
% 
% 就是这个光 一起唱
% 
% 就是这个光 就是这个光 嘿
% 
% 让我来调个偏方
% 
% 专治你媚外的内伤
% 
% 已扎根千年的汉方
% 
% 有别人不知道的力量
% 
% 我表情悠哉 跳个大概
% 
% 动作轻松自在 你学不来
% 
% 霓虹的招牌 调整好状态
% 
% 在华丽的城市 等待醒来
% 
% 我表情悠哉 跳个大概
% 
% 用书法书朝代 内力传开
% 
% 豪气挥正楷 给一拳对白
% 
% 结局平躺下来 看谁厉害
% 
% 蹲 小僵尸蹲 小僵尸蹲
% 
% 又蹲 小僵尸蹲 暗巷点灯
% 
% 又蹲 小僵尸蹲 钻萝卜坑
% 
% 又蹲 小僵尸蹲 念咒语哼
% 
% 蹲 小僵尸蹲 小僵尸蹲
% 
% 又蹲 小僵尸蹲 暗巷点灯
% 
% 又蹲 小僵尸蹲 钻萝卜坑
% 
% 又蹲 小僵尸蹲 念咒语哼
y=[j1,j2,j3,j4,j5,j6,j7,j8,j9];
plot(y)
sound(y,Fs)
%太难听了,不管了


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。