用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标准库中的wave模块绘制乐谱的简单教程
Mar 30 Python
Python中的模块导入和读取键盘输入的方法
Oct 16 Python
django实现同一个ip十分钟内只能注册一次的实例
Nov 03 Python
AI人工智能 Python实现人机对话
Nov 13 Python
python ftp 按目录结构上传下载的实现代码
Sep 12 Python
python引入不同文件夹下的自定义模块方法
Oct 27 Python
Django如何实现网站注册用户邮箱验证功能
Aug 14 Python
使用pandas 将DataFrame转化成dict
Dec 10 Python
Python定时从Mysql提取数据存入Redis的实现
May 03 Python
Python+Django+MySQL实现基于Web版的增删改查的示例代码
May 13 Python
Python调用shell cmd方法代码示例解析
Jun 18 Python
pandas抽取行列数据的几种方法
Dec 13 Python
python图像处理 PIL Image操作实例
Apr 09 #Python
Python Pytorch查询图像的特征从集合或数据库中查找图像
Python实现科学占卜 让视频自动打码
Python自动化工具之实现Excel转Markdown表格
Python加密技术之RSA加密解密的实现
Apr 08 #Python
Python识别花卉种类鉴定网络热门植物并自动整理分类
请求模块urllib之PYTHON爬虫的基本使用
You might like
咖啡磨器 如何选购一台适合家用的意式磨豆机
2021/03/05 新手入门
简单的cookie计数器实现源码
2013/06/07 PHP
php cli换行示例
2014/04/22 PHP
php提高网站效率的技巧
2015/09/29 PHP
关于二级域名下使用一级域名下的COOKIE的问题
2011/11/07 Javascript
关于jQuery参考实例 1.0 jQuery的哲学
2013/04/07 Javascript
js弹出div并显示遮罩层
2014/02/12 Javascript
js控制多图左右滚动切换效果代码分享
2015/08/26 Javascript
利用jQuery中的ajax分页实现代码
2016/02/25 Javascript
JS+CSS3实现超炫的散列画廊特效
2016/07/16 Javascript
聊一聊Vue.js过渡效果
2016/09/07 Javascript
Vue.js基础知识小结
2017/01/13 Javascript
使用vue2.6实现抖音【时间轮盘】屏保效果附源码
2019/04/24 Javascript
Vue监听页面刷新和关闭功能
2019/06/20 Javascript
Python NumPy库安装使用笔记
2015/05/18 Python
Python的math模块中的常用数学函数整理
2016/02/04 Python
windows 10下安装搭建django1.10.3和Apache2.4的方法
2017/04/05 Python
python操作oracle的完整教程分享
2018/01/30 Python
python opencv之SURF算法示例
2018/02/24 Python
python和pygame实现简单俄罗斯方块游戏
2021/02/19 Python
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/27 Python
Pyinstaller打包.py生成.exe的方法和报错总结
2019/04/02 Python
django 多对多表的创建和插入代码实现
2019/09/09 Python
python读取mysql数据绘制条形图
2020/03/25 Python
分享30个新鲜的CSS3打造的精美绚丽效果(附演示下载)
2012/12/28 HTML / CSS
世界汽车零件:World Car Parts
2019/09/04 全球购物
Java如何调用外部Exe程序
2015/07/04 面试题
公益活动策划方案
2014/01/09 职场文书
英语专业自荐书
2014/06/13 职场文书
党员弘扬焦裕禄精神思想汇报
2014/09/10 职场文书
财务整改报告范文
2014/11/05 职场文书
2014年乡镇纪委工作总结
2014/12/19 职场文书
主持人开幕词
2015/01/29 职场文书
2015年学校办公室工作总结
2015/05/26 职场文书
湘江北去观后感
2015/06/15 职场文书
HTML+CSS制作心跳特效的实现
2021/05/26 HTML / CSS