本文从一根弦出发,首先推导了描述其振动的偏微分方程,再用行波法逐步求得通解,之后继续考虑初始条件和边界条件得到特解,并用傅里叶级数对结果进行了展开。

接着,本文讨论了驻波的性质,用传递函数对声音传播过程进行了建模,并介绍了人的听觉系统,解释了基频决定音高、拨弦位置影响音色的原因。

最后,本文研究了乐理知识背后的数学原理,包括调律、和弦和节奏。

全文很长,可以挑感兴趣的阅读。

振动弦

众所周知,声音由振动产生。而对于大多数乐器,这种振动最初都是弦的振动。

波动方程

不过,弦的振动毕竟较点的振动更为复杂,因此,我们要对问题进行简化:振动只能是竖直方向的。

该假设使得弦上每一点的横坐标被固定。于是,我们可用函数 u(x,t)u(x, t) 来表示弦的振动,其中 tt 为时间,xx 为点的横坐标,uu 为点的纵位移。下图展示了某一时刻的 u(x)u(x),其中弦的两端被固定

  \begin{tikzpicture}[x=1pt, y=1pt, font=\normalsize]
  \draw[gray, thin, ->] (0,0) -- (0,250) node[above] {$u(x)$};
  \draw[gray, thin, ->] (0,0) -- (400,0) node[right] {$x$};
  \node[gray] at (0,-10) {$0$};
  \node[gray] at (360,-10) {$L$};

  \draw[black, thick] (0,0) .. controls (150,220) and (300,60) .. (360,0);

  \coordinate (P) at (60,70);
  \filldraw[black] (P) circle (3pt) node[above] {$P$};
  \draw[gray, dashed] (60, 70) -- (60, 0);
  \coordinate (Q) at (120,105);
  \filldraw[black] (Q) circle (3pt) node[above] {$Q$};
  \draw[gray, dashed] (120, 105) -- (120, 0);
  \draw[black, <->] (60,20) -- (120,20) node[above, midway] {$\Delta x$};

  \draw[blue, line width=2pt] (P) .. controls (80,85) and (100,98) .. (Q);

  \draw[red, thick, ->] (P) -- ++(-28,-28) node[below right] {$\mathbf{T}_1$};
  \draw[red, thick, ->] (Q) -- ++(36,10) node[above right] {$\mathbf{T}_2$};

  \draw[black, thin, dashed] (60,70) -- (110,70);
  \draw[purple, thin] (70,70) arc (0:-130:10) node[pos=0, below right] {$\theta_1$};
  \draw[black, thin, dashed] (120,105) -- (170,105);
  \draw[purple, thin] (130,105) arc (0:18:10) node[pos=0, below right] {$\theta_2$};
\end{tikzpicture}

现在我们对弦上一小段平衡时长度为 Δx\Delta x 的弧进行受力分析。显然 2ut2\frac{\partial^2 u}{\partial t^2} 就是这段弧的加速度。若用 μ\mu 表示弦的线密度,则据牛顿第二定律,可得

ΔF=μΔx2ut2 \Delta F = \mu\Delta x \frac{\partial^2 u}{\partial t^2}

我们假设了弦不会水平运动,因此这段弧的两端点处,其张力之差只能是竖直方向的。用 TT 表示张力的大小,θ\theta 表示与横轴的夹角,由于张力沿切线方向,竖直方向的分量为 TsinθT\sin\theta,从而

ΔF=Δ(Tsinθ) \Delta F = \Delta (T\sin\theta)

消去 Δ\Delta 得到

Δ(Tsinθ)Δx=μ2ut2 \frac{\Delta (T\sin\theta)}{\Delta x} = \mu \frac{\partial^2 u}{\partial t^2}

如果振动产生的 θ\theta 足够小,那么 sinθ\sin\theta 就可近似为 tanθ\tan\theta。又因为张力沿着切线,所以 tanθ=ux\tan\theta = \frac{\partial u}{\partial x},从而

Δ(Tux)Δx=μ2ut2 \frac{\Delta (T\frac{\partial u}{\partial x})}{\Delta x} = \mu \frac{\partial^2 u}{\partial t^2}

Δx0\Delta x \to 0,得到

x(Tux)=μ2ut2 \frac{\partial}{\partial x} \left( T \frac{\partial u}{\partial x} \right) = \mu \frac{\partial^2 u}{\partial t^2}

我们只考虑 TTμ\mu 为常数的情况,因此

a22ux2=2ut2 a^2 \frac{\partial^2 u}{\partial x^2} = \frac{\partial^2 u}{\partial t^2}

其中 a=Tμa = \sqrt{\frac{T}{\mu}}。这就是一维的波动方程。

通解

对于波动方程,多数人可能比较了解分离变量法,该方法的主要步骤如下

  1. 假设 u(x,t)u(x, t) 可分离为只含 xx 的函数和只含 tt 的函数之积,即 u(x,t)=v(x)w(t)u(x, t) = v(x)w(t)
  2. u(x,t)=v(x)w(t)u(x, t) = v(x)w(t) 带入原方程,分别求解 v(x)v(x)w(t)w(t)
  3. 得到 u(x,t)u(x, t) 并验证假设是否正确

也就是说,分离变量法在得到解之前先假设了解的形式。我认为这非常不自然,因此选用行波法来求解,不过这要求更多的注意力。

注意到,我们可引入两个新的变量

ξ=x+atη=xat \begin{align*} \xi = x + a t \\ \eta = x - a t \end{align*}

分别求偏导

ξx=1,ξt=aηx=1,ηt=a \begin{align*} \frac{\partial \xi}{\partial x} =1 &, \frac{\partial \xi}{\partial t} = a\\ \frac{\partial \eta}{\partial x} =1 &, \frac{\partial \eta}{\partial t} = -a \end{align*}

由多元函数链式法则得

ux=uξξx+uηηx=uξ+uηut=uξξt+uηηt=auξauη \begin{align*} \frac{\partial u}{\partial x} &= \frac{\partial u}{\partial \xi}\frac{\partial \xi}{\partial x} + \frac{\partial u}{\partial \eta}\frac{\partial \eta}{\partial x} = \frac{\partial u}{\partial \xi} + \frac{\partial u}{\partial \eta} \\ \frac{\partial u}{\partial t} &= \frac{\partial u}{\partial \xi}\frac{\partial \xi}{\partial t} + \frac{\partial u}{\partial \eta}\frac{\partial \eta}{\partial t} = a\frac{\partial u}{\partial \xi} -a\frac{\partial u}{\partial \eta} \end{align*}

这里的 uu 是任意的函数,因此我们可以用偏微分算子来简化后续的计算

x(u)=(ξ+η)(u)x=ξ+ηt(u)=(aξaη)(u)t=aξaη \begin{align*} \frac{\partial}{\partial x}(u) = \left(\frac{\partial}{\partial \xi} + \frac{\partial}{\partial \eta}\right)(u) &\Rightarrow \frac{\partial }{\partial x} = \frac{\partial}{\partial \xi} + \frac{\partial}{\partial \eta} \\ \frac{\partial}{\partial t}(u) = \left(a\frac{\partial}{\partial \xi} -a \frac{\partial}{\partial \eta}\right)(u) &\Rightarrow \frac{\partial }{\partial t} = a \frac{\partial}{\partial \xi} -a \frac{\partial}{\partial \eta} \end{align*}

