用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 相关文章推荐
Windows下用py2exe将Python程序打包成exe程序的教程
Apr 08 Python
python实现将内容分行输出
Nov 05 Python
python 中的int()函数怎么用
Oct 17 Python
Python实现的字典值比较功能示例
Jan 08 Python
解决Tensorflow使用pip安装后没有model目录的问题
Jun 13 Python
python实现简单flappy bird
Dec 24 Python
Python的log日志功能及设置方法
Jul 11 Python
django 捕获异常和日志系统过程详解
Jul 18 Python
Atom Python 配置Python3 解释器的方法
Aug 28 Python
Python对接 xray 和微信实现自动告警
Sep 17 Python
keras中的卷积层&池化层的用法
May 22 Python
python爬虫把url链接编码成gbk2312格式过程解析
Jun 08 Python
python图像处理 PIL Image操作实例
Apr 09 #Python
Python Pytorch查询图像的特征从集合或数据库中查找图像
Python实现科学占卜 让视频自动打码
Python自动化工具之实现Excel转Markdown表格
Python加密技术之RSA加密解密的实现
Apr 08 #Python
Python识别花卉种类鉴定网络热门植物并自动整理分类
请求模块urllib之PYTHON爬虫的基本使用
You might like
ThinkPHP提交表单时默认自动转义的解决方法
2014/11/25 PHP
php简单分页类实现方法
2015/02/26 PHP
基于PHP实现短信验证码接口(容联运通讯)
2016/09/06 PHP
asp.net和php的区别点总结
2019/10/10 PHP
jquery乱码与contentType属性设置问题解决方案
2013/01/07 Javascript
js获取url参数值的两种方式
2013/09/10 Javascript
JavaScript中的null和undefined区别介绍
2015/01/01 Javascript
JavaScript模拟实现键盘打字效果
2015/06/29 Javascript
iframe中子父类窗口调用JS的方法及注意事项
2015/08/25 Javascript
JavaScript微信定位功能实现方法
2016/11/29 Javascript
详解Vue自定义过滤器的实现
2017/01/10 Javascript
浅谈React + Webpack 构建打包优化
2018/01/23 Javascript
从零开始搭建webpack+react开发环境的详细步骤
2018/05/18 Javascript
vue实现淘宝购物车功能
2020/04/20 Javascript
vue+Element中table表格实现可编辑(select下拉框)
2020/05/21 Javascript
npm ci命令的基本使用方法
2020/09/20 Javascript
python通过opencv实现批量剪切图片
2017/11/13 Python
SVM基本概念及Python实现代码
2017/12/27 Python
python3实现随机数
2018/06/25 Python
浅谈pycharm下找不到sqlalchemy的问题
2018/12/03 Python
Python os.access()用法实例
2019/02/18 Python
基于python二叉树的构造和打印例子
2019/08/09 Python
PyTorch使用cpu加载模型运算方式
2020/01/13 Python
Python进程间通信multiprocess代码实例
2020/03/18 Python
浅谈matplotlib中FigureCanvasXAgg的用法
2020/06/16 Python
eBay美国官网:eBay.com
2020/10/24 全球购物
Sisley法国希思黎美国官方网站:享誉全球的奢华植物美容品牌
2020/06/27 全球购物
小学班长竞选演讲稿
2014/04/24 职场文书
青奥会口号
2014/06/12 职场文书
班级学习雷锋活动总结
2014/07/04 职场文书
医院合作协议书
2014/08/19 职场文书
2015年度护士个人工作总结
2015/04/09 职场文书
婚宴主持词
2015/06/30 职场文书
2015年暑期实践报告范文
2015/07/13 职场文书
莫言获奖感言(全文)
2015/07/31 职场文书
四年级作文之说明文作文
2019/10/14 职场文书