用MATLAB生成一段音乐

  • 音乐小知识
  • 谱曲过程
    • 发出声音
    • 发出音阶
    • 发出曲调
    • 发出有起伏的曲调
    • 长曲
  • linspace函数是Matlab中的均分计算指令,x=linspace(0,2*pi,100)表示x范围为0-2π,中间均分为100个点

音乐小知识

  • 点在声音中称为采样率,采样率表示在1秒钟取了多少个点
  • MATLAB中默认的采样率为8192,可Fs=8192
  • 音乐中有个标准音高,A=440Hz
  • 经实践,改变Fs值的大小,声音没变化,说明声音大小与Fs无关,而与Hz有关,Hz越大,音越尖细
  • 十二平均律图如下:
    do 、re、mi、fa、 sol、la(880)、 si(988)对应的频率如最后一列所示,则可根据频率创造出对应的音

谱曲过程

发出声音

采样率太小听不到声音(如下为嘟~的一声)

发出音阶

如下发出do 、re、mi、fa、 sol、la、 si:

Fs=8192;
x=linspace(0,2*pi,Fs);
freqs=[523,587,659,698,783,880,988] 将频率设置成序列
y1=sin(freqs(1)*x); 取序列的第一个值
y2=sin(freqs(2)*x);
y3=sin(freqs(3)*x);
y4=sin(freqs(4)*x);
y5=sin(freqs(5)*x);
y6=sin(freqs(6)*x);
y7=sin(freqs(7)*x);
y=[y1,y2,y3,y4,y5,y6,y7]; 新·声音序列
sound(y,Fs) 位置1是声音序列,位置2是采样率Fs

发出曲调

则按曲调的音阶排列声音序列即可(如下为一闪一闪亮晶晶的曲调):

Fs=8192;
x=linspace(0,2*pi,Fs);
freqs=[523,587,659,698,783,880,988]
y1=sin(freqs(1)*x);
y2=sin(freqs(1)*x);
y3=sin(freqs(5)*x);
y4=sin(freqs(5)*x);
y5=sin(freqs(6)*x);
y6=sin(freqs(6)*x);
y7=sin(freqs(5)*x); 末尾两个5,是因为尾音长
y8=sin(freqs(5)*x);
y=[y1,y2,y3,y4,y5,y6,y7y8];
sound(y,Fs)

发出有起伏的曲调

但如此出来的是平调,没有起伏,即声音刚进入时强烈,后来渐弱。则乘以一个递减的函数((0,1)和(2π,0)两点连线的那条直线),修改如下:

长曲

如果一首完整的歌,音调,节拍都不同,如此拼凑比较麻烦,则做如下修改(floor函数是为了取整):

MATLAB入门学习笔记12相关推荐

  1. Three.js入门学习笔记12:模型沿着任意轨迹线运动

    参考学习 http://www.yanhuangxueyuan.com/doc/Three.js/curveRun.html http://www.yanhuangxueyuan.com/doc/th ...

  2. MATLAB | 入门——学习笔记

    VR大作业得写一下hrtf相关的东西,终于不得不用matlab了,趁着它还没安完,赶紧学一波... 原教程:MATLAB教程 MATLAB介绍 MATLAB基本语法 MATLAB变量 ans clea ...

  3. Python入门学习笔记——12.文件操作

    ##################################################### # 1.文件写入 # 写入操作 ''' 1.打开文件 open()参数1:文件路径路径 ur ...

  4. dubbo入门学习笔记之入门demo(基于普通maven项目)

    注:本笔记接dubbo入门学习笔记之环境准备继续记录; (四)开发服务提供者和消费者并让他们在启动时分别向注册中心注册和订阅服务 需求:订单服务中初始化订单功能需要调用用户服务的获取用户信息的接口(订 ...

  5. Crypto++入门学习笔记(DES、AES、RSA、SHA-256)

    Crypto++入门学习笔记(DES.AES.RSA.SHA-256) 背景(只是个人感想,技术上不对后面的内容构成知识性障碍,可以skip): 最近,基于某些原因和需要,笔者需要去了解一下Crypt ...

  6. 机器学习入门学习笔记:(4.2)SVM的核函数和软间隔

    前言 之前讲了有关基本的SVM的数学模型(机器学习入门学习笔记:(4.1)SVM算法).这次主要介绍介绍svm的核函数.软间隔等概念,并进行详细的数学推导.这里仅将自己的笔记记录下来,以便以后复习查看 ...

  7. 汇编入门学习笔记 (十二)—— int指令、port

    疯狂的暑假学习之  汇编入门学习笔记 (十二)--  int指令.port 參考: <汇编语言> 王爽 第13.14章 一.int指令 1. int指令引发的中断 int n指令,相当于引 ...

  8. 计算机指令int,汇编入门学习笔记 (十二)—— int指令、端口

    疯狂的暑假学习之  汇编入门学习笔记 (十二)--  int指令.端口 参考: <汇编语言> 王爽 第13.14章 一.int指令 1. int指令引发的中断 int n指令,相当于引发一 ...

  9. 【计算机视觉】opencv入门学习笔记Part.1

    [计算机视觉]opencv入门学习笔记Part.1 1 前言 1.1 opencv概述(摘取自百度百科) 1.2 图像概念引入 1.3 安装opencv库 2 图像基本操作 2.1 图像的读取 2.2 ...

最新文章

  1. 湖北生态工程职业技术学院计算机分数线,湖北生态工程职业技术学院录取分数线2021是多少分(附历年录取分数线)...
  2. linux系统常用快捷键,文件类型,后缀名,语言修改,转义
  3. boost::program_options模块一个配置ini文件被解析程序选项库,它包括许多不同的值类型的测试程序
  4. .NetCore HttpClient发送请求的时候为什么自动带上了一个RequestId头部?
  5. linux c之#include <unistd.h> 总结
  6. restlet_Restlet框架– Hello World示例
  7. 自动化日志收集及分析在支付宝 App 内的演进
  8. 一位程序员的迷茫:每天5:30准时下班,月薪10000+
  9. Java的String理解
  10. .Net RabbitMQ之消息通信 构建RPC服务器
  11. 天书夜读:从汇编语言到Windows内核编程笔记(3)
  12. mysql字段动态扩展_如何用动态字段实现系统的扩展性?
  13. OpenSesame-史上最详细教程
  14. python3 题解(33 人民币金额大写)
  15. [CMU 15-445] 17 两阶段封锁协议
  16. MySQL 之 The definition of table 'p' prevents operation UPDATE on table 'post'.
  17. 2018运动场景内运动检测调研文章
  18. 计算机教程文档,计算机应用基础教程-20210323002444.doc-原创力文档
  19. 1.3双摇杆遥控器电路部分--基本外设电路(ST-link下载、串口、按键、摇杆、电量检测、LED指示灯、0.96寸OLED、NRF24L01)
  20. Java-汉字字符串转拼音,包括首字母和全拼

热门文章

  1. 从零写VIO|第二节——作业:使用Allen方差工具标定IMU
  2. 某代工大厂的勒索病毒处理案例
  3. 如何写出一篇好文章——不动笔就能学会写文章的训练法
  4. 【STARK论文翻译阅读】
  5. 响应式布局的实现方法
  6. Luatos学习:Air101点灯
  7. 深入理解 iOS 开发中的锁
  8. 奇虎360:5年前赴美上市到今私有化退市,未来路在何方?
  9. windows控制台命令合集
  10. 美元汇率Pascal题解