用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登录pop3邮件服务器接收邮件的方法
Apr 30 Python
Python实现七彩蟒蛇绘制实例代码
Jan 16 Python
Sublime开发python程序的示例代码
Jan 24 Python
Python操作Oracle数据库的简单方法和封装类实例
May 07 Python
python内置数据类型之列表操作
Nov 12 Python
python使用zip将list转为json的方法
Dec 31 Python
python解析含有重复key的json方法
Jan 22 Python
Pyqt5 基本界面组件之inputDialog的使用
Jun 25 Python
pandas 层次化索引的实现方法
Jul 06 Python
python字典的遍历3种方法详解
Aug 10 Python
PyTorch中 tensor.detach() 和 tensor.data 的区别详解
Jan 06 Python
python 下划线的不同用法
Oct 24 Python
python图像处理 PIL Image操作实例
Apr 09 #Python
Python Pytorch查询图像的特征从集合或数据库中查找图像
Python实现科学占卜 让视频自动打码
Python自动化工具之实现Excel转Markdown表格
Python加密技术之RSA加密解密的实现
Apr 08 #Python
Python识别花卉种类鉴定网络热门植物并自动整理分类
请求模块urllib之PYTHON爬虫的基本使用
You might like
PHP5.0正式发布 不完全兼容PHP4 新增多项功能
2006/10/09 PHP
PHP 编程安全性小结
2010/01/08 PHP
隐性调用php程序的方法
2015/06/13 PHP
PHP实现的同步推荐操作API接口案例分析
2016/11/30 PHP
Laravel构建即时应用的一种实现方法详解
2017/08/31 PHP
js压缩工具 yuicompressor 使用教程
2010/03/31 Javascript
ImageZoom 图片放大镜效果(多功能扩展篇)
2010/04/14 Javascript
基于jquery自己写tab滑动门(通用版)
2012/10/30 Javascript
jquery实现隐藏与显示动画效果/输入框字符动态递减/导航按钮切换
2013/07/01 Javascript
jquery easyui滚动条部分设置介绍
2013/09/12 Javascript
js中 计算两个日期间的工作日的简单实例
2016/08/08 Javascript
微信小程序 Record API详解及实例代码
2016/09/30 Javascript
通过jsonp获取json数据实现AJAX跨域请求
2017/01/22 Javascript
vue使用Axios做ajax请求详解
2017/06/07 Javascript
vue.js $refs和$emit 父子组件交互的方法
2017/12/20 Javascript
在nginx上部署vue项目(history模式)的方法
2017/12/28 Javascript
微信小程序下拉加载和上拉刷新两种实现方法详解
2019/09/05 Javascript
布同 Python中文问题解决方法(总结了多位前人经验,初学者必看)
2011/03/13 Python
python二叉树的实现实例
2013/11/21 Python
利用Python查看目录中的文件示例详解
2017/08/28 Python
Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
2018/03/15 Python
对Python中gensim库word2vec的使用详解
2018/05/08 Python
Python爬虫爬取煎蛋网图片代码实例
2019/12/16 Python
python自动下载图片的方法示例
2020/03/25 Python
python数据库编程 ODBC方式实现通讯录
2020/03/27 Python
Django的ListView超详细用法(含分页paginate)
2020/05/21 Python
python中rc1什么意思
2020/06/19 Python
Django如何实现防止XSS攻击
2020/10/13 Python
详解python中的异常和文件读写
2021/01/03 Python
css3针对移动端卡顿问题的解决(动画性能优化)
2020/02/14 HTML / CSS
俄罗斯的精英皮具:Wittchen
2018/01/29 全球购物
印尼第一大家居、生活和家具电子商务:Ruparupa
2019/11/25 全球购物
志愿者活动总结报告
2014/06/27 职场文书
办公室主任个人对照检查材料思想汇报
2014/10/11 职场文书
应届毕业生自荐信
2015/03/04 职场文书
JS中一些高效的魔法运算符总结
2021/05/06 Javascript