用算子继续偏微分,得到

2ux2=x(uξ+uη)=(ξ+η)(uξ+uη)=2uξ2+22uξη+2uη22ut2=t(auξauη)=(aξaη)(auξauη)=a22uξ22a22uξη+a22uη2 \begin{align*} \frac{\partial^2 u}{\partial x^2} &= \frac{\partial}{\partial x} \left(\frac{\partial u}{\partial \xi} + \frac{\partial u}{\partial \eta}\right) \\ &= \left( \frac{\partial}{\partial \xi} + \frac{\partial}{\partial \eta} \right) \left(\frac{\partial u}{\partial \xi} + \frac{\partial u}{\partial \eta}\right) \\ &= \frac{\partial^2 u}{\partial \xi^2} + 2\frac{\partial^2 u}{\partial \xi \partial \eta} + \frac{\partial^2 u}{\partial \eta^2} \\ \frac{\partial^2 u}{\partial t^2} &= \frac{\partial}{\partial t} \left( a \frac{\partial u}{\partial \xi} -a \frac{\partial u}{\partial \eta} \right) \\ &= \left( a\frac{\partial}{\partial \xi} -a \frac{\partial}{\partial \eta} \right) \left( a \frac{\partial u}{\partial \xi} -a \frac{\partial u}{\partial \eta} \right) \\&= a^2\frac{\partial^2 u}{\partial \xi^2} - 2a^2\frac{\partial^2 u}{\partial \xi \partial \eta} + a^2\frac{\partial^2 u}{\partial \eta^2} \end{align*}

代回到原方程中,有

a2(2uξ2+22uξη+2uη2)=a22uξ22a22uξη+a22uη2 a^2 \left(\frac{\partial^2 u}{\partial \xi^2} + 2\frac{\partial^2 u}{\partial \xi \partial \eta} + \frac{\partial^2 u}{\partial \eta^2} \right) = a^2\frac{\partial^2 u}{\partial \xi^2} - 2a^2\frac{\partial^2 u}{\partial \xi \partial \eta} + a^2\frac{\partial^2 u}{\partial \eta^2}

化简得

2uξη=0 \frac{\partial^2 u}{\partial \xi \partial \eta} = 0

这可以看作是 ξ(uη)=0\frac{\partial}{\partial \xi} \left( \frac{\partial u}{\partial \eta} \right) = 0η(uξ)=0\frac{\partial}{\partial \eta} \left( \frac{\partial u}{\partial \xi} \right) = 0,即 uη\frac{\partial u}{\partial \eta} 不依赖于 ξ\xiuξ\frac{\partial u}{\partial \xi} 不依赖于 η\eta,于是设

uξ=v(ξ)uη=w(η) \begin{align*} \frac{\partial u}{\partial \xi} = v(\xi) \\ \frac{\partial u}{\partial \eta} = w(\eta) \end{align*}

由全微分公式得

du=uξdξ+uηdη=v(ξ)dξ+w(η)dη \mathrm{d}u = \frac{\partial u}{\partial\xi}\mathrm{d}\xi + \frac{\partial u}{\partial\eta}\mathrm{d}\eta = v(\xi)\mathrm{d}\xi + w(\eta)\mathrm{d}\eta

从而

u(ξ,η)=v(ξ)dξ+w(η)dη=f(ξ)+g(η) u(\xi, \eta) = \int v(\xi)\mathrm{d}\xi + \int w(\eta)\mathrm{d}\eta = f(\xi) + g(\eta)

ξ=x+at\xi = x+atη=xat\eta = x- at 代回去,有

u(x,t)=f(x+at)+g(xat) u(x,t) = f(x+at) + g(x−at)

这就是波动方程的通解——两个沿相反方向传播的行波之和:f(x+at)f(x+at) 以速度 aa 正向传播,而 g(xat)g(x−at) 以速度 aa 反向传播。

初始条件

弦振动不同于一般的波动,其有一些特殊的限制条件。下列公式分别表示左边界固定、右边界固定、初始速度和初始位移

