使用Python程序计算钢琴88个键的音高

目录
  • 计算钢琴最左边琴键的音高
  • 计算每两个琴键的频率倍数
  • python程序实现
    • 定义钢琴键盘
    • 计算每个琴键的音高
    • 展示琴键音高

我们知道了钢琴键盘的音高是其实是有规律的,如下

  • 频率翻倍,高一个八度
  • 国际基准音:440Hz,钢琴键盘上对应小字一组的la

小字一组的la可以看下图

根据这两个规律,我们就可以计算出所有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)

输出一下

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这个数组保存了每个琴键的音高

展示琴键音高

df.replace(data)

查看一下

这样就计算出了所有琴键的音高

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • python制作简单计算器功能

    本文实例为大家分享了python实现简单计算器功能的具体代码,供大家参考,具体内容如下 效果如图: 主要思路: 用列表保存按下的键,按下等于,转换为字符串,利用内置函数eval计算字符串的值. 代码: from tkinter import *   W = 280 #窗口宽度 H = 460 #窗口高度 process_H = 110 #显示运算过程的标签高度 result_H = 50   #显示运算结果的标签高度 msFont = '微软雅黑' #字体 fontSize = 20 #字体大小

  • Python tkinter实现计算器功能

    本文实例为大家分享了vue + element ui实现锚点定位的具体代码,供大家参考,具体内容如下 python版本:3.5 一.计算器的功能描述 今天我们用python来实现一个计算器.首先,计算器分为两部分:一部分是初级页面,包括简单的加减乘除四则运算.第二部分:是高级页面,包括常见的三角函数.对数.括号.等参数运算.其次,在初级页面,能进行简单的初级运算,并在初级页面设置高级按钮,并让其高亮显示,用户点击高级按钮后,会切换到高级页面.来到高级页面,让扩展的功能高亮显示,同时可以参加高级运

  • Python绘制计算机CPU占有率变化的折线图

    本篇文章将实现用Python获取系统信息CPU占有率并将其变化绘制成折线图. 第一步:获取系统CPU占有率信息 psutil模块是专门获取系统信息的模块,在该模块里有一个cpu_percent()方法是用来获取系统CPU占有率的.我们每隔1s获取一次CPU占有率,并将获取到的信息存储在指定文件中,将其保存起来,本案例中我将文件命名为cpu.txt 则第一步获取信息的代码如下: # 获取系统信息的模块 import psutil import  time   # m每隔一秒绘制CPU的占有率;  

  • 用Python做个自动化弹钢琴脚本实现天空之城弹奏

    目录 一.核心功能设计 二.实现步骤 1. 演奏函数 2. 添加演奏旋律多线程 3. 手指演奏曲谱 4. 钢琴模拟演奏 前言 小时候一直有一个想成为钢琴家的梦想,最近在网上看到了一个开源的钢琴演奏网页autopiano,可以支持键盘按键弹奏.鼠标点击弹奏. 首先一起来看看最终实现的演奏效果: 下面,我们就开始介绍如何实现这个自动化弹钢琴脚本的. 一.核心功能设计 总体的实现相对是比较简单的,主要分为以下4步实现: 实现演奏函数,通过手指及时间间隔模拟弹钢琴 添加各个演奏旋律线程,通过多线程模拟双

  • 用Python制作简单的钢琴程序的教程

    录一段音频,把它的音高改变50次并把每一个新的音频匹配到键盘的一个键位,你就能把电脑变成一架钢琴! 一段音频可以被编码为一组数值的数组(或者列表),像这样: 我们可以在数组中每隔一秒拿掉一秒的值来将这段音频的速度变成两倍. 如此我们不仅将音频的长度减半了,而且我们还将它的频率翻倍了,这样使得它拥有比原来更高的音高(pitch). 相反地,假如我们将数组中每个值重复一次,我们将得到一段更慢,周期更长,即音高更低的音频: 这里提供一个可以按任意系数改变音频速度的任意简单的Python函数: impo

  • Python语言实现科学计算器

    本文实例为大家分享了Python语言实现科学计算器的具体代码,供大家参考,具体内容如下 自学Python语言一个月,还是小白,发一个科学计算器的代码,希望大家批评指正,共勉嘛. calculator.py from tkinter import * from functools import partial from calculate import * # 生成计算器主界面 def buju(root):     menu = Menu(root)  # 菜单     submenu1 = M

  • python计算寄送包裹重量的实现过程

    目录 1. 编写程序实现: (1)寄送包裹小于5kg (2)邮寄包裹重量 (3)用if嵌套完成 此为平时日常老师所布置的作业. 1. 编写程序实现: (1)寄送包裹小于5kg 每公斤0.5元,大于等于5kg,超出5公斤部分,按照每公斤0.8元计算,输入重量,输出应付金额. 程序粘贴: weight=eval(input("请输入重量:")) if weight<5.0: money=weight*0.5 else: money=5.0*0.5+(weight-5.0)*0.8 p

  • python实现简易计算器功能

    本文实例为大家分享了python实现简易计算器功能的具体代码,供大家参考,具体内容如下 一.功能目标 用户输入一个类似  1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))  这样的表达式,假设表达式里面除了包含空格.'+'.'-'.'*'.'/'和括号再无其他特殊符号,然后自己动手写代码解析其中的表达式,实现加减乘除,最后得出的结果与真实的计算机所算的结果必须一致. 二.解题思路 1.为了分开运算符和数

  • 使用Python程序计算钢琴88个键的音高

    目录 计算钢琴最左边琴键的音高 计算每两个琴键的频率倍数 python程序实现 定义钢琴键盘 计算每个琴键的音高 展示琴键音高 我们知道了钢琴键盘的音高是其实是有规律的,如下 频率翻倍,高一个八度 国际基准音:440Hz,钢琴键盘上对应小字一组的la 小字一组的la可以看下图 根据这两个规律,我们就可以计算出所有88个琴键的音高(单位是频率). 钢琴键盘是标准的十二平均律,12个键后频率翻倍,那么每两个琴键之间的频率倍数是固定的,也就是可以根据一个琴键的音高,计算出下一个琴键的音高. 计算钢琴最

  • Python实现计算函数或程序执行时间

    目录 一.需求说明 二.需求分析 三.实现方法 3.1.获取执行时间方式一 3.2.获取执行时间方式二 一.需求说明 在Python程序的开发过程中,一些程序需要获取函数或程序的开始时间.结束时间和时间间隔等内容用来分析和处理内容 二.需求分析 涉及到函数或程序的运行时间,那么必然需要用到时间模块,只用知道时间模块中对应的时间信息获取即可进响应的时间计算. 三.实现方法 3.1.获取执行时间方式一 ①导入time模块 #导入time模块 import time ②获取开始时间.结束时间.时间间隔

  • 提升Python程序运行效率的6个方法

    Python是一个很酷的语言,因为你可以在很短的时间内利用很少的代码做很多事情.不仅如此,它还能轻松地支持多任务,比如多进程等.Python批评者有时会说Python执行缓慢.本文将尝试介绍6个技巧,可加速你的Python应用程序. 1.让关键代码依赖于外部包 虽然Python让许多编程任务变得容易,但它可能并不总能为紧急的任务提供最佳性能.你可以为紧急的任务使用C.C++或机器语言编写的外部包,这样可以提高应用程序的性能.这些包都是不能跨平台的,这意味着你需要根据你正在使用的平台,寻找合适的包

  • Python程序员面试题 你必须提前准备!(答案及解析)

    在发布<Python程序员面试,这些问题你必须提前准备!>一文后,应广大程序员朋友的强烈要求,小编就Python程序员面试必备问题整理了一份参考答案,希望能对准备换工作的程序员朋友有所帮助.如对答案有疑问,欢迎留言讨论. 小编将这些面试问题大致分为四类: 什么(what)?如何做(how)?说区别/谈优势(difference)以及实践操作(practice). What? 1. 什么是Python? Python是一种编程语言,它有对象.模块.线程.异常处理和自动内存管理.可以加入与其他语言

  • 教你如何编写、保存与运行Python程序的方法

    第一步 接下来我们将看见如何在 Python 中运行一个传统的"Hello World"程序.Python教程本章将会教你如何编写.保存与运行 Python 程序. 通过 Python 来运行的你的程序有两种方法--使用交互式解释器提示符或直接运行一个源代码文件.我们将了解如何使用他们二者的功能. 使用解释器提示符 在你的操作系统中打开终端(Terminal)程序(正如我们先前在安装章节所讨论过的那样)然后通过输入python3并按下[enter]键来打开 Python 提示符(Pyt

  • 在交互式环境中执行Python程序过程详解

    前言 相信接触过Python的伙伴们都知道运行Python脚本程序的方式有多种,目前主要的方式有:交互式环境运行.命令行窗口运行.开发工具上运行等,其中在不同的操作平台上还互不相同.今天,小编讲些Python基础的内容,以Windows下交互式环境为依托,演示Python程序的运行. 一般来说,顺利安装Python之后,有两种方式可以进入Python交互性环境.一种是在Python自带的IDLE中直接打开交互式窗口,如下图所示: 另一种是打开开始菜单,输入cmd之后,进入命令行窗口,之后输入Py

  • 编写python程序的90条建议

    1. 首先 建议1.理解 Pythonic 概念--详见 Python 中的<Python之禅> 建议2.编写 Pythonic 代码 (1)避免不规范代码,比如只用大小写区分变量.使用容易混淆的变量名.害怕过长变量名等.有时候长的变量名会使代码更加具有可读性. (2)深入学习 Python 相关知识,比如语言特性.库特性等,比如Python演变过程等.深入学习一两个业内公认的 Pythonic 的代码库,比如Flask等. 建议3:理解 Python 与 C 的不同之处,比如缩进与 {},单

  • 使用C语言扩展Python程序的简单入门指引

    一.简介 Python是一门功能强大的高级脚本语言,它的强大不仅表现在其自身的功能上,而且还表现在其良好的可扩展性上,正因如此,Python已经开始受到越来越多人的青睐,并且被屡屡成功地应用于各类大型软件系统的开发过程中. 与其它普通脚本语言有所不同,Python程序员可以借助Python语言提供的API,使用C或者C++来对Python进行功能性扩展,从而即可以利用Python方便灵活的语法和功能,又可以获得与C或者C++几乎相同的执行性能.执行速度慢是几乎所有脚本语言都具有的共性,也是倍受人

  • Python实现计算文件夹下.h和.cpp文件的总行数

    平时自己写了很多代码,但从没好好计算总共写了多少行,面试时被问起来,就傻了...闲来无事,写个python程序来统计下 import os ################################################################################ def calcLine(baseDir): lineCount = 0 try: for fileName in os.listdir(baseDir): fullPath = baseDir +

  • Python科学计算之NumPy入门教程

    前言 NumPy是Python用于处理大型矩阵的一个速度极快的数学库.它允许你在Python中做向量和矩阵的运算,而且很多底层的函数都是用C写的,你将获得在普通Python中无法达到的运行速度.这是由于矩阵中每个元素的数据类型都是一样的,这也就减少了运算过程中的类型检测. 矩阵基础 在 numpy 包中我们用数组来表示向量,矩阵和高阶数据结构.他们就由数组构成,一维就用一个数组表示,二维就是数组中包含数组表示. 创建 # coding: utf-8 import numpy as np a =

随机推荐