用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 相关文章推荐
django 自定义用户user模型的三种方法
Nov 18 Python
Python简单连接MongoDB数据库的方法
Mar 15 Python
Python numpy 常用函数总结
Dec 07 Python
[原创]python爬虫(入门教程、视频教程)
Jan 08 Python
pyhton列表转换为数组的实例
Apr 04 Python
pandas 按照特定顺序输出的实现代码
Jul 10 Python
符合语言习惯的 Python 优雅编程技巧【推荐】
Sep 25 Python
python 实现读取一个excel多个sheet表并合并的方法
Feb 12 Python
三步实现Django Paginator分页的方法
Jun 11 Python
Pandas时间序列:重采样及频率转换方式
Dec 26 Python
Django 路由层URLconf的实现
Dec 30 Python
使用tensorflow根据输入更改tensor shape
Jun 23 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编码规范之注释和文件结构说明
2010/07/09 PHP
php去除字符串换行符示例分享
2014/02/13 PHP
php反射类ReflectionClass用法分析
2016/05/12 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
jquery中交替点击事件的实现代码
2014/02/14 Javascript
深入分析jQuery的ready函数是如何工作的(工作原理)
2015/12/17 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记6)
2015/12/20 Javascript
JavaScript的Ext JS框架中的GridPanel组件使用指南
2016/05/21 Javascript
同步异步动态引入js文件的几种方法总结
2016/09/23 Javascript
浅谈js使用in和hasOwnProperty获取对象属性的区别
2017/04/27 Javascript
vue 项目地址去掉 #的方法
2018/10/20 Javascript
node和vue实现商城用户地址模块
2018/12/05 Javascript
微信小程序实现展示评分结果功能
2019/02/15 Javascript
Python使用htpasswd实现基本认证授权的例子
2014/06/10 Python
python实现基于两张图片生成圆角图标效果的方法
2015/03/26 Python
python中常用检测字符串相关函数汇总
2015/04/15 Python
python实现的系统实用log类实例
2015/06/30 Python
python 网络爬虫初级实现代码
2016/02/27 Python
PyQt5每天必学之事件与信号
2018/04/20 Python
python 堆和优先队列的使用详解
2019/03/05 Python
基于python 微信小程序之获取已存在模板消息列表
2019/08/05 Python
Tensorflow 卷积的梯度反向传播过程
2020/02/10 Python
python实现xlwt xlrd 指定条件给excel行添加颜色
2020/07/14 Python
python爬虫爬取图片的简单代码
2021/01/18 Python
Python读写Excel表格的方法
2021/03/02 Python
ECCO爱步加拿大官网:北欧丹麦鞋履及皮具品牌
2017/07/08 全球购物
C#面试题
2016/05/06 面试题
Laravel的加密解密与哈希实例讲解
2021/03/24 PHP
通用求职信范文模板分享
2013/12/27 职场文书
2015迎新晚会活动总结
2015/07/16 职场文书
导游词之无锡丝业博物馆
2019/11/12 职场文书
浅析NIO系列之TCP
2021/06/15 Java/Android
在项目中使用redis做缓存的一些思路
2021/09/14 Redis
Redis之RedisTemplate配置方式(序列和反序列化)
2022/03/13 Redis
Python学习之异常中的finally使用详解
2022/03/16 Python
Z-Order加速Hudi大规模数据集方案分析
2022/03/31 Servers