目录

一、前言

二、整体思想

三、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:祝你生日快乐相关推荐

  1. 用python写生日祝福的教程_祝豌豆生日快乐 - Python猫的个人空间 - OSCHINA - 中文开源技术交流社区...

    不算不知道,一算吓一跳:近三个月,豌豆已经读完心理学相关的书 14 本,为此写了 12 篇文章,按每篇平均 4000 字算,已经累计 4.8 万字了. 这还没完,她还给某个篇均阅读量 2.5 万的电视 ...

  2. 生活随记 - 祝你生日快乐

    2020-11-11,今天单身节,晚上饭后,大家聊起单身前后结婚前后有娃前后的生活,包括生日的过法,各自都有很大的不同,有的精彩,有的踏实,有的平凡,有的独特,有的细水长流,有的感人肺腑,而我自己,大 ...

  3. 用python写 祝你生日快乐英文_八种祝你生日快乐英文表达,太实用了!

    祝你生日快乐英文其实有多种说法,有的简单,有的复杂.相信很多人都想学习新的祝你生日快乐英文句子,没问题,阿卡索外教网今天给你总结了八种祝你生日快乐英文表达. 最普遍常见的几种祝你生日快乐英文说法 八种 ...

  4. 用python写 祝你生日快乐英文_用英语祝你生日快乐的10种方式,太实用了!

    每次想对朋友说祝你生日快乐英文都只会那一句,而且是小学生会的一句,没有一点新意.相信很多人都想学习新的祝你生日快乐英文句子,没问题,牛津英语今天给你总结了十种祝你生日快乐英文表达. 一.生活中常见的几 ...

  5. 用python画颗爱心祝生日快乐_新学者如何用python祝女朋友生日快乐?

    谢邀. 其实这是一个蛮好的问题,既能激发自己继续学习的兴趣,又能哄女朋友开心,何乐而不为呢? 作为一名程序员,写一个脚本再简单不过了,难的是如何配上动人的文字和图片,让女朋友开心,所以这种搭配,我称之 ...

  6. python如何写生日快乐说说_生日怎么发说说有创意2018 祝自己生日快乐的说说大全...

    1. 祝自己生日快乐!虽然是一个人过,可我很快乐. 2. 节制是生活的艺术.如果你能节制烟酒,节制喜悲,节制贪欲,节制冲动,那么,你的生活就会充满阳光.祝自己生日快乐 3. 很多时候晚上我都是躺在床上 ...

  7. 祝51CTO 生日快乐

    祝51CTO 生日快乐 转载于:https://blog.51cto.com/sevion/355228

  8. Matlab学习笔记——数据文件定位

    写在这里的初衷,一是备忘,二是希望得到高人指点,三是希望能遇到志同道合的朋友. 目录 数据文件定位 1.fseek函数 2.ftell函数 3.feof函数 数据文件定位 1.fseek函数 用于改变 ...

  9. MATLAB学习笔记(二)

    MATLAB学习笔记(二) 一.矩阵运算 矩阵分析 向量和矩阵的范数运算 矩阵的秩 矩阵的化零矩阵 矩阵的化简rref()函数 线性方程组 超定线性方程组求解 矩阵分解 1.对称正定矩阵的Choles ...

  10. MATLAB学习笔记(一)

    MATLAB 一.安装的目录结构 二.常用的菜单及工具 布局 设置路径 设置工作路径 三.常用命令 四. 基础知识 数据类型 复数类型 `inf 和 NaN` 字符与字符串 函数句柄 结构体 结构体的 ...

最新文章

  1. 简谈C/C++学习路线
  2. 写给Java开发者看的JavaScript对象机制
  3. JS数组去重算法实现
  4. 网页右侧在线客服html,漂浮在网页右侧的QQ在线客服代码? 1、怎么样修改以下代码,让其变为最靠右边2、如何插入到网页当中...
  5. 双赛道近四百万奖金,2021全国人工智能大赛来了
  6. 常用网站有哪些,最常用的网站
  7. dns服务器不正确,DNS服务器怎么设置?dns错误怎么办?
  8. 浮点运算方法和浮点运算器
  9. 【xlwings api语言参考】Worksheet.Cells 属性
  10. 中国OpenAI?李志飞放弃了;AutoGPT试玩指南;AI大时代的家长完整手册;电商数字模特生成实践 | ShowMeAI日报
  11. 异地多活 以阿里为例
  12. XSKY新一代分布式文件系统XGFS揭秘——元数据服务
  13. 模拟法螺旋遍历矩阵:54.螺旋矩阵(Kotlin)
  14. 东辉职校计算机专业录取分数线,2016年上海东辉职校录取分数
  15. SettingsProvider简单分析
  16. UL-1973-2022 储能电池安全标准
  17. layui弹出层之layer.open弹出iframe窗口·
  18. DTcmsV4.0分析学习——(1)数据库结构分析
  19. 2017年4月历史文章汇总
  20. QQ邮箱添加企业邮箱与企业邮箱添加QQ邮箱

热门文章

  1. java狗具有特别的接飞盘的方法_如何让狗狗学会接飞盘?简单,这几个技巧让你事半功倍!...
  2. Hmac概念与实现(js和go实现)
  3. python理解以及conda使用
  4. 《森林防火视频监控系统技术规范》解读
  5. win10系统无法安装CAD2008的解决方案
  6. python sum函数用法_Python pandas.DataFrame.sum函数方法的使用
  7. 【C语言】strcat、strncat详解并模拟实现
  8. 服务器健康管理芯片设计,IC设计大厂看中健康领域,联发科发布首款六合一智能健康芯片-控制器/处理器-与非网...
  9. Android动画开发思路
  10. 实弹影像报靶实际训练中的应用