有人说:MATLAB除了生孩子,其他的都会。
那能用它来创造音乐吗?
答案是 可以的
首先我们要知道我们所听到的DO RE MI,是怎么产生的?之间的不同是什么?
音乐作为“”的一种,自然可以用正弦波的叠加来模拟,不同的频率可以发出不同频率的音符,所以我们只要用MATLAB生成一系列的正弦函数,再加上MATLAB自带的**sound()**函数即可。
音乐主要由音调和节拍组成,所以音乐函数需要两个输入,即音调(tone)和节拍(rythm)
现给出函数模块:
Fs为采样频率,一般默认8192Hz,也就是一秒钟采样次数;
linspace(a,b,c)函数用于均匀产生b个a到c之间数组;
freqs的数组为不同音色对应的频率,简单起见只列出常用的;
注意:播放频率应该与采样频率保持一致!!!

function y = gen_wave( tone, rythm )
%UNTITLED2 音乐函数 对应music2
%   音调 拍Fs = 8192;freqs = [523, 587, 659, 698, 783, 880, 988];x = linspace(0, 2 * pi * rythm, floor(Fs * rythm));y = sin(freqs(tone) * x);
end

新建主函数执行如下代码即可发出DO音。

Fs = 8192;
y=[];
y = gen_wave(1,1);
sound(y,Fs);

执行完成后用**plot()**函数可以画出声音图像,如下图

可以看见非常的密集,局部放大之后是:

首先可以看出放大之后,值是不连续的,然后声音一直是不变的,这和我们实际上是不太相符的,钢琴的音应该是刚按下的时候最大,后面随着时间变化,声音逐渐衰退,所以我们在y的后面乘上一个函数,使之衰减,代码如下:

function y = gen_wave( tone, rythm )%   音调 拍Fs = 8192;freqs = [523, 587, 659, 698, 783, 880, 988];x = linspace(0, 2 * pi * rythm, floor(Fs * rythm));y = sin(freqs(tone) * x) .*(1- x/(rythm * 2 *pi));end

重新运行DO音,并画出图像得:

放大局部

可以看出这个是振荡衰减的,当然也可以乘上一个指数衰减的函数,这样的得到的声音会更加真实。
接着我们可以找一首完整音乐的乐谱,比如《小星星

根据简谱我们可以生成这首歌曲的音乐代表数组,代码如下:

Fs = 8192;
y=[];
music = [1,1,5,5,6,6,5,...4,4,3,3,2,2,1,...5,5,4,4,3,3,2,...5,5,4,4,3,3,2,...1,1,5,5,6,6,5,...4,4,3,3,2,2,1];
music_length = length(music(:));y1 = gen_wave(1,1);
y2 = gen_wave(2,1);
y3 = gen_wave(3,1);
y4 = gen_wave(4,1);
y5 = gen_wave(5,1);
y6 = gen_wave(6,1);
y7 = gen_wave(7,1);for i = 1:1:music_lengthif music(i) == 1y=[y,y1];elseif music(i) == 2y=[y,y2];elseif music(i) == 3y=[y,y3];elseif music(i) == 4y=[y,y4];elseif music(i) == 5y=[y,y5];elseif music(i) == 6y=[y,y6];elseif music(i) == 7y=[y,y7];    end
endsound(y, Fs);

通过遍历音乐数组,执行子程序,我们可以生成其音阶数组,再用sound()播放即可。

如果感觉有用的话,点个赞吧,O(∩_∩)O哈哈~

