matlab频谱合成音乐《追光者》

选择你喜欢的一首钢琴曲,下载并分析曲谱,用matlab工具用频谱合成方法完成这首曲子的音乐合成。

前言:此文章为个人使用Matlab合成一首《追光者》音乐,且带混响和声效果

文章目录

  • 一.题目
  • 二.要求
  • 三.课程设计目的
  • 四.概要设计
  • 五.详细设计
  • 六.测试分析
  • 七.Matlab频谱合成音乐实验源文件

一.题目

选择你喜欢的一首钢琴曲,下载并分析曲谱,用matlab工具用频谱合成方法完成这首曲子的音乐合成。

二.要求

1、研究音乐合成的原理
2、比较合成后的音乐与原始音乐的频谱区别
3、提出逼近原始音乐的方法,并编程实现。
4、提交电子版课程设计报告和matlab可执行文件
5、若加入混响、和声等效果可以加附加分
5、每位同学提交一份压缩文件,命名格式如下:学号+姓名+曲名名

三.课程设计目的

1.研究音乐合成的原理
2.比较合成后的音乐与原始音乐的频谱区别
3.提出逼近原始音乐的方法,并编程实现。

四.概要设计

通过网上相关资料的查询,让我对使用matlab合成音乐有了一定的了解和思路。声音是一种波,在matlab里面只要将音乐的波形绘制出来,就可以使用sound()函数将其播放。以下是本次课程设计音乐合成的思路:
1.首先需要下载目标音乐的简谱,利用乐谱的音阶,拍子等基本乐理知识,按铺子对应的每个音阶输出频率,对应每个音阶的街拍。
2.设置采样率,采样率是一秒的声音里我们采样了多少个点(matlab默认的采样率是8192,播放区段是1000Hz384000Hz)。人耳能听到的声音范围是202000Hz,根据采样定理采样频率fs应该大于40000Hz,采样频率越高则采样带来的失真就会越小,但音频文件也会更大。
3.设置输入信号,通过网上学习,发现音乐合成的输入信号一般用正弦波,即Y=Asin(2piwt)。其中,A控制声音的大小,w控制声调的高低,t的范围控制声音的长短。
4.对照十二平均律表谱出音乐,在代码里编写音乐的频率合集以合成音乐。
在这里插入图片描述
5.对信号进行包络处理。正常的声音发出来是有衰减的,要想让声音更自然连贯地播放需要对信号做包络处理,否则我们只能实现单个音的特定时长的发声。
6.增加混音效果,将左右声道合并。
7.将合成的音乐导出,保存为wav音乐格式,这里使用的是audiowrite()文件。
8.绘制合成音乐的频谱。

音乐合成的编程程序流程图如下:
在这里插入图片描述

五.详细设计

1.选择乐曲并下载,利用matlab工具查看下载音乐的频谱。
在此次课程设计中,我选择的是一首比较轻缓舒适的曲子,这里选择的是歌曲《追光者》的钢琴伴奏,下载平台是网易云音乐,下载的歌曲格式为mp3。
在这里插入图片描述
matlab绘制原音乐频谱图的程序如下:
在这里插入图片描述
该代码的运行结果如下:
在这里插入图片描述
可以看到左右声道频谱图几乎相同,有略微差别。

2.合成音乐的参数准备
在这里插入图片描述

3.根据十二律表绘制各个音的频率:
在这里插入图片描述
这里频率的生成是按照以下十二律表生成的:
C、D、E、F、G、A分别对应前八度的do,re,mi,fa,so,la,xi,从左往右音调依次变高。将频率按列表保存方便后续合成音乐的编写。
在这里插入图片描述
4.根据音乐的曲谱和第3步中音的频率编写歌曲
由于我选择的是歌曲《追光者》的伴奏音乐,因此在歌曲的合成代码中我编写了两个部分,一个是歌曲的唱音,一个是歌曲背后的伴奏音乐,参考的曲谱为百度搜索得到。代码部分如下:
在这里插入图片描述
在这里插入图片描述
5.设置输入信号:
为了将音乐演奏出来需要先将合成音乐的信号创建出来,这里将唱音部分和伴奏部分的输入信号分开设置,在后续音乐的合成中同时演奏出来。
在这里插入图片描述
6.编写包络信号,设置包络:
为了减小信号的衰减,需要编写包络函数。
在这里插入图片描述
7.将编写的合成音乐增加混音效果并结合起来。
唱音和伴奏均为双声道,将唱音和伴奏结合起来再演奏。
在这里插入图片描述
8.导出音乐并保存
由于合成的音乐是双声道,一开始我将音乐的左右声道分别导出,但导出的声音聆听效果基本相同,听不出差别。
在这里插入图片描述
9.绘制合成音乐的频谱图:
合成的音乐是两个声道,这里分别绘制左声道和右声道。
在这里插入图片描述
在这里插入图片描述
由上图可以看出,合成的音乐左声道和右声道的频谱图并无差别。

