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

小鹿同学
小鹿同学
发布时间:2026-10-15| 6人浏览过
原创

本文详细解析钢琴88个琴键音高的计算原理,基于国际基准音440Hz及十二平均律规律,利用Python程序实现频率推导。通过定义键盘结构、计算基础频率与倍率,最终输出所有琴键的精确频率数据,为音频处理及音乐理论分析提供技术参考。

钢琴键盘的音高分布遵循特定的数学规律,具体表现如下。

  • 频率每翻倍一次,音高上升一个八度。
  • 国际通用的基准音高为440Hz,在钢琴键盘上对应小字一组的A(la)。

小字一组A键在钢琴键盘上的位置如下图所示。

基于上述两条规律,即可计算出钢琴全部88个琴键的音高频率(单位:Hz)。

钢琴采用标准的十二平均律,即每12个琴键后频率翻倍。因此,相邻两个琴键之间的频率比值是固定的,已知任意琴键音高即可推算出下一个琴键的音高。

计算钢琴最左侧琴键的音高

已知小字一组A的频率为440Hz,而钢琴最左侧琴键同样为A音,两者之间相隔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
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)

查看最终输出结果。

通过上述步骤,我们成功计算出了所有琴键的音高频率。

以上为本文的全部内容,希望这对大家的学习有所帮助,也欢迎大家继续支持本站。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。