為什麼琴鍵這樣排列? 從數學角度探討音律系統

當你彈奏鋼琴或吉他時,是否曾好奇為什麼鋼琴有 88 個琴鍵還有吉他指板琴衍的距離是怎麼定義出來的?為什麼一個八度有 5 個黑鍵 7 個白鍵,一共 12 個音符,而不是 10 個或 15 個?這些問題的答案藏在數學的優美公式中

鋼琴鍵盤的排列展示了12平均律系統

自從去年年底離職後,我終於有足夠的時間去關注那些過去因工作忙碌而無法靜心觀察、思考,甚至完成的事。我特別喜歡逛 Hacker News,上面總能發現許多有趣且發人深省的文章。

回想高中時期,我曾經投入大量時間鑽研電吉他的技巧與樂理。或許正是這股狂熱,讓我在讀到這篇 天才的文章 時,立刻想寫一篇這樣的文章:為什麼琴鍵是這樣排列的? 從數學角度探討音律系統

就讓我們從數學的角度,一起深入探索這個橫跨數學與音樂領域的迷人課題。

畢達哥拉斯的音樂探索:數學中的和諧比例

整數比與和諧音程的發現

約莫 2,500 年前,古希臘數學家兼哲學家 畢達哥拉斯(Pythagoras) 發現聲音的和諧與簡單的整數比有關。

畢達哥拉斯研究單弦琴上的音程比例

畢達哥拉斯相信宇宙中的一切都可以用整數或整數比表示。在音樂領域他尋找能夠產生和諧聲音的頻率,並發現某些頻率比例的聲音聽起來特別悅耳。這些關鍵比例包括:

  • 1:2(八度,Octave):當頻率為 $f$ 的音與頻率為 $2f$ 的音一起演奏時,聽起來格外協調,下面音檔是A3, A4, A5

  • 2:3(純五度,Perfect Fifth):繼八度之後最和諧的音程,其實電吉他的power chord也是這個,下面音檔是A4, E5

純五度循環與畢達哥拉斯壞音:數學的必然矛盾

畢達哥拉斯發現,可以用純五度關係建構更多的音:

  1. 從基準音(如C)開始
  2. 計算其純五度(頻率乘以3/2)得到新音(G)
  3. 若新音頻率超過原音的2倍,則將其頻率除以2
  4. 重複操作,理論上應能得到完整的音階系統

五度圈展示了12個音如何通過純五度關係連接

如果從C開始,經過12次純五度計算後,理論上應回到C的某個八度。但事實上:

$$\left(\frac{3}{2}\right)^{12} \approx 129.746$$

而$2^7 = 128$,兩者相差約1.36%。這意味著12個純五度疊加後的音高與7個八度後的音高並不完全相同!這個微小但不可忽視的差距被稱為「畢達哥拉斯壞音」(Pythagorean Comma)。

為什麼不完美?數學本質的必然結果

從數學本質上看,問題可歸結為:是否存在整數 $n$ 和 $m$,使得:

$$\left(\frac{3}{2}\right)^n = 2^m$$

取對數後可得:

$$\frac{n}{m} = \frac{\log(2)}{\log\left(\frac{3}{2}\right)} \approx 1.7095…$$

根據 Gelfond–Schneider theorem,$\frac{\log(2)}{\log\left(\frac{3}{2}\right)}$ 是一個無理數,這意味著不存在任何整數 $n$ 和 $m$ 能使等式精確成立。這不是調音方法的問題,而是數學本質決定的必然結果——就像無法用有限小數精確表示π值一樣。

但 $\frac{12}{7} \approx 1.7142$ 是對 $1.709$ 的一個相當好的近似,這解釋了為什麼西方音樂選擇了12音系統。

12等律:數學與藝術的絕妙平衡

為解決「畢達哥拉斯壞音」問題,音樂家和數學家發明了12等律(12-Tone Equal Temperament):

  1. 將八度平均分成12個完全相等的半音
  2. 每個半音的頻率比為 $2^{1/12} \approx 1.059463$
  3. 12個半音後恰好回到原音的八度:$(2^{1/12})^{12} = 2$

這種平均律的核心原理是對八度進行等比分割,使每個半音間隔完全相等。與畢達哥拉斯音階不同,12平均律不再堅持純五度的完美比例,而是追求系統的一致性和轉調的便利性。

在12平均律中,純五度的頻率比變為 $2^{7/12} \approx 1.498$,與理想的 $\frac{3}{2} = 1.5$ 相差約0.11%。這種微小的調整是一種精妙的數學妥協,讓所有調性都能使用,且能自由轉調。

12等律的數學基礎

在 12 等律中,每個半音的頻率比是:

$$
r = \sqrt[12]{2} \approx 1.059463…
$$

這是個無理數,因此我們不可能找到精確的整數比來表示所有音程。然而,我們希望某些音程(如純五度、純四度、大三度)在 12 等律中有良好的近似,這就涉及如何用有理數逼近無理數,所以需要丟番圖逼近來讓有理數近似無理數

12等律能夠較好地近似多個重要的純律音程:

