用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实现跨文件全局变量的方法
Jul 07 Python
基于python中staticmethod和classmethod的区别(详解)
Oct 24 Python
Python cookbook(数据结构与算法)同时对数据做转换和换算处理操作示例
Mar 23 Python
Tensorflow之Saver的用法详解
Apr 23 Python
Django Web开发中django-debug-toolbar的配置以及使用
May 06 Python
Python退火算法在高次方程的应用
Jul 26 Python
浅谈python常用程序算法
Mar 22 Python
Python 2/3下处理cjk编码的zip文件的方法
Apr 26 Python
python numpy实现文件存取的示例代码
May 26 Python
python pygame实现滚动横版射击游戏城市之战
Nov 25 Python
Python读取YAML文件过程详解
Dec 30 Python
把Anaconda中的环境导入到Pycharm里面的方法步骤
Oct 30 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线性表的入栈与出栈实例分析
2015/06/12 PHP
PHP中模拟链表和链表的基本操作示例
2016/02/27 PHP
PHP并发查询MySQL的实例代码
2017/08/09 PHP
详解PHP中的8个魔术常量
2020/07/06 PHP
Extjs4 类的定义和扩展实例
2013/06/28 Javascript
JS实现简单的Canvas画图实例
2013/07/04 Javascript
深入理解JavaScript系列(26):设计模式之构造函数模式详解
2015/03/03 Javascript
jQuery根据元素值删除数组元素的方法
2015/06/24 Javascript
JavaScript中ES6 Babel正确安装过程
2016/07/18 Javascript
Ajax异步获取html数据中包含js方法无效的解决方法
2017/02/20 Javascript
JavaScript实现无刷新上传预览图片功能
2017/08/02 Javascript
浅析vue.js数组的变异方法
2018/06/30 Javascript
原生javascript自定义input[type=radio]效果示例
2019/08/27 Javascript
Vue.js 实现地址管理页面思路详解(地址添加、编辑、删除和设置默认地址)
2019/12/11 Javascript
用实例解释Python中的继承和多态的概念
2015/04/27 Python
python django 实现验证码的功能实例代码
2017/05/18 Python
在python中pandas的series合并方法
2018/11/12 Python
如何用python写一个简单的词法分析器
2018/12/18 Python
Python谱减法语音降噪实例
2019/12/18 Python
Python字典添加,删除,查询等相关操作方法详解
2020/02/07 Python
Python切割图片成九宫格的示例代码
2020/03/10 Python
Python任务自动化工具tox使用教程
2020/03/17 Python
Python request中文乱码问题解决方案
2020/09/17 Python
Pycharm操作Git及GitHub的步骤详解
2020/10/27 Python
英国舒适型鞋履品牌:FitFlop
2017/05/17 全球购物
新西兰最大的在线设计师眼镜店:SmartBuyGlasses新西兰
2017/10/20 全球购物
澳大利亚拥有最好的家具和家居用品在线目的地:Nestz
2019/02/23 全球购物
介绍一下SQL中union,intersect和minus
2012/04/05 面试题
经典英文广告词
2014/03/18 职场文书
大学英语专业求职信
2014/06/21 职场文书
工艺技术员岗位职责
2015/02/04 职场文书
2015年综治维稳工作总结
2015/04/07 职场文书
工伤事故赔偿协议书
2015/08/06 职场文书
青年文明号创建口号大全
2015/12/25 职场文书
Pytorch实现图像识别之数字识别(附详细注释)
2021/05/11 Python
vue二维数组循环嵌套方式 循环数组、循环嵌套数组
2022/04/24 Vue.js