用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 time模块详解(常用函数实例讲解,非常好)
Apr 24 Python
Python入门篇之条件、循环
Oct 17 Python
python使用socket连接远程服务器的方法
Apr 29 Python
python使用htmllib分析网页内容的方法
May 08 Python
基于asyncio 异步协程框架实现收集B站直播弹幕
Sep 11 Python
详解js文件通过python访问数据库方法
Mar 03 Python
Python 保持登录状态进行接口测试的方法示例
Aug 06 Python
详解python中的index函数用法
Aug 06 Python
详解Python3 pandas.merge用法
Sep 05 Python
python3中关于excel追加写入格式被覆盖问题(实例代码)
Jan 10 Python
Python celery原理及运行流程解析
Jun 13 Python
深入理解pytorch库的dockerfile
Jun 10 Python
python图像处理 PIL Image操作实例
Apr 09 #Python
Python Pytorch查询图像的特征从集合或数据库中查找图像
Python实现科学占卜 让视频自动打码
Python自动化工具之实现Excel转Markdown表格
Python加密技术之RSA加密解密的实现
Apr 08 #Python
Python识别花卉种类鉴定网络热门植物并自动整理分类
请求模块urllib之PYTHON爬虫的基本使用
You might like
PHP查找数值数组中不重复最大和最小的10个数的方法
2015/04/20 PHP
PHP中读取文件的几个方法总结(推荐)
2016/06/03 PHP
yii2.0框架场景的简单使用示例
2020/01/25 PHP
JQuery 风格的HTML文本转义
2009/07/01 Javascript
JavaScript实现简单的时钟实例代码
2013/11/23 Javascript
动态加载js、css等文件跨iframe实现
2014/02/24 Javascript
点击表单提交时出现jQuery没有权限的解决方法
2014/07/23 Javascript
jQuery增加自定义函数的方法
2015/07/18 Javascript
angularjs封装bootstrap时间插件datetimepicker
2016/06/20 Javascript
js removeChild 方法深入理解
2016/08/16 Javascript
jQuery简易时光轴实现方法示例
2017/03/13 Javascript
细说webpack源码之compile流程-rules参数处理技巧(1)
2017/12/26 Javascript
layui的table中显示图片方法
2018/08/17 Javascript
菊花转动的jquery加载动画效果
2018/08/19 jQuery
vue插件实现v-model功能
2018/09/10 Javascript
详解Vue.js iview实现树形权限表(可扩展表)
2018/09/30 Javascript
vue路由导航守卫和请求拦截以及基于node的token认证的方法
2019/04/07 Javascript
react 组件传值的三种方法
2019/06/03 Javascript
vue递归组件实战之简单树形控件实例代码
2019/08/27 Javascript
在Vue项目中,防止页面被缩放和放大示例
2019/10/28 Javascript
微信小程序wx.navigateTo方法里的events参数使用详情及场景
2020/01/07 Javascript
jQuery+ajax实现用户登录验证
2020/09/13 jQuery
[58:11]守擂赛第二周擂主赛 DeMonsTer vs Leopard
2020/04/28 DOTA
详解Python的Django框架中的Cookie相关处理
2015/07/22 Python
在Python中使用defaultdict初始化字典以及应用方法
2018/10/31 Python
Python中Numpy ndarray的使用详解
2019/05/24 Python
python flask框架实现传数据到js的方法分析
2019/06/11 Python
python Django的web开发实例(入门)
2019/07/31 Python
Python栈的实现方法示例【列表、单链表】
2020/02/22 Python
浅谈CSS3 box-sizing 属性 有趣的盒模型
2019/04/02 HTML / CSS
澳大利亚最好的电动自行车:Leon Cycle
2020/12/19 全球购物
什么是lambda函数
2013/09/17 面试题
智能电子应届生求职信
2013/11/10 职场文书
给学校的建议书范文
2014/05/15 职场文书
加油口号大全
2014/06/13 职场文书
python析构函数用法及注意事项
2021/06/22 Python