音程 純律比例 12等律比例 誤差 (%)
八度 (Octave) 2.000000 2.000000 0.000000
純五度 (Perfect Fifth) 1.500000 1.498307 -0.112862
純四度 (Perfect Fourth) 1.333333 1.334840 0.112989
大三度 (Major Third) 1.250000 1.259921 0.793684
小三度 (Minor Third) 1.200000 1.189207 -0.899407
大六度 (Major Sixth) 1.666667 1.681793 0.907570
小六度 (Minor Sixth) 1.600000 1.587401 -0.787434
大二度 (Major Second) 1.125000 1.122462 -0.225596
小二度 (Minor Second) 1.066667 1.059463 -0.675335
增四度/減五度 (Tritone) 1.400000 1.414214 1.015254

12等律與純律音程的比較視覺化

數學的可能性:其他等律系統

數學探索不止於12等律,還有其他可能的音律系統:

19等律(19-TET)

  • 每半音頻率比:$2^{1/19} \approx 1.0371$
  • 純五度近似:$2^{11/19} \approx 1.4937$,誤差僅0.42%
  • 數論逼近:$\frac{19}{11} \approx 1.7273$,對比實際比值 $\frac{\log(2)}{\log(3/2)} \approx 1.7095$,誤差約 1.04%

31等律(31-TET)

  • 每音頻率比:$2^{1/31} \approx 1.0226$
  • 純五度近似:$2^{18/31} \approx 1.4955$,誤差僅0.3%
  • 數論逼近:$\frac{31}{18} \approx 1.7222$,對比實際比值 $\frac{\log(2)}{\log(3/2)} \approx 1.7095$,誤差約 0.74%
  • 幾乎完美還原純律中的許多音程,但實際應用複雜

最後寫個程式看看有沒有更低誤差的等律吧

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import numpy as np
import matplotlib.pyplot as plt

def improved_harmony_score(n, plot=False):
"""
計算n等分音律系統的和諧度評分
"""
intervals = {
"純八度": {"ratio": 2/1, "weight": 10.0},
"純五度": {"ratio": 3/2, "weight": 8.0},
"純四度": {"ratio": 4/3, "weight": 7.0},
"大三度": {"ratio": 5/4, "weight": 6.0},
"小三度": {"ratio": 6/5, "weight": 5.0},
"大六度": {"ratio": 5/3, "weight": 4.0},
"小六度": {"ratio": 8/5, "weight": 3.5},
"大二度": {"ratio": 9/8, "weight": 3.0},
"小七度": {"ratio": 9/5, "weight": 2.5},
"大七度": {"ratio": 15/8, "weight": 2.0}
}

errors = {}
total_weighted_error = 0
total_weight = sum(interval["weight"] for interval in intervals.values())

for name, interval in intervals.items():
ratio = interval["ratio"]
weight = interval["weight"]

steps = np.arange(1, n)
et_ratios = 2 ** (steps / n)

target_cents = 1200 * np.log2(ratio)
et_cents = 1200 * np.log2(et_ratios)
cents_errors = np.abs(et_cents - target_cents)

min_error = np.min(cents_errors)
best_step = steps[np.argmin(cents_errors)]
perceptual_error = 1 - np.exp(-0.1 * min_error**1.5)
weighted_error = perceptual_error * weight

errors[name] = {
"純律比": ratio,
"等律步數": best_step,
"等律比": 2 ** (best_step / n),
"誤差(音分)": min_error,
"感知誤差": perceptual_error,
"權重": weight,
"加權誤差": weighted_error
}

total_weighted_error += weighted_error

normalized_error = total_weighted_error / total_weight
score = 1000 * (1 - normalized_error)

return score, errors

# 計算 2~50 等分音律的和諧度評分
results = {}
for n in range(2, 51):
score, _ = improved_harmony_score(n)
results[n] = score

# 輸出結果
for n, score in results.items():
print(f"{n}-等分: {score:.2f}")

計算結果表格

等分數 和諧度評分
2 0.000
3 1.178
4 0.363
5 0.138
6 28.359
7 1.715
8 0.363
9 1.180
10 3.776
11 29.144
12 253.200
19 250.865
22 144.688
31 324.254
34 438.195
41 439.427
46 454.806

從表中可以看到,12、19、31、34、41、46 等等等分音律的和諧度評分較高

在音樂歷史中,19-TET, 31-TET 等音律系統曾被一些作曲家和理論家探索和使用。​然而,34-TET、41-TET和46-TET等音律系統在歷史上較少被採用

答案顯而易見,讀者可以自己想想為什麼

以下是一些採用不同等分音律(TET)系統創作的音樂作品推薦:

19等分音律(19-TET):

《Truth on a Bus》

《Deluge》

《Dagdröm 2》

31等分音律(31-TET):

《Music fur die 31-Stufige Orgel》

結語:數學與音樂的完美交融

12等律的選擇是數學與藝術的絕妙平衡。它犧牲了純音程的完美和諧,換取了較低的複雜度與調性間的平等和轉調的自由。

從數學角度看,音律系統的選擇涉及丟番圖近似、連分數理論和誤差最小化等深刻概念,這些數學工具幫助我們理解為什麼某些數字在音律理論中如此特殊。