用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中executemany和序列的使用方法
Aug 12 Python
python利用paramiko连接远程服务器执行命令的方法
Oct 16 Python
python中使用%与.format格式化文本方法解析
Dec 27 Python
Python之多线程爬虫抓取网页图片的示例代码
Jan 10 Python
python实现微信防撤回神器
Apr 29 Python
python pandas生成时间列表
Jun 29 Python
python画双y轴图像的示例代码
Jul 07 Python
Python的matplotlib绘图如何修改背景颜色的实现
Jul 16 Python
pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换
Jan 13 Python
django restframework serializer 增加自定义字段操作
Jul 15 Python
VSCODE配置Markdown及Markdown基础语法详解
Jan 19 Python
python周期任务调度工具Schedule使用详解
Nov 23 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验证类的封装与使用方法详解
2019/01/10 PHP
基于dom编程中 动态创建与删除元素的使用
2013/04/17 Javascript
对js关键字命名的疑问介绍
2014/04/25 Javascript
jQuery循环滚动新闻列表示例代码
2014/06/17 Javascript
angularjs中的单元测试实例
2014/12/06 Javascript
jQuery zclip插件实现跨浏览器复制功能
2015/11/02 Javascript
angular.js分页代码的实例
2016/07/27 Javascript
Vue底层实现原理总结
2018/02/17 Javascript
VUE中v-on:click事件中获取当前dom元素的代码
2018/08/22 Javascript
vue实现可视化可拖放的自定义表单的示例代码
2019/03/20 Javascript
Vue使用watch监听一个对象中的属性的实现方法
2019/05/10 Javascript
JavaScript实现简易聊天对话框(加滚动条)
2020/02/10 Javascript
小谈angular ng deploy的实现
2020/04/07 Javascript
[52:06]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
[51:29]完美世界DOTA2联赛循环赛 Matador vs Forest BO2第一场 11.05
2020/11/05 DOTA
[51:17]完美世界DOTA2联赛循环赛Inki vs DeMonsTer 第二场 10月30日
2020/10/31 DOTA
Python 切分数组实例解析
2019/11/07 Python
python中property和setter装饰器用法
2019/12/19 Python
Python线程条件变量Condition原理解析
2020/01/20 Python
django实现将后台model对象转换成json对象并传递给前端jquery
2020/03/16 Python
解决Keras的自定义lambda层去reshape张量时model保存出错问题
2020/07/01 Python
css3动画事件—webkitAnimationEnd与计时器time事件
2013/01/31 HTML / CSS
使用css3实现的tab选项卡代码分享
2014/12/09 HTML / CSS
animation和transition的区别
2020/10/12 HTML / CSS
英国独特礼物想法和个性化礼物网站:notonthehighstreet.com
2018/04/16 全球购物
世界上最大的艺术和工艺用品商店:MisterArt.com
2018/07/13 全球购物
高性能装备提升营地:Kammok
2019/02/27 全球购物
网络安全方面的面试题
2015/11/04 面试题
总经理办公室主任岗位职责
2013/11/12 职场文书
负责人任命书范本
2014/06/04 职场文书
店铺转让协议书(2014版)
2014/09/23 职场文书
教师学习三严三实心得体会
2014/10/13 职场文书
银行竞聘报告范文
2014/11/06 职场文书
2015年考研复习计划
2015/01/19 职场文书
初三英语教学计划
2015/01/23 职场文书
2016年大学生社区服务活动总结
2016/04/06 职场文书