{u(0,t)=0u(L,t)=0ut(x,0)=ψ(x)u(x,0)=φ(x) \begin{cases} u(0, t) = 0 \\ u(L, t) = 0 \\ \frac{\partial u}{\partial t}(x, 0) = \psi(x) \\ u(x, 0) = \varphi(x) \end{cases}

我们先解决后两个初始条件。将 t=0t=0 代入通解有

u(x,0)=f(x)+g(x)=φ(x) u(x,0) = f(x) + g(x) = \varphi(x)

u(x,t)u(x,t)tt 的偏导

ut(x,t)=af(x+at)ag(xat) \frac{\partial u}{\partial t}(x, t) = a f'(x+at) - a g'(x-at)

注意 ffgg 分别由 v(ξ)dξ\int v(\xi)\mathrm{d}\xiw(η)dη\int w(\eta)\mathrm{d}\eta 得来,都是单变量函数,因此上面的导数记号是无歧义的。接着把 t=0t=0 代入 ut\frac{\partial u}{\partial t}

ut(x,0)=af(x)ag(x)=ψ(x) \frac{\partial u}{\partial t}(x, 0) = a f'(x) - a g'(x) = \psi(x)

从而得到

f(x)g(x)=1aψ(x) f'(x) - g'(x) = \frac{1}{a}\psi(x)

对两侧同时积分

f(x)g(x)=1a0xψ(s)ds+C f(x) - g(x) = \frac{1}{a}\int_{0}^{x} \psi(s) \mathrm{d}s + C

将上式与 f(x)+g(x)=φ(x)f(x) + g(x) = \varphi(x) 联立,得

f(x)=12φ(x)+12a0xψ(s)ds+C2g(x)=12φ(x)12a0xψ(s)dsC2 \begin{align*} f(x) &= \frac{1}{2}\varphi(x) + \frac{1}{2a}\int_{0}^{x} \psi(s)\mathrm{d}s + \frac{C}{2} \\ g(x) &= \frac{1}{2}\varphi(x) - \frac{1}{2a}\int_{0}^{x} \psi(s)\mathrm{d}s - \frac{C}{2} \end{align*}

ffgg 代回到 u(x,t)u(x,t)

u(x,t)=12[φ(x+at)+φ(xat)]+12a[0x+atψ(s)ds0xatψ(s)ds] u(x,t) = \frac12\left[ \varphi(x+at) + \varphi(x-at) \right] + \frac{1}{2a}\left[ \int_{0}^{x+at} \psi(s)\mathrm{d}s - \int_{0}^{x-at} \psi(s)\mathrm{d}s \right]

合并积分项

u(x,t)=12[φ(x+at)+φ(xat)]+12axatx+atψ(s)ds u(x,t) = \frac12\left[ \varphi(x+at) + \varphi(x-at) \right] + \frac{1}{2a} \int_{x-at}^{x+at} \psi(s)\mathrm{d}s

这就是达朗贝尔公式

边界条件

不过我们还有两个边界条件没用上,难道这些条件是多余的吗?试着把它们代入,发现

u(0,t)=12[φ(at)+φ(at)]+12aatatψ(s)ds=0u(L,t)=12[φ(L+at)+φ(Lat)]+12aLatL+atψ(s)ds=0 \begin{align*} u(0,t) &= \frac12\left[ \varphi(at) + \varphi(-at) \right] + \frac{1}{2a} \int_{-at}^{at} \psi(s)\mathrm{d}s = 0 \\ u(L,t) &= \frac12\left[ \varphi(L+at) + \varphi(L-at) \right] + \frac{1}{2a} \int_{L-at}^{L+at} \psi(s)\mathrm{d}s = 0 \end{align*}

这里 φ\varphi 同时在 atatat-atL+atL+atLatL-at 上取值,而 ψ\psi 也需要在 [at,at][-at, at][Lat,L+at][L-at, L+at] 上取值。但不论 φ\varphi 还是 ψ\psi 都只在 [0,L][0, L] 上定义,公式却要求我们考虑弦边界以外的初始条件。

为什么会发生这种情况?在物理上可以这样理解:如果区间是无界的,那么传播出去的波动就不会再回来影响到自身;但由于区间有限,波动被反射,从而产生了更复杂的影响。因此对于有限区间 [0,L][0,L],我们要考虑到反射,在数学上这种方法就是延拓。

再列出一下刚才得到的结果

φ(at)+φ(at)+1aatatψ(s)ds=0φ(L+at)+φ(Lat)+1aLatL+atψ(s)ds=0 \begin{align*} \varphi(at) + \varphi(-at) + \frac{1}{a} \int_{-at}^{at} \psi(s)\mathrm{d}s &= 0 \\ \varphi(L+at) + \varphi(L-at) + \frac{1}{a} \int_{L-at}^{L+at} \psi(s)\mathrm{d}s &= 0 \end{align*}

可以发现 φ\varphiψ\psi 都是关于 00LL 中心对称的。因此,我们把 φ\varphiψ\psi 关于 00LL 作奇延拓

φ~(x)={φ(x)0xLφ(x)Lx<0φ(2Lx)L<x2L \tilde\varphi(x) = \begin{cases} \varphi(x) & 0\le x\le L \\ -\varphi(-x) & -L\le x<0 \\ -\varphi(2L-x) & L< x\le 2L \end{cases}
ψ~(x)={ψ(x)0xLψ(x)Lx<0ψ(2Lx)L<x2L \tilde\psi(x) = \begin{cases} \psi(x) & 0\le x\le L \\ -\psi(-x) & -L\le x<0 \\ -\psi(2L-x) & L< x\le 2L \end{cases}

但这仍然不够。当 tt\to \infty 时,x+atx+atxatx-at 会分别趋于 ++\infty-\infty,而 φ\varphiψ\psi 都需要在 x+atx+atxatx-at 上取值,因此它们的定义域必须为整个实数轴。

DD 表示函数的定义域,观察前几次延拓后 DD 的变化

  1. 先作关于 00 的奇延拓使 DD[0,L][0, L] 变为 [L,L][-L, L]
  2. 再作关于 LL 的奇延拓使 DD[L,L][-L, L] 变为 [L,3L][-L, 3L]
  3. 继续作关于 00 的奇延拓 DD[L,3L][-L, 3L] 变为 [3L,3L][-3L, 3L]

注意到,关于 00 的奇延拓多出的定义域,如果关于 LL 再作奇延拓,则那部分多出的定义域还会继续多出定义域;反之也一样。这就是说,只要把“作一次 00 的奇延拓,再作一次 LL 的奇延拓”这件事反复进行,最终函数便以 2L2L 为周期延拓到了整个实数轴上。

使用最终被延拓出来的函数,u(x,t)u(x,t) 便不再有问题了

u(x,t)=12[φ~(x+at)+φ~(xat)]+12axatx+atψ~(s)ds u(x,t) = \frac12\left[ \tilde\varphi(x+at) + \tilde\varphi(x-at) \right] + \frac{1}{2a}\int_{x-at}^{x+at} \tilde\psi(s)\mathrm{d}s

级数展开

但我们还要做一些更有趣的事情。经过不断地奇延拓,我们可以断言,φ~(x)\tilde\varphi(x)ψ~(x)\tilde\psi(x) 是以 2L2L 为周期的奇函数。如果我们对其进行傅里叶展开,则级数只有正弦项

φ~(x)=n=1φnsinnπxL,φn=2L0Lφ(s)sinnπsLdsψ~(x)=n=1ψnsinnπxL,ψn=2L0Lψ(s)sinnπsLds \begin{align*} \tilde\varphi(x) = \sum_{n=1}^{\infty}\varphi_n\sin\frac{n\pi x}{L} &, \varphi_n = \frac{2}{L}\int_0^L\varphi(s)\sin\frac{n\pi s}{L}\mathrm{d}s \\ \tilde\psi(x) = \sum_{n=1}^{\infty}\psi_n\sin\frac{n\pi x}{L} &, \psi_n=\frac{2}{L}\int_0^L\psi(s)\sin\frac{n\pi s}{L}\mathrm{d}s \end{align*}

把此级数代入之前的公式。先来处理含 φ~\tilde\varphi 的部分,利用正弦函数的和差化积,得到

sinnπ(x+at)L+sinnπ(xat)L=2sinnπxLcosnπatL \sin\frac{n\pi(x+at)}{L}+\sin\frac{n\pi(x-at)}{L}=2\sin\frac{n\pi x}{L}\cos\frac{n\pi a t}{L}

因此

12[φ~(x+at)+φ~(xat)]=12n=1φn[sinnπ(x+at)L+sinnπ(xat)L]=n=1φncosnπatLsinnπxL \begin{align*} & \frac12[\tilde\varphi(x+at)+\tilde\varphi(x-at)] \\ =& \frac12\sum_{n=1}^\infty\varphi_n\left[\sin\frac{n\pi(x+at)}{L}+\sin\frac{n\pi(x-at)}{L}\right] \\ =& \sum_{n=1}^\infty\varphi_n\cos\frac{n\pi a t}{L}\sin\frac{n\pi x}{L} \end{align*}

再来处理含 ψ~\tilde\psi 的部分,先对单一正弦项积分,再使用余弦函数的和差化积,可得

xatx+atsinnπsLds=Lnπ[cosnπ(xat)Lcosnπ(x+at)L]=2LnπsinnπxLsinnπatL \begin{align*} & \int_{x-at}^{x+at}\sin\frac{n\pi s}{L}\mathrm{d}s \\ =& \frac{L}{n\pi} \left[\cos\frac{n\pi(x-at)}{L}-\cos\frac{n\pi(x+at)}{L}\right] \\ =& \frac{2L}{n\pi}\sin\frac{n\pi x}{L}\sin\frac{n\pi a t}{L} \end{align*}

于是

12axatx+atψ~(s)ds=12an=1ψn(xatx+atsinnπsLds)=12an=1ψn2LnπsinnπxLsinnπatL=n=1LnπaψnsinnπatLsinnπxL \begin{align*} & \frac1{2a} \int_{x-at}^{x+at} \tilde\psi(s)\mathrm{d}s \\ =& \frac1{2a} \sum_{n=1}^{\infty} \psi_n \left( \int_{x-at}^{x+at} \sin\frac{n\pi s}{L}\mathrm{d}s \right) \\ =& \frac1{2a}\sum_{n=1}^\infty\psi_n\frac{2L}{n\pi}\sin\frac{n\pi x}{L}\sin\frac{n\pi a t}{L} \\ =& \sum_{n=1}^\infty\frac{L}{n\pi a}\psi_n\sin\frac{n\pi a t}{L}\sin\frac{n\pi x}{L} \end{align*}

合并结果,得到

u(x,t)=n=1φncosnπatLsinnπxL+n=1LnπaψnsinnπatLsinnπxL=n=1(φncosnπatL+LnπaψnsinnπatL)sinnπxL \begin{align*} u(x,t) &= \sum_{n=1}^\infty\varphi_n\cos\frac{n\pi a t}{L}\sin\frac{n\pi x}{L} + \sum_{n=1}^\infty\frac{L}{n\pi a}\psi_n\sin\frac{n\pi a t}{L}\sin\frac{n\pi x}{L} \\ & =\sum_{n=1}^\infty\left(\varphi_n\cos\frac{n\pi a t}{L}+ \frac{L}{n\pi a}\psi_n\sin\frac{n\pi a t}{L}\right)\sin\frac{n\pi x}{L} \end{align*}

如果再令 An=φnA_n=\varphi_nBn=LnπaψnB_n=\frac{L}{n\pi a}\psi_n,那么最后解的形式就和分离变量法的完全一样了

u(x,t)=n=1(AncosnπatL+BnsinnπatL)sinnπxL u(x,t) = \sum_{n=1}^{\infty} \left( A_n \cos\frac{n\pi a t}{L} + B_n \sin\frac{n\pi a t}{L} \right) \sin\frac{n\pi x}{L}

通常可以认为 ψ=0\psi = 0,这意味着我们松开弦的那一刻弦是没有初始速度的。于是 Bn=0B_n = 0,得到了更优美的式子

u(x,t)=n=1AncosnπatLsinnπxL u(x,t) = \sum_{n=1}^{\infty} A_n \cos\frac{n\pi a t}{L} \sin\frac{n\pi x}{L}

其中

An=2L0Lφ(s)sinnπsLds A_n = \frac{2}{L}\int_0^L\varphi(s)\sin\frac{n\pi s}{L}\mathrm{d}s

和松开弦时的初始位移有关。

驻波

上面的结果有非常非常多有趣的地方。不过我们先从驻波开始说起。公式中的每一项

Ancos(nπaLt)sin(nπLx) A_n \cos\left(\frac{n\pi a}{L}t\right) \sin\left(\frac{n\pi}{L}x\right)

都是一个驻波。这种叠加的驻波在空间和时间上都有规律。

空间规律

和空间有关的项为 sin(nπLx)\sin\left(\frac{n\pi}{L}x\right)。由于

sin(nπLx)=0nπLx=kπx=kLn,kN \begin{align*} & \sin\left(\frac{n\pi}{L}x\right) = 0 \\ \Rightarrow & \frac{n\pi}{L}x=k\pi \\ \Rightarrow & x = \frac{kL}{n}, k \in \mathbb{N} \\ \end{align*}

因此弦上存在一些点永远都不会振动。这些位置称为节点,而

sin(nπLx)=1nπLx=kπ+π2=(2k+1)π2x=(2k+1)L2n,kN \begin{align*} & \sin\left(\frac{n\pi}{L}x\right) = 1 \\ \Rightarrow & \frac{n\pi}{L}x = k\pi + \frac{\pi}{2} = \frac{(2k+1)\pi}{2}\\ \Rightarrow & x = \frac{(2k+1)L}{2n}, k \in \mathbb{N} \\ \end{align*}

因此弦上还有些位置振动的振幅最大,且就夹在节点之间,这被称为腹点。

下图展示了 n=1,2,3n=1,2,3 时的节点和腹点

  \begin{tikzpicture}[x=1pt, y=1pt, font=\small]
  \foreach \n in {1,2,3} {
    \begin{scope}[yshift=-\n*120]
      \draw[gray, thin] (0,0) -- (400,0);

      \draw[domain=0:400, samples=200, thick, black]
        plot (\x, {60*sin((\n*pi*\x)/400 r)});

      \foreach \i in {0,...,\n} {
        \fill[red] ({\i*400/\n}, 0) circle (2pt);
      }

      \pgfmathsetmacro{\mj}{\n-1}
      \foreach \j in {0,...,\mj} {
        \fill[blue] ({(\j+0.5)*400/\n}, 0) circle (2pt);
      }
    \end{scope}
  }
\end{tikzpicture}

可以很容易地推算出来,弦的两个端点总是节点,且每个驻波总是有 n+1n+1 个节点和 nn 个腹点。

总之,驻波的空间规律就是:节点永不振动,腹点振动最剧烈,而二者在弦上交替着出现。

时间规律

和时间有关的项为 cos(nπaLt)\cos\left(\frac{n\pi a}{L}t\right),可以发现相位是恒定的,和 xx 无关。这意味着弦上所有点的相位相同,会同时达到最大位移、同时经过零点。

并且,cos(nπaLt)\cos\left(\frac{n\pi a}{L}t\right) 还揭示了一个事实——弦的振动存在着最低的频率。tt 的系数为角频率 wn=nπaLw_n = \frac{n\pi a}{L},由其与频率的关系可以得到

fn=wn2π=na2L f_n = \frac{w_n}{2\pi} = \frac{na}{2L}

对于 n=1n=1 的项,其频率称为基频,即

f1=a2L f_1=\frac{a}{2L}

对于 n2n\ge 2 的项,其频率皆为基频的整数倍,被称作泛音或谐波

fn=nf1 f_n = n f_1

基频决定了我们听到的音高。至于其原因,后文马上就会解释。

感知

真实的声波是无穷多个驻波的叠加,人的听觉系统要怎么进行处理呢?

声音传播

在振动发生到人产生听觉之间,还有许多复杂的过程要考虑。

首先是声音的传播。弦振动会挤压和拉伸周围的空气分子,挤压产生高压区,即密部,拉伸会产生低压区,即疏部。高压区会向外推挤相邻的空气,低压区则会拉拽相邻的空气,由此形成一密一疏互相交替的波动,从而声音可以向四面八方传播。因此声波是一种疏密波,通过这种方式经由空气最后被人接收。

然而,事情并没有这么简单。诸如琴体共鸣、环境、人耳外部结构等因素都会影响到传播。不过,这一切虽然看起来无法分析,但其实都可以在一个理想的假设,即满足线性时不变性质的前提下,统一进行建模

H(jw)=Hi(jw)×He(jw)×Hh(jw) H(jw) = H_{i}(jw) \times H_{e}(jw) \times H_{h}(jw)

其中 jj 为虚数单位,ww 表示角频率,HiH_iHeH_eHhH_h 分别是乐器、环境和头部的传递函数,而 HH 是总的影响。用 Pi(jw)P_i(jw) 表示弦振动产生的声压的傅里叶变换,用 Po(jw)P_o(jw) 表示最终接收到的声压的傅里叶变换,则

Po(jw)=H(jw)×Pi(jw) P_o(jw) = H(jw) \times P_i(jw)

这样就可以直接考虑从琴弦产生振动到听者鼓膜处接收到声压的整个物理链路。

对于一个线性时不变系统,传递函数可以表示为

H(jw)=H(jw)ejH(jw) H(jw) = |H(jw)| e^{j\angle H(jw)}

Po(jw)=H(jw)ejH(jw)×Pi(jw) P_o(jw) = |H(jw)| e^{j\angle H(jw)} \times P_i(jw)

这意味着,声压中频率为 ww 的分量,其振幅要乘上 H(jw)|H(jw)|,其相位要加上 H(jw)\angle H(jw)。也就是说,在频域上,声压产生了振幅畸变和相位畸变:不同频率分量的振幅、相位可能被不同程度地改变。

传递函数 HH 通过傅里叶逆变换可以得到脉冲响应

h(t)=F1[H(jw)]=12πH(jw)ejwtdw h(t) = \mathcal{F}^{-1}[H(jw)] = \frac{1}{2\pi} \int_{-\infty}^{\infty} H(jw) e^{jwt} \mathrm{d}w

Pi(jw)P_i(jw)Po(jw)P_o(jw) 也可以通过傅里叶逆变换还原回 pi(t)p_i(t)po(t)p_o(t),这两者分别表示弦振动产生的声压和最终接收到的声压。

在时域上,输出声压信号是脉冲响应与输入声压信号的卷积,即

po(t)=h(t)pi(t)=pi(τ)h(tτ)dτ p_o(t) = h(t) \ast p_i(t) = \int_{-\infty}^{\infty} p_i(\tau) h(t - \tau) \mathrm{d}\tau

这种影响可以理解为信号在时间上的扩散,能够产生滤波、混响等各种效果。

  \begin{tikzpicture}[x=1pt, y=1pt, font=\normalsize, >=stealth]
  \draw[thick, rounded corners, gray] (0,0) rectangle (100,50) node[midway] {$p_i(t)$};
  \draw[thick, rounded corners, gray] (0,150) rectangle (100,200) node[midway] {$P_i(jw)$};
  \draw[thick, rounded corners, gray] (200,150) rectangle (300,200) node[midway] {$P_o(jw)$};
  \draw[thick, rounded corners, gray] (200,0) rectangle (300,50) node[midway] {$p_o(t)$};

  \draw[thick, ->] (50,50) -- (50,150) node[midway, left] {$\mathcal{F}$};
  \draw[thick, ->] (100,175) -- (200,175) node[midway, above] {$\times H(jw)$};
  \draw[thick, ->] (250,150) -- (250,50) node[midway, left] {$\mathcal{F}^{-1}$};
  \draw[thick, ->] (100,25) -- (200,25) node[midway, above] {$\ast h(t)$};
\end{tikzpicture}

总之,不管过程怎么样,只要整个系统是线性时不变的,就可以认为其只会影响到各个频率分量的振幅和相位。即使这可能导致某些频率分量直接消失,但也绝不会创造出新的频率。于是我们最后得到的结果为

po(t)=n=1Cncos(nπaLt+ϕn) p_o(t) = \sum_{n=1}^{\infty} C_n \cos\left(\frac{n\pi a}{L}t + \phi_n \right)

其中 CnC_nϕn\phi_n 是各个频率分量的新振幅和新相位。

当然,线性时不变的假设是有点强硬的。我们忽略了所有环节的非线性和时变因素,包括塔尔蒂尼音、多普勒效应等常见现象。但在此还是不将问题复杂化了。

听觉系统

最后接收到的声压信号被简化为只有时间这个变量,其角频率还是 nπaL\frac{n\pi a}{L}。因此之前发现的规律在这里依然适用:弦振动存在基频,所有谐波频率都是基频的整数倍。既然如此,那如果人的听觉系统可以进行傅里叶变换,岂不是一切都解释得通了?

事实确实如此。声波经中耳传到耳蜗,引起基底膜振动。而基底膜沿其长度方向,会分别对不同频率的振动产生最大响应,其强度与振幅有关。这种响应的结果就是刺激了相应位置的毛细胞,使其产生神经脉冲。最终这些脉冲被大脑接收、解码并产生听觉感知。

大脑接收到 f1f_12f12f_13f13f_1 等各种频率的信号,识别出这是一个谐波列,然后通过自相关、模式识别等复杂的时域或频域处理,找到了频率的最大公约数,同时也是频率的最小间隔 f1f_1,并通过这个基频产生了对音高的感觉。因此,即使基频分量本身非常弱甚至完全缺失,大脑仍能通过各谐波频率的间隔与公约数来重建基频——显然只要存在着足够数量的谐波,这一计算是很容易的。

可以说,人的听觉系统把传入的复杂周期信号分解为各频率分量,得到了一张记录着各频率振幅的频谱图

  \begin{tikzpicture}[x=1pt, y=1pt, font=\small]
  \draw[gray, thin, ->] (0,0) -- (0,200) node[above] {$A$};
  \draw[gray, thin, ->] (0,0) -- (300,0) node[right] {$f$};
  \node[gray] at (-10, -10) {0};

  \foreach \n in {1,...,5} {
    \node[gray] at (\n*50, -10) {$f_\n$};
    \draw[thick, black] (\n*50, 0) -- (\n*50, 180/\n^2) node[above] {$A_\n$};
  }
\end{tikzpicture}

音色

由于人的听觉系统对相位的差别不太敏感,更关注振幅,因此各分量的相对振幅最终决定了音色。之前提到了,在声音传播的过程中可能发生频域上的畸变,但由于具体的影响需要实际测量,因此后续将假设振幅之比没有太大变化,即相对振幅为 AnA1\frac{|A_n|}{|A_1|}

AnA_n 又由初始位移 φ(x)\varphi(x) 决定。因此,拨弦位置会影响到音色。设在 pp 处拨弦,并将此时的弦近似为三角形,高为 hh,如下图所示

  \begin{tikzpicture}[x=1pt, y=1pt, font=\normalsize]
  \draw[gray, thin, ->] (0,0) -- (0,200) node[above] {$\varphi(x)$};
  \draw[gray, thin, ->] (0,0) -- (400,0) node[right] {$x$};
  \node[gray] at (0,-10) {0};
  \node[gray] at (350,-10) {$L$};

  \draw[thick, black] (0,0) -- (50,180) -- (350,0);
  \draw[dashed] (50,180) -- (50,0) node[below] {$p$} node[midway, left] {$h$};
\end{tikzpicture}

于是有

φ(x)={hpx0xphLp(Lx)p<xL \varphi(x) = \begin{cases} \dfrac{h}{p}x & 0 \le x \le p \\ \dfrac{h}{L-p}(L-x) & p < x \le L \end{cases}

代入到 An=2L0Lφ(s)sinnπsLdsA_n = \frac{2}{L}\int_0^L\varphi(s)\sin\frac{n\pi s}{L}\mathrm{d}s

An=2L[hp0pxsinnπxLdx+hLppL(Lx)sinnπxLdx] A_n = \frac{2}{L}\left[ \frac{h}{p}\int_0^p x \sin\frac{n\pi x}{L}dx + \frac{h}{L-p}\int_p^L (L-x)\sin\frac{n\pi x}{L}dx \right]

基于积分公式

xsin(ax)dx=1a2sin(ax)xacos(ax) \int x\sin(ax)dx = \frac{1}{a^2}\sin(ax) -\frac{x}{a}\cos(ax)

(Lx)sin(ax)dx=1a2sin(ax)+xLacos(ax) \int (L-x)\sin(ax)dx = - \frac{1}{a^2}\sin(ax) + \frac{x-L}{a}\cos(ax)

a=nπLa = \frac{n\pi}{L} 替换后有

An=2L[hL3n2π2p(Lp)sinnπpL]=2hL2n2π2p(Lp)sinnπpL A_n = \frac{2}{L}\left[ \frac{h L^3}{n^2\pi^2 p(L-p)}\sin\frac{n\pi p}{L} \right] = \frac{2h L^2}{n^2\pi^2 p(L-p)}\sin\frac{n\pi p}{L}

An1n2sinnπpL |A_n| \propto \frac{1}{n^2} \left|\sin\frac{n\pi p}{L}\right|
  1. p=L/2p = L/2,即在弦的中间处拨弦,此时 An1n2sinnπ2|A_n| \propto \frac{1}{n^2} \left|\sin\frac{n\pi}{2}\right|,而偶数的 nn 会使 sinnπ2=0\sin\frac{n\pi}{2}=0,因此偶次谐波消失,音色变得空灵。

  2. p=ε0p = \varepsilon \approx 0p=LεLp = L -\varepsilon \approx L,即在靠近端点处拨弦,此时对于不是特别大的 nn,具体地说当 nLπεn \ll \frac{L}{\pi\varepsilon} 时,有 sinnπpLnπεL\left|\sin\frac{n\pi p}{L}\right| \approx \frac{n\pi \varepsilon}{L},从而 An1n|A_n| \propto \frac{1}{n},因此振幅随频率衰减的速度变慢,高次谐波相对较强,从而产生更金属或更刺耳的声音。

除拨弦外,还有击弦、拉弦等不同的振动弦的方式,这些都会产生不同的初始位移,从而映射到不同的 AnA_n 集合,产生不同的音色。

根据这些原理,我写了个钢琴模拟器,提供 声音合成乐谱编辑 等多种功能。

调律

至此终于进入了相对更音乐的领域。

音高

回顾之前关于基频的计算,并把 a=Tμa=\sqrt{\frac{T}{\mu}} 代入其中

f1=a2L=12LTμ f_1=\frac{a}{2L}=\frac{1}{2L}\sqrt{\frac{T}{\mu}}

其中 LL 为长度,TT 为张力,μ\mu 为线密度,这些都和弦本身有关。

由于基频决定了音高,因此,弦越长、张力越小、密度越大,则音高越低;反之则变高。我们可以据此来设计琴弦,或调整音高。

关于音高的事实可以解答一个疑问:为什么弦不是按得越用力,就振动得越快,从而音调越高?因为弦的基频已经被弦本身决定了,和释放弦的位置无关。当然,现实中的弦被用力按下后确实可能引起长度、张力、线密度的改变,但这种改变是微小且瞬时的,在持续的振动中基本可以忽略。

纯律

音乐不是孤立的单音。不同的音先后或同时出现,才能算是音乐。因此,我们需要一套规则——即音阶——来决定哪些音高可以一起使用。而实现音阶的数学手段就是调律。

两根一起发声的弦,基频之比越是简单,人耳听起来就越协调。因为比例越简单,不同基频所产生的谐波列就越容易混合出相同频率的泛音:当两个音基频比为 n1:n2n_1:n_2 时,前者的 n2n_2 次谐波会等于后者的 n1n_1 次谐波。

人们在不断实践中总结出来了很多好听的频率,2:12:1 叫八度,3:23:2 叫纯五度,4:34:3 叫纯四度,5:45:4 叫大三度。这种基于简单整数比组成的音阶称为纯律。

基于纯律,人们发明了一些复杂的调律方法。比如五度相生律:从一个音高开始,不断向上纯五度,即频率乘 3/23/2,若超出八度则降八度,即频率除以 22

C(1)×3/2G(3/2)×3/2÷2D(9/8)×3/2A(27/16) C(1) \xrightarrow{\times 3/2} G(3/2) \xrightarrow{\times 3/2\div 2} D(9/8) \xrightarrow{\times 3/2} A(27/16) \to \dots

这样就能生成一个八度内所有的音高

音名频率比
CC1
GG3/2
DD9/8
AA27/16
EE81/64
BB243/128
F/GF^\sharp / G^\flat729/512
C/DC^\sharp / D^\flat2187/2048
G/AG^\sharp / A^\flat6561/4096
D/ED^\sharp / E^\flat19683/16384
A/BA^\sharp / B^\flat59049/32768
FF177147/131072
CC531441/524288

经过 1212 步后,向上纯五度了 1212 次,降八度了 77 次,几乎又回到了 CC

(32)12129.74627=128 \left(\frac{3}{2}\right)^{12} \approx 129.746 \quad \ne \quad 2^7 = 128

但两者终究并不相等。这个差值被称为毕达哥拉斯逗号。

五度相生律的优点是所有五度都是完美的 3:23:2,但最大的缺点就是无法自由转调:比如 CC 大调里的 FF^\sharpBB 向上纯五度再降八度得到,而 GG 大调里的 FF^\sharpGG 向上纯五度得到,后者比前者低一点——背后的原因自然就是由毕达哥拉斯逗号导致的八度循环无法闭合。

十二平均律

为了彻底解决转调问题,人们又发明了十二平均律:将一个八度平均分成 1212 个等距的半音。每个半音的频率比为

21/121.059463 2^{1/12} \approx 1.059463

从一个音 f0f_0 出发,经过 kk 个半音后的频率为

fk=2k/12f0 f_k = 2^{k/12}f_0

这样,任何两个半音之间的比例只取决于它们相距的半音数,与调无关,这就解决了转调的问题。

并且,十二平均律和纯律的音程差别不大。从 CCGG77 个半音,频率比为 27/121.49832^{7/12} \approx 1.4983,非常接近于纯五度的 1.51.5

为了更方便地比较不同调律之间的微小差异,需要引入音分这一概念

δcent=1200log2f1f2 \delta_{\text{cent}} = 1200 \log_2\frac{f_1}{f_2}

半音的音程为 100100 音分,八度为 12001200 音分。此处列举一些音程在纯律和十二平均律上的差距

音程纯律十二平均律差值
八度120012000
纯五度701.96700-1.96
大三度386.31400+13.69

可见十二平均律的大三度牺牲了相对较多的纯度。不过这换来了转调的自由,因此那些音高固定的乐器在现代更普遍采用十二平均律。

和弦

在理解了单音的音高和音阶之后,接着研究更为复杂的情形——和弦,即多个弦同时开始振动。这一领域涉及到群论——这是一个研究对称性的数学分支。

循环群

十二平均律将一个八度等分为 1212 个半音,我们现在用 Z12={0,1,2,,11}\mathbb{Z}_{12} = \{0,1,2,\dots,11\} 来表示包含所有半音的集合,每个半音对应于一个数字。和弦现在可表示为 Z12\mathbb{Z}_{12} 的一个子集,我们按从小到大的方式列出其中的元素

和弦集合表示
CC 大三{0,4,7}\{0,4,7\}
CC 小三{0,3,7}\{0,3,7\}
CC 增三{0,4,8}\{0,4,8\}
CC 减三{0,3,6}\{0,3,6\}

Z12\mathbb{Z}_{12} 上定义一个封闭的运算,即加法模 1212。对于 a,bZ12a, b \in \mathbb{Z}_{12},用 +12+_{12} 表示这种加法,以区别于一般的加法

a+12b=(a+b)mod12 a +_{12} b = (a + b) \bmod 12

其中符号 mod12\bmod 12 表示对 1212 取模,意思是通过加上 1212 的整数倍让结果回到 Z12\mathbb{Z}_{12}

xmodm=yyZ_mx{y+mkkZ} x \bmod m = y \Longleftrightarrow y \in \mathbb{Z}\_{m} \land x \in \{ y + mk \mid k\in \mathbb{Z} \}

因此 Z12\mathbb{Z}_{12} 构成了一个循环群,不管如何相加结果都在这个集合里。

进一步地,我们可以再定义一种加法,让集合中所有元素加上一个整数,得到一个新的集合。对于 kZk \in \mathbb{Z} 和集合 XX

X+12k={x+12kxX} X +_{12} k = \{x +_{12} k \mid x \in X\}

在音乐上这被叫做移调。大三和弦的移调还是大三和弦,小三和弦的移调还是小三和弦。例如,CC 大三和弦 {0,4,7}\{0,4,7\} 向上移调 55 得到 {5,9,0}\{5,9,0\},排完序即为 {0,5,9}\{0,5,9\},这就是 FF 大三和弦。

循环群的另一个重要的映射是取负。对于 xZ12x \in \mathbb{Z}_{12},用 12-_{12} 表示以区别于一般的取负

12x=xmod12 -_{12}x=-x \bmod 12

具体地说

{12x=0(x=0)12x=12x(x0) \begin{cases} -_{12}x = 0 & (x = 0)\\ -_{12}x = 12 - x & (x \ne 0) \end{cases}

对集合取负也一样定义为

12X={12xxX} -_{12}X = \{-_{12}x \mid x \in X\}

在音乐上这被叫做倒影。大三和弦的倒影就是小三和弦。例如,CC 大三和弦 {0,4,7}\{0,4,7\} 取负得 {0,8,5}\{0,8,5\},排完序即为 {0,5,8}\{0,5,8\},这就是 FF 小三和弦。

如果把 Z12\mathbb{Z}_{12} 想象成一个环,那么和弦就是圆里的一个多边形,移调 xx 就是顺时针旋转 xx 次,倒影就是作关于 d0,6d_{0,6} 的对称

  \begin{tikzpicture}[x=1pt, y=1pt, font=\normalsize]
  \draw[thick, gray] (0,0) circle (90);
  \foreach \k in {0,...,11} {
    \pgfmathsetmacro{\angle}{90 - \k*30}
    \coordinate (P\k) at ({90*cos(\angle)}, {90*sin(\angle)});
    \fill[black] (P\k) circle (2pt);
    \node at ({100*cos(\angle)}, {100*sin(\angle)}) {\k};
  }
  \draw[thick, dashed, gray] (P0) -- (P6);

  \draw[thick, blue] (P0) -- (P4) -- (P7) -- cycle;
  \draw[thick, dashed, purple] (P0) -- (P5) -- (P9) -- cycle;
  \draw[thick, dashed, orange] (P0) -- (P5) -- (P8) -- cycle;
\end{tikzpicture}

每类和弦都会有一些独特的性质。除大三、小三、增三和减三外,还有很多类和弦,但这里只列举上述和弦的特征

和弦类型听觉特征
大三和弦明亮、稳定、开阔
小三和弦暗淡、柔和、忧郁
增三和弦膨胀、悬空、向外
减三和弦紧缩、压抑、向内

置换群

勋伯格发明了十二音技法,其核心思想是将一个八度内的 1212 个半音全部使用且不重复。因此一个十二音序列是 Z12={0,1,,11}\mathbb{Z}_{12}=\{0,1,\dots,11\} 的一个排列。所有排列构成的集合用 S12S_{12} 表示

S12={(a0,a1,,a11){a0,a1,,a11}=Z12} S_{12} = \{ (a_0, a_1, \dots, a_{11}) \mid \{a_0, a_1, \dots, a_{11}\} = \mathbb{Z}_{12} \}

现在我们研究对序列的操作。如果把每个操作都视为一个元素,然后所有操作组成一个集合,并在此集合上定义操作与操作之间的运算,那么这个集合也能变成一个群,我们叫它置换群。

先来研究最基本的平移操作,其正对应着我们之前讲的加法 +12+_{12},只不过现在是对序列 sS12s \in S_{12} 进行的

s+12k=(a0+12k,a1+12k,,a11+12k) s +_{12} k = (a_0 +_{12} k, a_1 +_{12} k, \dots, a_{11} +_{12} k)

我们用 tkt_k 表示这种平移操作

tk:ss+12k t_k: s \mapsto s +_{12} k

这样所有的 tkt_k 构成了一个集合

T12={tkkZ12} T_{12} = \{t_k \mid k\in \mathbb{Z}_{12}\}

现在定义 T12T_{12} 上的运算 12\circ_{12},对于 ta,tbT12t_a, t_b \in T_{12}

tb12ta t_b \circ_{12} t_a

来表示这两个操作的复合,顺序为从右到左,即先进行 tat_a 再进行 tbt_b。对于任意一个 sS12s \in S_{12},有

tb12ta:stas+12atb(s+12a)+12b t_b \circ_{12} t_a: s \xmapsto{t_a} s +_{12} a \xmapsto{t_b} (s +_{12} a) +_{12} b

由于 +12+_{12} 满足结合律,因此

tb12ta:ss+12(a+12b) t_b \circ_{12} t_a: s \mapsto s +_{12} (a +_{12} b)

也就是说

tb12ta=ta+12b t_b \circ_{12} t_a = t_{a+_{12}b}

由于 +12+_{12} 是封闭的运算,因此 12\circ_{12} 也是一个封闭的运算。这同时揭示了对于 ss 一共只有 1212 种纯平移操作,分别和 Z12\mathbb{Z}_{12} 中的元素一一对应。我们称 T12T_{12} 构成了一个置换群。

不过,对于 S12S_{12} 中的序列,除纯平移外还有很多种置换。只要置换后再置换得到的复合置换,仍然能够用集合中的某个置换表示,那么这些置换组成的集合就是置换群。

对于十二音技法而言,除移调这个平移置换外,还有下面这些对序列常用的置换,设原序列 s=(a0,a1,,a11)s = (a_0, a_1, \dots, a_{11})

置换名作用数学表示
原形序列不变s(a0,a1,,a11)s \mapsto (a_0, a_1, \dots, a_{11})
逆行将序列反转s(a11,a10,,a0)s \mapsto (a_{11}, a_{10}, \dots, a_0)
倒影对每个元素取负s(a0,a1,,a11)s \mapsto (-a_0, -a_1, \dots, -a_{11})
逆行倒影先倒影再逆行s(a11,a10,,a0)s \mapsto (-a_{11}, -a_{10}, \dots, -a_0)

移调有 1212 种,和上述 44 种置换复合后有 4848 种置换。可以验证这 4848 种置换构成的群还是置换群。因此,这个置换群从一个初始的序列开始,最多可以生成 4848 种相关的序列。虽然 Z12\mathbb{Z}_{12} 的所有排列远远不止 4848 个,但这已经足够为作曲提供丰富的方法了。

总之,音乐中的移调、逆行、倒影等手法,无论多么复杂,都可以理解为置换群中的一种置换。

节奏

最后再讨论一下音乐的另一个重要概念——节奏。

模式

节奏中通常都有循环的小节或模式,每个循环周期内又可分成 mm 个等间距的拍位。如果将节奏看作时间轴上的一个离散信号,只简单地用 11 表示该节拍强,或者叫脉冲,用 00 表示该节拍弱,或者叫休止,那么一个循环的节奏就可表示为一个循环的二进制序列。

序列的长度就等于节奏模式的长度 mm,我们再把序列中 11 的个数 nn 称为该节奏模式的密度。例如,简单的四拍节奏“强、弱、次强、弱”就可以表示为 [1,0,1,0][1,0,1,0],其中 m=4,n=2m=4, n=2

分布

通常,在给定 mmnn 时,我们希望将 nn 个脉冲尽可能均匀地分布在 mm 个节拍上,而不是某段时间连续脉冲或某段时间连续休止。

解决这个最均匀分布问题,需要使用到数论的知识。

先考虑一个较为简单的情形:在 88 个节拍中放入 55 个脉冲,即 m=8,n=5m=8, n=5,如下图所示

  \begin{tikzpicture}[x=1pt, y=1pt, font=\small]
  \foreach \i in {0,...,7} {
    \ifnum\i<5
      \fill[black] (\i*40,100) rectangle (30+\i*40,120) node[midway, white] {1};
    \else
      \fill[gray] (\i*40,100) rectangle (30+\i*40,120) node[midway, black] {0};
    \fi
  }

  \foreach \i in {0,2,4,6,7} {
    \fill[black] (\i*40,50) rectangle (30+\i*40,70) node[midway, white] {1};
  }
  \foreach \i in {1,3,5} {
    \fill[gray] (\i*40,50) rectangle (30+\i*40,70) node[midway, black] {0};
  }
\end{tikzpicture}

我们的做法是

  1. 得到初始序列 [1,1,1,1,1,0,0,0][1,1,1,1,1,0,0,0]
  2. 将初始序列分成 [1,1,1,1,1][1,1,1,1,1][0,0,0][0,0,0],取较短者 [0,0,0][0,0,0] 一一附着到较长者 [1,1,1,1,1][1,1,1,1,1] 上,剩余的较长者自行组合,得到数个片段 [1,0],[1,0],[1,0],[1,1][1,0],[1,0],[1,0],[1,1]
  3. 把片段拼接起来 [1,0,1,0,1,0,1,1][1,0,1,0,1,0,1,1],这就是 55 个脉冲在 88 个节拍上可以得到的最均匀分布

这种节奏被叫做欧几里得节奏,更一般的构造方法为

  1. 初始化一个包含 nn11mnm-n00 的序列
  2. 反复将较短的序列折叠到较长的序列上,直到剩余序列的长度都不超过 22
  3. 将最后剩下的序列按顺序拼接,得到节奏模式

当然,欧几里得本人不知道什么是欧几里得节奏,只是这一算法和欧几里得计算最大公约数的算法很像,所以后人将其命名为欧几里得节奏。

那为什么一个求最大公约数的算法能用来设计最均匀分布的节奏呢?

这得回顾一下欧几里得算法。假设 m>nm > n,求 mmnn 的最大公约数 gcd(m,n)\gcd(m,n),具体步骤为

  1. 计算 m÷nm \div n,得到余数 rr
  2. r=0r=0,则 nn 即为最大公约数
  3. r0r\ne0,由于 gcd(m,n)=gcd(n,mmodn)\gcd(m,n)=\gcd(n,m \bmod n),而 mmodn=rm \bmod n = r,因此继续求 gcd(n,r)\gcd(n,r)
  4. 重复以上步骤,直到余数为 00

回到节奏的均匀分布问题上,设 m÷n=qrm\div n = q \cdots r,其中 qq 是商,rr 是余数

  1. 如果 r=0r=0,那么可将 mm 分成 nn 个长为 qq 的区间,每个区间里有 11 个脉冲和 q1q-1 个休止。这就对应着欧几里得算法里 r=0r=0 的情况,从而 mmnn 的最大公约数为 nn

  2. 如果 r0r\ne0,那么在 nn 个长为 qq 的区间里分别放入 11 个脉冲和 q1q-1 个休止后,还剩余 rr 个休止未被放置,因此还要再把它们均匀分布到 nn 个区间里。如同把 nn 个脉冲均匀放到 mm 个节拍上要计算 m÷nm\div n 一样,现在把 rr 个休止均匀放到 nn 个区间上要计算 n÷rn\div r。这就对应着欧几里得算法里 r0r\ne0 的情况,要继续计算 mmnn 的最大公约数 gcd(n,r)\gcd(n,r)

总结

本文介绍了振动弦、驻波、人的听觉系统、调律、和弦、节奏,尽管东西很多,但这依然不可能穷尽音乐中的所有原理。

在音乐的最深处,会是什么?也许是数学,如果用一种本体论的说法,那么音乐就是数学在时间中的回响,音乐的本质是数学。

至于数学为何能引起人的感动——那答案恐怕已不在数学之中。这涉及到哲学上的心身问题——自笛卡尔提出心身二元论后,对这一问题就出现了各种各样的解释——至今没有一个能让所有人都满意:如果承认心身二分,那么音乐就存在着某种超越数学的感性溢出,它无法被完全还原为物质变化,而是通过某种神秘的、不为人知的方式引起了人的感觉;如果取消心身二分,那么音乐就不过是引发了一种复杂的神经状态,它完全可以被数学描述,只不过人们将其命名为感动。