用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实现的HTTP并发测试完整示例
Apr 23 Python
python简单分割文件的方法
Jul 30 Python
Python中.py文件打包成exe可执行文件详解
Mar 22 Python
Python 实现链表实例代码
Apr 07 Python
Python决策树分类算法学习
Dec 22 Python
Python进程间通信 multiProcessing Queue队列实现详解
Sep 23 Python
详解在python操作数据库中游标的使用方法
Nov 12 Python
python3 BeautifulSoup模块使用字典的方法抓取a标签内的数据示例
Nov 28 Python
使用 Supervisor 监控 Python3 进程方式
Dec 05 Python
PyTorch里面的torch.nn.Parameter()详解
Jan 03 Python
Selenium获取登录Cookies并添加Cookies自动登录的方法
Dec 04 Python
Python使用protobuf序列化和反序列化的实现
May 19 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 mail to 配置详解
2014/01/16 PHP
PHP简单生成缩略图相册的方法
2015/07/29 PHP
基于PHP实现商品成交时发送短信功能
2016/05/11 PHP
Javascript调试工具(下载)
2007/01/09 Javascript
JavaScript Eval 函数使用
2010/03/23 Javascript
javascript中的关于类型转换的性能优化
2010/12/14 Javascript
jquery聚焦文本框与扩展文本框聚焦方法
2012/10/12 Javascript
原生js实现查找/添加/删除/指定元素的class
2013/04/12 Javascript
js 获取和设置css3 属性值的实现方法
2013/05/06 Javascript
js导出格式化的excel 实例方法
2013/07/17 Javascript
jQuery异步验证用户名是否存在示例代码
2014/05/21 Javascript
js实现新年倒计时效果
2015/12/10 Javascript
jQuery实现简单的图片查看器
2020/09/11 Javascript
javascript实现checkbox复选框实例代码
2016/01/10 Javascript
原生JS下拉加载插件分享
2016/12/26 Javascript
JS闭包用法实例分析
2017/03/27 Javascript
VUE组件中的 Drawer 抽屉实现代码
2019/08/06 Javascript
[01:02:47]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
Python简单实现TCP包发送十六进制数据的方法
2016/04/16 Python
Python网络编程 Python套接字编程
2017/09/13 Python
python 扩展print打印文件路径和当前时间信息的实例代码
2019/10/11 Python
python的range和linspace使用详解
2019/11/27 Python
python文件编写好后如何实践
2020/07/07 Python
松本清官方海外旗舰店:日本最大的药妆连锁店
2017/11/21 全球购物
英国家用电器购物网站:Hughes
2018/02/23 全球购物
SmartBuyGlasses德国:购买太阳镜和眼镜
2019/08/20 全球购物
公益广告宣传方案
2014/02/28 职场文书
《理想的风筝》教学反思
2014/04/11 职场文书
2014年党员承诺书范文
2014/05/20 职场文书
党在我心中的演讲稿
2014/09/13 职场文书
运动会广播稿200字(10篇)
2014/10/12 职场文书
2015最新学生自我评价范文
2015/03/03 职场文书
护士医德考评自我评价
2015/03/03 职场文书
导游词之沈阳清昭陵
2019/12/28 职场文书
python tkinter Entry控件的焦点移动操作
2021/05/22 Python
全面盘点MySQL中的那些重要日志文件
2021/11/27 MySQL