用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通过线程实现定时器timer的方法
Mar 16 Python
在 Python 应用中使用 MongoDB的方法
Jan 05 Python
python3.6 +tkinter GUI编程 实现界面化的文本处理工具(推荐)
Dec 20 Python
详解python 注释、变量、类型
Aug 10 Python
Python3.5局部变量与全局变量作用域实例分析
Apr 30 Python
django url到views参数传递的实例
Jul 19 Python
pytorch 利用lstm做mnist手写数字识别分类的实例
Jan 10 Python
python GUI库图形界面开发之PyQt5切换按钮控件QPushButton详细使用方法与实例
Feb 28 Python
如何在Python 游戏中模拟引力
Mar 27 Python
基于python实现模拟数据结构模型
Jun 12 Python
python语言的优势是什么
Jun 17 Python
Python帮你解决手机qq微信内存占用太多问题
Feb 15 Python
python图像处理 PIL Image操作实例
Apr 09 #Python
Python Pytorch查询图像的特征从集合或数据库中查找图像
Python实现科学占卜 让视频自动打码
Python自动化工具之实现Excel转Markdown表格
Python加密技术之RSA加密解密的实现
Apr 08 #Python
Python识别花卉种类鉴定网络热门植物并自动整理分类
请求模块urllib之PYTHON爬虫的基本使用
You might like
150kHz到30Mhz完全冲浪手册
2020/03/20 无线电
PHP函数utf8转gb2312编码
2006/12/21 PHP
详解php中空字符串和0之间的关系
2016/10/23 PHP
PHP实现网页内容html标签补全和过滤的方法小结【2种方法】
2017/04/27 PHP
jQuery boxy弹出层插件中文演示及使用讲解
2011/02/24 Javascript
使用jQuery解决IE与FireFox下createElement方法的差异
2013/11/14 Javascript
兼容所有浏览器的js复制插件Zero使用介绍
2014/03/19 Javascript
JS实现CheckBox复选框全选全不选功能
2015/05/06 Javascript
jquery实现点击展开列表同时隐藏其他列表
2015/08/10 Javascript
详解Javacript和AngularJS中的Promises
2016/02/09 Javascript
简单实现的JQuery文本框水印插件
2016/06/14 Javascript
终于实现了!精彩的jquery弹幕效果
2016/07/18 Javascript
vue脚手架vue-cli的学习使用教程
2017/06/06 Javascript
MUI顶部选项卡的用法(tab-top-webview-main)详解
2017/10/08 Javascript
nodejs操作mongodb的填删改查模块的制作及引入实例
2018/01/02 NodeJs
微信小程序如何获取群聊的openGid以及名称详解
2019/07/17 Javascript
Vue SSR 即时编译技术的实现
2020/05/06 Javascript
[00:32]2018DOTA2亚洲邀请赛OpTic出场
2018/04/03 DOTA
[01:04:32]DOTA2-DPC中国联赛 正赛 Aster vs LBZS BO3 第二场 2月23日
2021/03/11 DOTA
python自动化测试之setUp与tearDown实例
2014/09/28 Python
python使用append合并两个数组的方法
2015/04/28 Python
python3去掉string中的标点符号方法
2019/01/22 Python
django项目中新增app的2种实现方法
2020/04/01 Python
实例教程 纯CSS3打造非常炫的加载动画效果
2014/11/05 HTML / CSS
HTMl5的存储方式sessionStorage和localStorage详解
2014/03/18 HTML / CSS
Cotton On南非:澳洲时尚平价品牌
2018/06/28 全球购物
11月升旗仪式讲话稿
2014/02/15 职场文书
挂靠协议书范本
2014/04/22 职场文书
经典禁毒标语
2014/06/16 职场文书
超市开店计划书
2014/09/15 职场文书
公司员工安全协议书
2014/11/21 职场文书
奔腾年代观后感
2015/06/09 职场文书
失恋33天观后感
2015/06/11 职场文书
2016年七夕爱情寄语
2015/12/04 职场文书
手把手教你使用TensorFlow2实现RNN
2021/07/15 Python
SQL Server Agent 服务无法启动
2022/04/20 SQL Server