Featured image of post 纯律:振动,五度相生,三分损益

纯律:振动,五度相生,三分损益

弦振动方程

从最简单的形式出发:

$$ \frac{\partial^2 u}{\partial t^2}= \frac{T}{\rho} \frac{\partial^2 u}{\partial x^2} $$

设弦长为$L$,则固定边界条件下的特解为

$$ u(x,t) = \sum_{n=1}^{\infty} A_n \sin\left(\frac{n\pi x}{L}\right) \cos(\omega_n t + \phi_n) $$

其中

$$ \begin{aligned} \omega_n = \frac{n\pi c}{L} \\ c = \sqrt{\frac{T}{\rho}} \end{aligned} $$

$A_n$和弦的初始状态有关,他的推导有点复杂,但是它的大小随着$n$的增大迅速衰减,大致如下

$$ A_n \propto \frac{1}{n^2} $$

弦一维的位移会影响琴码,继而在共鸣箱中发出声音,在空气中按照三维的波方程传播,最后在耳膜处接收到(这里也有一个阻尼振动方程)。物理过程比较繁琐,但是实际接收到的频率和弦振动的频率是差不多的,于是我直接通过一维的弦震动方程来研究听到的声音。

五度相生

从弦震动方程很容易看出,一根弦在振动的时候发出的声音的频率和弦的长度成反比关系,而且频率并不单一,频率由一个基频和他的整数倍组成,这称之为泛音列。而由基频$f_0$发出的音,称之为C。

显然,如果把一根弦的长度减半,则基频翻倍,而它发出的泛音列和减半前依旧十分相似。翻倍后的音还是C,有一堆相似的音是不够的,需要其他音。

于是把弦一份为三,$L/3$发出基频为$3f_0$的声音,和原本的相比,重叠的部分虽然少了一些,但还是很多,听起来还是很和谐,我们称之为G。但是音有点高了,于是在$L/3$的基础上把弦长翻倍,等同于把弦长取$2L/3$,得到了一个低了一些但是十分相似的G。

于是我们有了两种得到音的手段:一个是把弦长减半,一个是把弦长取$2/3$,两种手段结合,就能得到各种各样和谐的音。具体来说,我们不断的把一根弦取$2/3$,(相当于基频乘$3/2$),如果得到的弦不足原本的一半,则把弦长翻倍(相当于基频除2,这么做保证了得到的音依旧在$(f_0,2f_0)$的区间。

不断反复,得到了这个:

五度次数音名频率比计算结果频率比
0C11/1
1G$(3/2)$3/2
2D$((3/2)^2=9/4) → ÷2$9/8
3A$((3/2)^3=27/8) → ÷2$27/16
4E$((3/2)^4=81/16) → ÷4$81/64
5B$((3/2)^5=243/32) → ÷4$243/128
6F♯$((3/2)^6=729/64) → ÷8$729/512
7C♯$((3/2)^7=2187/128) → ÷8$2187/1024
8G♯$((3/2)^8=6561/256) → ÷16$6561/4096
9D♯$((3/2)^9=19683/512) → ÷32$19683/16384
10A♯$((3/2)^{10}=59049/1024) → ÷32$59049/32768
11F$((3/2)^{11}=177147/2048) → ÷64$177147/131072

我们当然希望,不断的进行这个操作,可以回到基频。但是这是不可能的,这相当于让

$$ 3^m=2^{n+m} $$

因为质因数的分解唯一,所以这个等式永远不可能成立(除非m,n=0)。推到第十二个的时候,得到:

$$ \frac{(3/2)^{12}}{2^7} = \frac{531441}{524288} \approx 1.01364 $$

已经非常接近基频了,而下一个这么接近会在第51次的时候出现,其误差如下:

$$ \frac{(3/2)^{53}}{2^{31}} = \frac{19383245667680019896796723}{19342813113834066795298816} \approx 1.002090314041 $$

如果不想音名和化学周期表一样多的话,那还是用十二音阶吧。我让gpt写一个程序可以来模拟五度 计算:

 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
from fractions import Fraction

def fifth_cycle(max_n=60):
    k =0
    r = Fraction(1,1)

    for n in range(1, max_n+1):

        r *= Fraction(3,2)
        
        # 折回一个八度
        while r >= 2:
            r /= 2
            k += 1
        while r < 1:
            r *= 2
            k -= 1

        error = float(r - 1)
        
        if error < 0.02:
            print(
                f"n={n:3d}  "
                f"ratio={r}  "
                f"value={float(r):.12f}  "
                f"error={error:.12f}  "
                f"k={k:3d}"
            )

fifth_cycle(500)

三分损益

五度相生律是毕达哥拉斯学派研究出来的,而在中国古代,也有着一样的东西,这便是三分损益法。三分损益法直接研究弦长,三分,便是把弦分为三份;损,把弦长缩短一份,相当于弦长乘2/3,频率乘3/2;益把弦长增长一份,相当于弦长乘4/3,频率乘3/4。不断的使用损和益,也能得到十二个音。

黄钟律名毕达哥拉斯音名操作频率比
黄钟C起点1
林钟G3/2
太簇D9/8
南吕A27/16
姑洗E81/64
应钟B243/128
蕤宾F♯ / G♭729/512
大吕C♯ / D♭2187/2048
夷则G♯ / A♭6561/4096
夹钟D♯ / E♭19683/16384
无射A♯ / B♭59049/32768
仲吕F177147/131072
清黄钟C(?)531441/524288

古人辛辛苦苦算了十二次,算到最后发现黄钟不能还原,于是给了个名字叫清黄钟。西汉有个叫京房的人不信邪,继续算,整了个六十律,运行我上面的程序会发现在65次的时候会有一个近似,但实际上还是回归不了。到了南朝宋有个叫钱乐之的,整出来了三百六十律,相当于黄钟推到359次的一个近似。

律名有了,音名也得有,于是就有了五音:

音阶顺序五声律名西方近似频率关系
1黄钟C1
2太簇D(9/8)
3姑洗E(81/64)
4林钟G(3/2)
5南吕A(27/16)

五音的音高是相对的而不是固定的,律名的音高则是固定的,所以不只有黄钟宫,还有太簇宫、姑洗宫,类似转调的操作。

三分损益法由管仲发明,管仲不仅搞经济有一手,玩音乐也厉害。相传管仲被押上囚车,靠着唱歌给押囚车的人打气,让车速加快,让鲁国的国君来不及反悔,才得以顺利活着回到齐国。这个故事来自《东周列国志》,可能有些虚构的成分,但多少也能看出来管仲在音乐上的造诣。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计