如何用MATLAB编写简单的音乐程序相关推荐

  1. java简单的记事本程序_如何用JAVA编写简单的记事本程序?

    展开全部 import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; i ...

  2. 使用Matlab编写简单的图片标注程序

    使用Matlab编写简单的图片标注程序 最近在做数字图像处理大作业,本来想使用检测算法检测出图中车辆的位置,无奈水平有限,检测效果不佳,只能被迫使用matlab编写一个手动标注程序了.事实证明这真是项 ...

  3. 子程序调用与宏定义的异同_如何用数控系统进行简单的宏程序调用?老师傅告诉你,用G65就行...

    什么是简单调用?很多人都不知道吧,如果想要深入操作宏, 就先要学会变量,学会变量之担,再去操作宏,就会变得非常的简单,今天给大家分享如何用G65进行简单的宏程序调用. 用户宏的简单宏调用是指在主程序中 ...

  4. python做好的程序如何变成小程序-使用python编写简单的小程序编译成exe跑在win10上...

    每天的工作其实很无聊,早知道应该去IT公司闯荡的.最近的工作内容是每逢一个整点,从早7点到晚11点,去查一次客流数据,整理到表格中,上交给素未蒙面的上线,由他呈交领导查阅. 人的精力毕竟是有限的,所以 ...

  5. 如何用PHP编写简单的api数据接口

    一.编写接口所需几样工具或软件(均是win7+64位) 1.phpStudy.SQLyog和编码工具的安装(sublime text/webStorm/vs code均可,按自己习惯来): 2.启动p ...

  6. matlab实现简单的交互式程序

    matlab实现简单的交互式程序 x = input('请输入圆的半径='); y = pi*x^2; m = pi*x*2; fprintf('圆的面积为%f,圆的周长为%f\n',y,m);

  7. python识别ppt文件格式 ——(专栏:基于python编写简单office阅卷程序③)

    ● 研二在读学生,非工科非计算机专业,故代码简陋初级勿喷,本文仅为记录和快乐分享. ○ 感谢肯定,感谢点赞收藏分享,转载请注明本页出处即可. ____Ⓙ即刻@王昭没有君 本文仅为笔者摸索总结-欢迎订正 ...

  8. python识别excel文件格式 ——(专栏:基于python编写简单office阅卷程序②)

    ● 研二在读学生,非工科非计算机专业,故代码简陋初级勿喷,本文仅为记录和快乐分享. ○ 感谢肯定,感谢点赞收藏分享,转载请注明本页出处即可. ____Ⓙ即刻@王昭没有君 本文仅为笔者摸索总结-欢迎订正 ...

  9. python识别word文件格式 ——(专栏:基于python编写简单office阅卷程序①)

    ● 研二在读学生,非工科非计算机专业,故代码简陋初级勿喷,本文仅为记录和快乐分享. ○ 感谢肯定,感谢点赞收藏分享,转载请注明本页出处即可. ____Ⓙ即刻@王昭没有君 本文仅为笔者摸索总结-欢迎订正 ...

  10. C#编写简单的聊天程序

    原文:http://www.tracefact.net/CSharp-Programming/Simple-Chat.aspx 引言 这是一篇基于Socket进行网络编程的入门文章,我对于网络编程的学 ...

最新文章

  1. Spring学习笔记(二)——Spring相关配置属性注入Junit整合
  2. 软件工程导论 银行储蓄系统_独家:重庆农商行客户存款被盗刷 银行却责怪客户用卡不规范...
  3. Web前端技巧分享:教你用GD库生成验证码
  4. android 模拟器 相册里传照片_引力相册APP下载-引力相册下载v1.1 官方版
  5. Codeforces Round #530 (Div. 1) 1098A Sum in the tree
  6. 第十四节:Asp.Net Core WebApi生成在线文档-第十九节
  7. 电容式传感器位移性能试验报告_一文读懂什么是接近传感器?
  8. 小程序 | 云函数获取用户openid
  9. 成功演示的关键步骤(三)
  10. linux运维云计算课程学习,Linux云计算面试时遇到的问题
  11. Cocos2d-x v3.2笔记——总结Cocos2d-x 3.x版本的一些变化
  12. 驱动模块的安装与卸载指令
  13. AFNetworking 文件断点下载详细解读
  14. 苹果Mac3D建模软件SketchUp Pro很专业
  15. 出中的意思是什么_从里出来是什么意思
  16. C#中常用对话框类详解
  17. LottieAnimationView怎么重置为第一帧
  18. 中国最感人的8首爱情诗
  19. 好久没写东西了,发些我的卡通头像吧
  20. 远距离WiFi模块,无人机传输技术,无线通信视频传输技术

热门文章

  1. html编写花,HTML5的花儿
  2. ARM学习笔记:HC-SR501人体红外传感器
  3. 翻译如重构,期待您的单元测试
  4. 谁说大象不能跳舞——《读书笔记》
  5. win7无法连接虚拟磁盘服务器,win7系统电脑打开磁盘管理出现“无法连接虚拟磁盘服务”的解决方法...
  6. 项目开发成本高周期长 数维图低代码平台解决行业痛点
  7. 游戏建模大神教你三招学会用maya制作三维动画特效
  8. JAVA EE面试重点
  9. 音视频多媒体开发基础概述之颜色空间(2)YUV YIQ YCrCb CMY颜色空间
  10. mysql reopen table,MYSQL临时表关联Can't reopen table