用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实现2014火车票查询代码分享
Jan 10 Python
Python实现简单多线程任务队列
Feb 27 Python
Python爬虫之模拟知乎登录的方法教程
May 25 Python
python音频处理用到的操作的示例代码
Oct 27 Python
Python中eval带来的潜在风险代码分析
Dec 11 Python
python时间日期函数与利用pandas进行时间序列处理详解
Mar 13 Python
好的Python培训机构应该具备哪些条件
May 23 Python
使用TensorFlow实现二分类的方法示例
Feb 05 Python
pycharm运行scrapy过程图解
Nov 22 Python
Python3加密解密库Crypto的RSA加解密和签名/验签实现方法实例
Feb 11 Python
Matplotlib使用Cursor实现UI定位的示例代码
Mar 12 Python
2021年pycharm的最新安装教程及基本使用图文详解
Apr 03 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 开发工具
2006/12/06 PHP
Zend framework处理一个http请求的流程分析
2010/02/08 PHP
php实现多维数组中每个单元值(数字)翻倍的方法
2015/02/16 PHP
帝国cms常用标签汇总
2015/07/06 PHP
laravel 实现根据字段不同值做不同查询
2019/10/23 PHP
Javascript 面向对象 重载
2010/05/13 Javascript
jQuery中addClass()方法用法实例
2015/01/05 Javascript
javascript继承的六大模式小结
2015/04/13 Javascript
提高jQuery性能优化的技巧
2015/08/03 Javascript
jQuery javascript获得网页的高度与宽度的实现代码
2016/04/26 Javascript
JS 拼凑字符串的简单实例
2016/09/02 Javascript
JS实现选定指定HTML元素对象中指定文本内容功能示例
2017/02/13 Javascript
快速使用node.js进行web开发详解
2017/04/26 Javascript
基于原生js运动方式关键点的总结(推荐)
2017/10/01 Javascript
LayerClose弹窗关闭刷新方法
2018/08/17 Javascript
通过扫小程序码实现网站登陆功能
2019/08/22 Javascript
webgl实现物体描边效果的方法介绍
2019/11/27 Javascript
原生js+css调节音量滑块
2020/01/15 Javascript
JS数组方法reverse()用法实例分析
2020/01/18 Javascript
[13:16]INFAMOUS vs VGJ T BO3
2018/06/07 DOTA
[03:12]完美世界DOTA2联赛PWL DAY6集锦
2020/11/05 DOTA
[45:17]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第三场 1月9日
2021/03/11 DOTA
Win7上搭建Cocos2d-x 3.1.1开发环境
2014/07/03 Python
python开发中module模块用法实例分析
2015/11/12 Python
Python3处理HTTP请求的实例
2018/05/10 Python
Django后台获取前端post上传的文件方法
2018/05/28 Python
Python将string转换到float的实例方法
2019/07/29 Python
pytorch 实现在预训练模型的 input上增减通道
2020/01/06 Python
离线状态下在jupyter notebook中使用plotly实例
2020/04/24 Python
Python日志器使用方法及原理解析
2020/09/27 Python
波兰品牌鞋履在线商店:Eastend.pl
2020/01/11 全球购物
职业生涯规划设计步骤
2014/01/12 职场文书
2014年教师党员自我评价范文
2014/09/22 职场文书
我的大学四年规划书范文2014
2014/09/26 职场文书
民间借贷协议书范本
2014/10/01 职场文书
政协会议宣传标语
2014/10/09 职场文书