用PYTHON去计算88键钢琴的琴键频率和音高


Posted in Python onApril 10, 2022

我们知道了钢琴键盘的音高是其实是有规律的,如下

  • 频率翻倍,高一个八度
  • 国际基准音:440Hz,钢琴键盘上对应小字一组的la

小字一组的la可以看下图

用PYTHON去计算88键钢琴的琴键频率和音高

根据这两个规律,我们就可以计算出所有88个琴键的音高(单位是频率)。

钢琴键盘是标准的十二平均律,12个键后频率翻倍,那么每两个琴键之间的频率倍数是固定的,也就是可以根据一个琴键的音高,计算出下一个琴键的音高。

计算钢琴最左边琴键的音高

我们知道小字一组的la频率是440Hz,钢琴最左边的键也是la,隔了4个组,根据x * 2 * 2 * 2 * 2 = 440Hz。
那么最左边琴键的音高为

x = 440 / 16 = 27.5

计算每两个琴键的频率倍数

每隔12个键音高翻倍,x^12=2
那么每个键的音高倍数为2开12次方

x = pow(2, 1/12)=1.0594630943592953

python程序实现

知道了最左边琴键的音高,还知道了倍数,那么不停地乘个87次就能知道钢琴所有琴键的音高了。
我们用python实现一样

定义钢琴键盘

我们先定义一个相关钢琴键盘的变量

# 钢琴键盘chenqionghe
keyboard = {
    "大字二组": ['A2', 'A2#', 'B2'],
    "大字一组": ['C1', 'C1#', 'D1', 'D1#', 'E1', 'F1', 'F1#', 'G1', 'G1#', 'A1', 'A1#', 'B1'],
    "大字组": ['C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'A#', 'B'],
    "小字组": ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b'],
    "小字一组": ['c1', 'c1#', 'd1', 'd1#', 'e1', 'f1', 'f1#', 'g1', 'g1#', 'a1', 'a1#', 'b1'],
    "小字二组": ['c2', 'c2#', 'd2', 'd2#', 'e2', 'f2', 'f2#', 'g2', 'g2#', 'a2', 'a2#', 'b2'],
    "小字三组": ['c3', 'c3#', 'd3', 'd3#', 'e3', 'f3', 'f3#', 'g3', 'g3#', 'a3', 'a3#', 'b3'],
    "小字四组": ['c4', 'c4#', 'd4', 'd4#', 'e4', 'f4', 'f4#', 'g4', 'g4#', 'a4', 'a4#', 'b4'],
    "小字五组": ['c5']
}

为了友好展示,我们放入DataFrame中查看

keybord_data={k: [*v, *[""]*(12-len(v))] for k, v in keyboard.items()}
df = pd.DataFrame(keybord_data)

输出一下

用PYTHON去计算88键钢琴的琴键频率和音高

OK,这里我们就先把钢琴键盘弄出来了。

计算每个琴键的音高

# python
data = {}

start = 440 / 16
loop = math.pow(2, 1 / 12)
i = 0
for groupName, group in keyboard.items():
    for name in group:
        if name == "A2":
            current = start
        else:
            current = current * loop
        data[name] = name + ": " + str(round(current,3))
        i = i + 1

data这个数组保存了每个琴键的音高

用PYTHON去计算88键钢琴的琴键频率和音高

展示琴键音高

df.replace(data)

查看一下

用PYTHON去计算88键钢琴的琴键频率和音高

这样就计算出了所有琴键的音高

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python BeautifulSoup使用方法详解
Nov 21 Python
python监控网卡流量并使用graphite绘图的示例
Apr 27 Python
python自动化测试之连接几组测试包实例
Sep 28 Python
python dlib人脸识别代码实例
Apr 04 Python
Python基础学习之基本数据结构详解【数字、字符串、列表、元组、集合、字典】
Jun 18 Python
PyTorch 随机数生成占用 CPU 过高的解决方法
Jan 13 Python
Python实现栈的方法详解【基于数组和单链表两种方法】
Feb 22 Python
PYcharm 激活方法(推荐)
Mar 23 Python
Python利用folium实现地图可视化
May 23 Python
python如何利用cv2模块读取显示保存图片
Jun 04 Python
Python 键盘事件详解
Nov 11 Python
分享几种python 变量合并方法
Mar 20 Python
python图像处理 PIL Image操作实例
Apr 09 #Python
Python Pytorch查询图像的特征从集合或数据库中查找图像
Python实现科学占卜 让视频自动打码
Python自动化工具之实现Excel转Markdown表格
Python加密技术之RSA加密解密的实现
Apr 08 #Python
Python识别花卉种类鉴定网络热门植物并自动整理分类
请求模块urllib之PYTHON爬虫的基本使用
You might like
我的论坛源代码(五)
2006/10/09 PHP
用PHPdig打造属于你自己的Google[图文教程]
2007/02/14 PHP
php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串
2020/04/05 PHP
改写ThinkPHP的U方法使其路由下分页正常
2014/07/02 PHP
ThinkPHP调试模式与日志记录概述
2014/08/22 PHP
php结合ACCESS的跨库查询功能
2015/06/12 PHP
php封装的验证码工具类完整实例
2016/10/19 PHP
Yii框架分页实现方法详解
2017/05/20 PHP
页面只有一个text的时候,回车自动submit的解决方法
2010/08/12 Javascript
jQuery与ExtJS之选择实例分析
2010/08/19 Javascript
javascript for循环从入门到偏门(效率优化+奇特用法)
2012/08/01 Javascript
Jquery easyui 下loaing效果示例代码
2013/08/12 Javascript
EasyUI中datagrid在ie下reload失败解决方案
2015/03/09 Javascript
关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别
2015/10/12 Javascript
javascript实现tab响应式切换特效
2016/01/29 Javascript
vue中渐进过渡效果实现
2016/10/27 Javascript
js replace()去除代码中空格的实例
2017/02/14 Javascript
详解使用JS如何制作简单的ASCII图与单极图
2017/03/31 Javascript
vue-router+vuex addRoutes实现路由动态加载及菜单动态加载
2017/09/28 Javascript
python返回昨天日期的方法
2015/05/13 Python
fastcgi文件读取漏洞之python扫描脚本
2017/04/23 Python
python 调用c语言函数的方法
2017/09/29 Python
python实现百万答题自动百度搜索答案
2018/01/16 Python
python爬虫获取多页天涯帖子
2018/02/23 Python
Python 实现两个列表里元素对应相乘的方法
2018/11/14 Python
python+opencv打开摄像头,保存视频、拍照功能的实现方法
2019/01/08 Python
实例讲解Python3中abs()函数
2019/02/19 Python
Python绘制二维曲线的日常应用详解
2019/12/04 Python
Python 支持向量机分类器的实现
2020/01/15 Python
Python内存映射文件读写方式
2020/04/24 Python
python 实现IP子网计算
2021/02/18 Python
英语国培研修感言
2014/02/13 职场文书
工商管理自荐书
2014/07/06 职场文书
书法兴趣小组活动总结
2014/07/07 职场文书
2015年社会治安综合治理工作总结
2015/04/10 职场文书
python中对列表的删除和添加方法详解
2022/02/24 Python