Matlab·学习 | music:祝你生日快乐
目录
一、前言
二、整体思想
三、matlab实现代码:
1.主文件:初始化乐谱
2.声波制作函数:
四、总结:
一、前言
本篇文章内容为个人学习分享,读代码须知以下
乐理的基本知识,以及十二平均律(波的频率与音高的标准),个人推荐在维基百科中搜索十二平均律表。
二、整体思想
在主函数中,将一些简单的乐谱按照节拍,按键,基调,半音改变经行拆解。
然后我个人学习时,以440hz为标准的do依次类推,得到的基础钢琴七键,然后通过改变基础七键得到其他的音高。
因为相邻的音阶是等差的,且音高p = 69 + 12 x log2(f频率/440),了解更加细致的讲解点击这里
三、matlab实现代码:
1.主文件:初始化乐谱
clear;clc
Fs=8192; %sound函数的采样频率
%说明:tone为七节白键,rythm默认为4/4拍,keynote_type为更改基调,
%说明:rythm_change为节拍改变,文中有一部份为3/4拍,Soundzone_change为低中高音设定
%1234567分别对应do,re,mi,fa,so,la,si
tone1=[5,5,6,5,1,7,5,5,6,5,2,...1,5,5,5,3,1,7,6,4,4,3,1,3,2,5,5,6,5,1,...7,5,5,6,5,2,1,5,5,5,3,1,7,6];
tone2=[4,4,3,1,2,1,5,5,...6,5,1,7,5,5,6,5,2,1,5,5,...5,3,1,7,6,4,4,3,1,3,2,5,5,...6,5,1,7,5,5,6,5,2,1,5,5,5,3,1,...7,6,4,4,3,1,2,1];
tone=[tone1,tone2];rythm1=[0.5,0.5,1,1,1,2,0.5,0.5,1,1,1,...2,0.5,0.5,1,1,1,1,1,0.5,0.5,1,1,1,2,0.5,0.5,1,1,1,...2,0.5,0.5,1,1,1,2,0.5,0.5,1,1,1,1,5];
rythm2=[1,1,2,2,2,7,0.5,0.5,...1.5,1.5,1,3,0.5,0.5,1.5,1.5,1,3,0.5,0.5,...1.5,1.5,1,1.5,1.5,0.5,0.5,1.5,1.5,1,3,0.5,0.5,...1.5,1.55,1,3,0.5,0.5,1.5,1.5,1,3,0.5,0.5,1.5,1.5,1,...1.5,5.5,0.5,0.5,2,2,4,8];
rythm=[rythm1,rythm2];length1=length(tone1);
length2=length(tone2);
rythm_change_1=ones(1,length1)*3/4/2;
rythm_change_2=ones(1,length2)*1/4;
rythm_change=[rythm_change_1,rythm_change_2];
rythm=rythm.*rythm_change;y=[];
len=length(tone);
%A调为1,B调为2,C调为3,D调为4,E调为5,F调为6,E调为7;
keynote_type=6;%3为高音,2为中音,1为低音
Soundzone_change=[1,1,1,1,2,1,1,1,1,1,2,...2,1,1,2,2,2,1,1,2,2,2,2,2,2,1,1,1,1,2,...1,1,1,1,1,2,2,1,1,2,2,2,1,1,...2,2,2,2,2,2,1,1,...1,1,2,1,1,1,1,1,2,2,1,1,...2,2,2,1,1,2,2,2,2,2,2,1,1,...1,1,2,1,1,1,1,1,2,2,1,1,2,2,2,...1,1,2,2,2,2,2,2];%3为上升一个全音,2.5为上升一个半音,2为原音,1.5为下调一个半音,1为下调一个全音
up_down=2;
for i=1:1:leny=[y,get_ware(tone(i),rythm(i),keynote_type,Soundzone_change(i),up_down)];
end
%plot(y)
sound(y,Fs) %按照给定的波,发出声音的函数
2.声波制作函数:
function y=get_ware(tone, rythm,keynote_type,Soundzone_change,up_down)
%tone为音节,rythm为节拍,keynote_type为当前基调默认为C调,keynote_change为改变基调,up_down为音节升降
%Sound zone_change为改变音区;Fs=8192;freqs=[440*2.^(3/12),440*2^(5/12),440*2^(7/12),440*2^(8/12),440*2^(10/12),440*2^(12/12),440*2^(14/12)];%C调中音freqs=freqs*2.^((keynote_type-3)/12);freqs=freqs*2.^((Soundzone_change-2)*12/12);freqs=freqs*2.^((up_down-2)/12);x=linspace(0,2*pi*rythm,floor(Fs*rythm));y=(sin(freqs(tone)*x).*(1-(x/(2*pi*rythm))));
end
四、总结:
上述的音乐绘制还有一些值得研究的地方,比如说,如何发出同时发出多个音,实现更为复杂的乐曲的演奏,以及如何模拟出钢琴按键轻重不同导致的尾音长短的不同。还有就是在转换乐谱上边,如果有更加智能的方式生成就更加好了,因为基础的演奏的函数其实很简单。
Matlab·学习 | music:祝你生日快乐相关推荐
- 用python写生日祝福的教程_祝豌豆生日快乐 - Python猫的个人空间 - OSCHINA - 中文开源技术交流社区...
不算不知道,一算吓一跳:近三个月,豌豆已经读完心理学相关的书 14 本,为此写了 12 篇文章,按每篇平均 4000 字算,已经累计 4.8 万字了. 这还没完,她还给某个篇均阅读量 2.5 万的电视 ...
- 生活随记 - 祝你生日快乐
2020-11-11,今天单身节,晚上饭后,大家聊起单身前后结婚前后有娃前后的生活,包括生日的过法,各自都有很大的不同,有的精彩,有的踏实,有的平凡,有的独特,有的细水长流,有的感人肺腑,而我自己,大 ...
- 用python写 祝你生日快乐英文_八种祝你生日快乐英文表达,太实用了!
祝你生日快乐英文其实有多种说法,有的简单,有的复杂.相信很多人都想学习新的祝你生日快乐英文句子,没问题,阿卡索外教网今天给你总结了八种祝你生日快乐英文表达. 最普遍常见的几种祝你生日快乐英文说法 八种 ...
- 用python写 祝你生日快乐英文_用英语祝你生日快乐的10种方式,太实用了!
每次想对朋友说祝你生日快乐英文都只会那一句,而且是小学生会的一句,没有一点新意.相信很多人都想学习新的祝你生日快乐英文句子,没问题,牛津英语今天给你总结了十种祝你生日快乐英文表达. 一.生活中常见的几 ...
- 用python画颗爱心祝生日快乐_新学者如何用python祝女朋友生日快乐?
谢邀. 其实这是一个蛮好的问题,既能激发自己继续学习的兴趣,又能哄女朋友开心,何乐而不为呢? 作为一名程序员,写一个脚本再简单不过了,难的是如何配上动人的文字和图片,让女朋友开心,所以这种搭配,我称之 ...
- python如何写生日快乐说说_生日怎么发说说有创意2018 祝自己生日快乐的说说大全...
1. 祝自己生日快乐!虽然是一个人过,可我很快乐. 2. 节制是生活的艺术.如果你能节制烟酒,节制喜悲,节制贪欲,节制冲动,那么,你的生活就会充满阳光.祝自己生日快乐 3. 很多时候晚上我都是躺在床上 ...
- 祝51CTO 生日快乐
祝51CTO 生日快乐 转载于:https://blog.51cto.com/sevion/355228
- Matlab学习笔记——数据文件定位
写在这里的初衷,一是备忘,二是希望得到高人指点,三是希望能遇到志同道合的朋友. 目录 数据文件定位 1.fseek函数 2.ftell函数 3.feof函数 数据文件定位 1.fseek函数 用于改变 ...
- MATLAB学习笔记(二)
MATLAB学习笔记(二) 一.矩阵运算 矩阵分析 向量和矩阵的范数运算 矩阵的秩 矩阵的化零矩阵 矩阵的化简rref()函数 线性方程组 超定线性方程组求解 矩阵分解 1.对称正定矩阵的Choles ...
- MATLAB学习笔记(一)
MATLAB 一.安装的目录结构 二.常用的菜单及工具 布局 设置路径 设置工作路径 三.常用命令 四. 基础知识 数据类型 复数类型 `inf 和 NaN` 字符与字符串 函数句柄 结构体 结构体的 ...
最新文章
- 简谈C/C++学习路线
- 写给Java开发者看的JavaScript对象机制
- JS数组去重算法实现
- 网页右侧在线客服html,漂浮在网页右侧的QQ在线客服代码? 1、怎么样修改以下代码,让其变为最靠右边2、如何插入到网页当中...
- 双赛道近四百万奖金,2021全国人工智能大赛来了
- 常用网站有哪些,最常用的网站
- dns服务器不正确,DNS服务器怎么设置?dns错误怎么办?
- 浮点运算方法和浮点运算器
- 【xlwings api语言参考】Worksheet.Cells 属性
- 中国OpenAI?李志飞放弃了;AutoGPT试玩指南;AI大时代的家长完整手册;电商数字模特生成实践 | ShowMeAI日报
- 异地多活 以阿里为例
- XSKY新一代分布式文件系统XGFS揭秘——元数据服务
- 模拟法螺旋遍历矩阵:54.螺旋矩阵(Kotlin)
- 东辉职校计算机专业录取分数线,2016年上海东辉职校录取分数
- SettingsProvider简单分析
- UL-1973-2022 储能电池安全标准
- layui弹出层之layer.open弹出iframe窗口·
- DTcmsV4.0分析学习——(1)数据库结构分析
- 2017年4月历史文章汇总
- QQ邮箱添加企业邮箱与企业邮箱添加QQ邮箱
热门文章
- java狗具有特别的接飞盘的方法_如何让狗狗学会接飞盘?简单,这几个技巧让你事半功倍!...
- Hmac概念与实现(js和go实现)
- python理解以及conda使用
- 《森林防火视频监控系统技术规范》解读
- win10系统无法安装CAD2008的解决方案
- python sum函数用法_Python pandas.DataFrame.sum函数方法的使用
- 【C语言】strcat、strncat详解并模拟实现
- 服务器健康管理芯片设计,IC设计大厂看中健康领域,联发科发布首款六合一智能健康芯片-控制器/处理器-与非网...
- Android动画开发思路
- 实弹影像报靶实际训练中的应用