六.测试分析

代码正常运行,且播放的音乐也正常,且合成音乐导出的.wav文件也正常。
出现的问题:点击运行之后代码运行较为缓慢,需等待30s左右音乐才开始播放,这里我用的是MATLAB R2021a软件,问题出现的原因尚不明确。
如下图所示为合成音乐和原音频音乐的频谱对比:
在这里插入图片描述
可以看到,我代码合成的音乐频谱的幅值更高,音乐的音调更高,频率也更高。

七.Matlab频谱合成音乐实验源文件

Matlab频谱合成追光者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/180706.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解锁领先的有限元分析软件ABAQUS:不同版本功能特点及价格

随着科学技术的飞速发展,工程领域对于高效可靠的仿真软件需求日益增长。ABAQUS作为有限元分析领域的佼佼者,为工程师提供了强大而灵活的工具,用于模拟和分析复杂的结构和材料行为。本文将深入介绍ABAQUS的概念、不同版本的特点、功能区别、定…

vue3默认插槽、具名插槽以及作用域插槽实现父子组件通信

默认插槽与具名插槽 父组件 <template><div><h1>我是父组件</h1><child><div style"color: red">我是从父元素插入的值(默认插槽)</div><template #juming><div style"color: green">我是从父元素…

模板方法模式-C语言实现

代码实现&#xff1a; #include <stdio.h>// 定义抽象基类 typedef struct {void (*step1)(void);void (*step2)(void);void (*step3)(void); } AbstractClass;// 具体实现类1 void concreteStep1() {printf("Concrete Step 1\n"); }void concreteStep2() {pr…

Qt5的事件处理函数有哪些?

2023年11月29日&#xff0c;周三上午 通过查看QWidget的定义可知&#xff0c;事件处理函数有&#xff1a; bool event(QEvent *event) override;virtual void mousePressEvent(QMouseEvent *event);virtual void mouseReleaseEvent(QMouseEvent *event);virtual void mouseDou…

[个人笔记] Git的CLI笔录

Git - CLI笔录 Git的CLI笔录 Git - CLI笔录Git的CLI笔录 Git的CLI笔录 origin: 表示远程仓库节点名称。 当有多个远程仓库时 可新增远程仓库节点名称如 new_origin | new_remote origin/HEAD: 表示当前Git仓库默认分支的引用&#xff0c;通常指向origin/master或origin/main g…

11.27二叉查找树,遍历二叉树,层序(判断是不是完全二叉树),根据遍历序列重构二叉树,递归输入建树(树的定义,结构体细节,typedef)

如果left<right&#xff0c;就表明其之间还有元素&#xff0c;即左右指针重合&#xff0c;区间只有一个元素也被包含其中&#xff1b; left<right,就表明递归过程中&#xff0c;只允许区间有两个及以上的元素&#xff0c;不允许区间只有一个元素&#xff0c;那么对应地&…

AB|如何正确从罗克韦尔官网下载资料?

哈喽呀&#xff0c;大家好&#xff0c;我是雷工&#xff01; 作为工控行业的从业者&#xff0c;可能要和各个厂家的中控系统、PLC、触摸屏、变频器、等软硬件产品打交道。 虽然从业十余年&#xff0c;但也不可能接触使用过所有的工控产品。还有海量的产品是没有接触过的。 但很…

Programming Abstractions in C阅读笔记:p202-p234

《Programming Abstractions in C》学习第65天&#xff0c;p202-p234总结。 一、技术总结 完成第五章学习&#xff0c;第五章介绍递归在实际问题中的进一步应用&#xff0c;例如汉诺塔问题&#xff0c;数学中的排列问题&#xff0c;更有难度。使用递归解决问题时有时候需要借…

TOD和PPS精确时间同步技术

介绍 PPS和TOD PPS和TOD是两种用于精确时间同步的技术&#xff0c;它们在许多领域都有广泛的应用&#xff0c;总的来说&#xff0c;PPS和TOD被广泛应用于各种需要高度精确时间同步的领域&#xff0c;包括通信、测量、测试、系统集成和计算机网络等。 一、PPS PPS&#xff08…

