用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 append、extend与insert的区别
Oct 13 Python
Pycharm学习教程(1) 定制外观
May 02 Python
将tensorflow的ckpt模型存储为npy的实例
Jul 09 Python
python批量修改图片大小的方法
Jul 24 Python
python实现朴素贝叶斯算法
Nov 19 Python
Python微信操控itchat的方法
May 31 Python
pyQt5实时刷新界面的示例
Jun 25 Python
pytorch实现特殊的Module--Sqeuential三种写法
Jan 15 Python
python GUI库图形界面开发之PyQt5布局控件QVBoxLayout详细使用方法与实例
Mar 06 Python
30行Python代码实现高分辨率图像导航的方法
May 22 Python
使用py-spy解决scrapy卡死的问题方法
Sep 29 Python
python 实现定时任务的四种方式
Apr 01 Python
python图像处理 PIL Image操作实例
Apr 09 #Python
Python Pytorch查询图像的特征从集合或数据库中查找图像
Python实现科学占卜 让视频自动打码
Python自动化工具之实现Excel转Markdown表格
Python加密技术之RSA加密解密的实现
Apr 08 #Python
Python识别花卉种类鉴定网络热门植物并自动整理分类
请求模块urllib之PYTHON爬虫的基本使用
You might like
星际争霸 Starcraft 游戏介绍
2020/03/14 星际争霸
图文介绍PHP添加Redis模块及连接
2015/07/28 PHP
在b/s开发中经常用到的javaScript技术
2006/08/23 Javascript
jquery实现在页面加载完毕后获取图片高度或宽度
2014/06/16 Javascript
javascript图片预加载完整实例
2015/12/10 Javascript
教你JS中的运算符乘方、开方及变量格式转换
2016/08/09 Javascript
详解vue-cli开发环境跨域问题解决方案
2017/06/06 Javascript
bootstrap table表格客户端分页实例
2017/08/07 Javascript
AngularJS ui-router刷新子页面路由的方法
2018/07/23 Javascript
vue实现的仿淘宝购物车功能详解
2019/01/27 Javascript
Vue 微信端扫描二维码苹果端却只能保存图片问题(解决方法)
2020/01/19 Javascript
基于Vue的侧边目录组件的实现
2020/02/05 Javascript
2020京东618叠蛋糕js脚本(亲测好用)
2020/06/02 Javascript
[04:12]第二届DOTA2亚洲邀请赛选手传记-Newbee.Sccc
2017/04/03 DOTA
[01:00:14]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第二场 2月28日
2021/03/11 DOTA
python写的一个文本编辑器
2014/01/23 Python
Python中的fileinput模块的简单实用示例
2015/07/09 Python
使用Python的Twisted框架构建非阻塞下载程序的实例教程
2016/05/25 Python
Python的Flask框架及Nginx实现静态文件访问限制功能
2016/06/27 Python
详解pandas使用drop_duplicates去除DataFrame重复项参数
2019/08/01 Python
CSS3 3D立方体效果示例-transform也不过如此
2016/12/05 HTML / CSS
美国专业级皮肤病和spa品质护肤品的高级零售网站:SkinCareRx
2017/02/06 全球购物
马来西亚奢侈品牌购物商城:Valiram 247
2020/09/29 全球购物
JAVA中的关键字有什么特点
2014/03/07 面试题
C,C++的几个面试题小集
2013/07/13 面试题
Java文件和目录(IO)操作
2014/08/26 面试题
如何写你的创业计划书
2014/01/07 职场文书
优秀女职工事迹材料
2014/02/06 职场文书
高中军训感言400字
2014/02/24 职场文书
《登鹳雀楼》教学反思
2014/04/09 职场文书
高中升旗仪式演讲稿
2014/09/09 职场文书
校园安全广播稿范文
2014/09/25 职场文书
大足石刻导游词
2015/02/02 职场文书
4S店销售内勤岗位职责
2015/04/13 职场文书
小学思想品德教学反思
2016/02/24 职场文书
Redis5之后版本的高可用集群搭建的实现
2021/04/27 Redis