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

news2024/11/26 13:40:31

选择你喜欢的一首钢琴曲,下载并分析曲谱,用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.coloradmin.cn/o/1264857.html

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

相关文章

Django项目部署本地windows IIS(详细版)和static文件设置(页面样式正常显示)

目录 必要条件: 一、下载并启用wfastcgi 二、window安装 IIS功能 三、IIS管理器中添加网站 1、复制项目 2、复制wfastcgi.py文件 3、创建文件web.config 4、添加网站,填写信息 5、启动fastcgi程序 6、修改进程标识 四、static文件设置和正确显…

吉利展厅 | 透明OLED拼接2x2:科技与艺术的完美融合

产品:4块55寸OLED透明拼接屏 项目地点:南宁 项目时间:2023年11月 应用场景:吉利展厅 在2023年11月的南宁,吉利展厅以其独特的展示设计吸引了众多参观者的目光。其中最引人注目的亮点是展厅中央一个由四块55寸OLED透…

pandas教程:USDA Food Database USDA食品数据库

文章目录 14.4 USDA Food Database(美国农业部食品数据库) 14.4 USDA Food Database(美国农业部食品数据库) 这个数据是关于食物营养成分的。存储格式是JSON,看起来像这样: {"id": 21441, &quo…

4、stable diffusion

github 安装anaconda环境 conda env create -f environment.yaml conda activate ldm安装依赖 conda install pytorch1.12.1 torchvision0.13.1 torchaudio0.12.1 cudatoolkit11.3 -c pytorch pip install transformers4.19.2 diffusers invisible-watermark pip install -e…

快速筛出EXCEL行中的重复项

比如A列是一些恶意IP需要导入防火墙,但包括一些重复项,为不产生错误,需要把重复项筛出来: 1、给A列排序,让重复项的内容排在相邻的行 2、在B列中写一个条件函数:IF(A1A2,1,0),然后下拉至行尾完成…

2023-简单点-机器学习中常用的特殊函数,激活函数[sigmoid tanh ]

机器学习中的特殊函数 Sigmoidsoftplus函数tanhReLu(x)Leaky-ReluELUSiLu/ SwishMish伽玛函数beta函数Ref Sigmoid 值域: 【0,1】 定义域:【负无穷,正无穷】 特殊点记忆: 经过 [0 , 0.5] 关键点[0,0.5]处的导数是 0.025 相关导数: softplu…

群晖NAS配置之自有服务器frp实现内网穿透

什么是frp frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议,且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。今天跟大家分享一下frp实现内网穿透 为什么使用 frp &a…

selenium 工具 的基本使用

公司每天要做工作汇报,汇报使用的网页版, 所以又想起 selenium 这个老朋友了。 再次上手,发现很多接口都变了, 怎么说呢, 应该是易用性更强了, 不过还是得重新看看, 我这里是python3。 pip安装…

Blender动画导入Three.js

你是否在把 Blender 动画导入你的 ThreeJS 游戏(或项目)中工作时遇到问题? 您的 .glb (glTF) 文件是否正在加载,但没有显示任何内容? 你的骨骼没有正确克隆吗? 如果是这样,请阅读我如何使用 SkeletonUtils.js 解决此问题 1、前提条件 你正在使用 Blender 3.1+(此版本…

微服务--03--OpenFeign 实现远程调用 (负载均衡组件SpringCloudLoadBalancer)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 OpenFeign其作用就是基于SpringMVC的常见注解,帮我们优雅的实现http请求的发送。 RestTemplate实现了服务的远程调用 OpenFeign快速入门负载均衡组件Spr…

【Linux】Linux第一个小程序 --- 进度条

👦个人主页:Weraphael ✍🏻作者简介:目前正在学习c和Linux还有算法 ✈️专栏:Linux 🐋 希望大家多多支持,咱一起进步!😁 如果文章有啥瑕疵,希望大佬指点一二 …

内置函数【MySQL】

文章目录 MySQL 内置函数日期和时间函数字符串函数数学函数信息函数参考资料 MySQL 内置函数 MySQL 的内置函数主要分为以下几种: 字符串函数:用于对字符串进行操作,如连接、截取、替换、反转、格式化等。数值函数:用于对数值进…

Phpstudy v8.0/8.1小皮升级Apache至最新,同时升级openssl版本httpd-2.4.58 apache 2.4.58

1.apache官网下载最新版本的apache 2.4.58 2.phpstudy下apache停止运行,把原来的Apache文件夹备份一份 复制图中的文件替换apache目录下文件 3.phpstudy中开启apache

西南科技大学(数据结构A)期末自测练习二

一、填空题(每空1分,共10分) 1、在线性表的下列运算中,不改变数据元素之间结构关系的运算是( D ) A、插入 B、删除 C、排序 D、定位 2、顺序表中第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是( B ) A.110 B.108 C.100 …

11.28C++

#include <iostream>using namespace std;int main() {string str;cout << "请输入一个字符串&#xff1a;" << endl;getline(cin,str);int size str.size();int a0,b0,c0,d0,e0;for(int i0; i < size; i){if(str.at(i) > A && str…

直线(蓝桥杯)

直线 题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 在平面直角坐标系中&#xff0c;两点可以确定一条直线。如果有多点在一条直线上&#xff0c; 那么这些点中任意两点确定的直线是同一条。 给定平面上 2 3 个…

神奇植物在哪里?文心大模型助力一秒读懂花草的“前世今生”

本期文心开发者说邀请到飞桨开发者技术专家谢杰航老师&#xff0c;分享如何利用AI技术构建风景园林行业的植物知识科普系统&#xff0c;接着还介绍了大模型应用的基本技术流程框架&#xff0c;多模态特征提取以及使用向量数据库的优势&#xff0c;使用飞桨星河社区运行向量数据…

解决git action发布报错:Input required and not supplied: upload_url

现象&#xff1a; 这个问题死活都找不到原因&#xff0c;后来打了一段调试的代码 - name: Debug Create Release Output run: | echo "Release ID: ${{ env.RELEASE_ID }}" echo "Release Upload URL: ${{ env.RELEASE_UPLOAD_URL }}" env: RELEASE_ID: ${…

css-tricks网站图例

使用css实现钟表 <template><div><p><small>CSS sin() and cos() does <strong>NOT</strong> work in your browser.</small></p><div class"clock"><div id"app" class"clock-face"…

解决:SyntaxError: Non-UTF-8 code starting with À in file but no encoding declared

解决&#xff1a;SyntaxError: Non-UTF-8 code starting with in file but no encoding declared 文章目录 解决&#xff1a;SyntaxError: Non-UTF-8 code starting with in file but no encoding declared背景报错问题报错翻译报错原因解决方法使用utf-8格式使用gbk格式今天…