“华为杯”研究生数学建模竞赛2019年-【华为杯】C题:视觉情报信息分析(附Python代码实现)

目录 摘 要: 一、问题重述 1.1 背景描述 1.2 要解决的问题 二、符号说明

【专题】支持向量机(Support Vector Machines,SVM)

​​​​​ ​​ 支持向量机&#xff08;Support Vector Machines&#xff0c;SVM&#xff09;是一种强大的监督学习模型&#xff0c;常用于分类、回归和异常值检测任务。它的核心思想是通过构建一个最大间隔超平面来有效地分隔不同类别的数据点。 在SVM中&#xff0c;数据点…

Mysql8.1.0 安装问题-缺少visual studio 2019x64组件

缺少visual studio x64组件的问题 使用Mysql8以上的安装包mysql-8.1.0-winx64.msi进行安装&#xff0c; 提示缺少visual studio 2019 x64可再发行组件 在微软官网下载vc可再发行程序包 Microsoft Visual C 可再发行程序包最新支持的下载 在Visual Studio 2015、2017、2019 和…

使字符串的单词倒序输出表示

题目 任务描述 本关任务&#xff1a;请实现函数 revWordoder&#xff0c;能够将 pa 指向的单词表字符串中的所有单词&#xff0c;按相反顺序放入 pb&#xff0c;同时去除多余的空格&#xff0c;单词之间只留一个空格. 例如 pa 中为 red blue, 则调用函数后&#xff0c;pb 中为b…

MIT线性代数笔记-第17讲-正交矩阵,Schmidt正交化

目录 17.正交矩阵&#xff0c; S c h m i d t Schmidt Schmidt正交化打赏 17.正交矩阵&#xff0c; S c h m i d t Schmidt Schmidt正交化 “标准”经常表示单位长度 标准正交基&#xff1a;由两两正交的单位向量组成的基 将标准正交基中的元素记作 q ⃗ 1 , q ⃗ 2 , ⋯ , q …

基于FactoryBean、实例工厂、静态工厂创建Spring中的复杂对象

&#x1f609;&#x1f609; 学习交流群&#xff1a; ✅✅1&#xff1a;这是孙哥suns给大家的福利&#xff01; ✨✨2&#xff1a;我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 &#x1f96d;&#x1f96d;3&#xff1a;QQ群&#xff1a;583783…

公司网站遇到HTTPS攻击,有什么办法解决

随着互联网的不断发展和进步&#xff0c;Web应用程序的重要性不断提升。Web应用程序往往需要承载大量的用户数据&#xff0c;在传输过程中&#xff0c;为了保护数据安全&#xff0c;往往使用HTTPS协议进行数据加密。但是&#xff0c;HTTPS协议也面临着各种攻击的威胁&#xff0…

会声会影2024旗舰版系统配置要求及格式支持

会声会影2024旗舰版是一款广受欢迎的视频编辑软件&#xff0c;它的最新版本&#xff0c;会声会影2023&#xff0c;已经发布。在这篇文章中&#xff0c;我们将探讨会声会影2024旗舰版系统配置要求及格式支持 会声会影2024是一款专业的视频剪辑软件&#xff0c;能够帮助用户制作高…

如何在h5和小程序中适配iphoneX及更高版本全面屏底部的安全区

关键词 IOS 前言 在项目开发的过程中&#xff0c;需要IOS全面屏底部安全区适配 步骤 h5需要设置页面属性&#xff1a; <meta name"viewport"content"widthdevice-width, initial-scale1, maximum-scale1, user-scalableno,viewport-fitcover">2.…

geemap学习笔记016:获取图像的基本属性和描述性信息

前言 遥感数据中通常包含众多信息&#xff0c;例如图像获取的时间、云覆盖量、以及每个波段的最大值最小值等等。 1 导入库并显示地图 import ee import geemapMap geemap.Map() Map2 添加图像数据 centroid ee.Geometry.Point([-122.4439, 37.7538]) #创建一个点坐标lan…

Spark SQL,DF,RDD cache常用方式

RDD中的cache 调用cache方法 val testRDD sc.parallelize(Seq(elementA, elementB, elementC)).map(x > (x._1, x._2)).setName("testRDD")testRDD.cache() dataframe中的cache 利用catalog以表的形式对数据进行缓存 import org.apache.spark.SparkConf impo…