没读过扫盲文《微分音音乐理论术语翻译与简介》的请先去读那一篇。理由的话,读和没读,君试试就知道区别了。
这一篇就是要讲那一篇没讲的、比较难的、有一堆数学式子的、搞音乐的也没必要知道的部分。那有小朋友可能要问了,笔者为什么会知道呢?那是因为笔者不仅仅是个搞音乐的嘛。
知道这个的用处就是有助于寻找自己心仪的调音、开发新调音,以及在调音中寻求美学体验。目录
1. 滕尼—欧氏调音与其变体
1.1. 滕尼—欧氏调音
1.2. 纯八度滕尼—欧氏调音
1.3. 傅比尼调音
2. 滕尼—欧氏调律量度
2.1. 滕尼—欧氏复杂度
2.2. 滕尼—欧氏误差
2.3. 滕尼—欧氏简单坏度
2.4. 滕尼—欧氏对数修正坏度
1. 滕尼—欧氏调音与其变体
1.1. 滕尼—欧氏调音
滕尼—欧氏调音(下文中滕尼—欧氏都简称为TE)是规则调律的一种调音方法,能够最小化各质数频率比的加权误差的平方和。现在已知一个抽象调律,例如说已知映射表,或者已知调和了哪些音差,具体如何调呢?每个生程要多大才好呢?TE调音提供了一种优化调音的解决方案。
首先我们重新审视一下映射表。我们用
表示标准形式的映射表。
调律有一系列生程。之前已经说过,秩为
的调律就有
个生程。我们用
表示生程的行向量。
我们的调音目标是一系列质数频率比,它们的对数是调音空间中的一组基,称为纯律点(just intonation points,下文称JIP),我们用
表示,即
其中
是一个常数。如果
,则
的单位为纯八度;如果
,则
的单位为音分。
TE调音要求每个质数频率比有相同的权重,为此要将JIP单位化。定义TE调音的加权矩阵
:
换句话说就是对序数为j的质数频率比
取
的权重。
令
为加权基中的映射,即
。令
为加权JIP,即
。如果
的单位是纯八度,那么在这种加权的情况下,
就是一个全1的向量。
当
时,关于生程
有超定方程组
意思是序数为
(
)的质数频率比
在该调律中要等于各序数为
(
)的生程
的
步之和。
TE调音定义了对这个超定方程组的一个最小二乘问题。
最小二乘问题可以用摩尔—彭罗斯广义逆矩阵的方法求解。用
表示矩阵
的广义逆,则
解出来的
就是TE生程(TE generators),即TE调音所用的生程。
用TE生程
与加权映射表
或非加权映射表
相乘,分别得到对应的TE调音表(TE tuning map)
或
,即
表示各质数频率比的实际调音结果。
下面以七限魔术调律(magic temperament)为例说明求TE调音的过程。已知七限魔术调律的映射表为
JIP也是已知的。令单位为纯八度,写出
分别对
和
加权。由
,得到
由
,得到
上面写出加权的过程是为了展示原理,只求TE调音的话这个全1的向量显然可以直接用。
求出
的广义逆
求出TE生程
求出TE调音表
和
以上就得到了七限魔术调律的TE调音。它是以纯八度为单位的。我们可以化成音分:
这就说明要最小化七限魔术调律的误差,2个生程的大小分别是1201.082分和380.695分;4个质数频率比2/1、3/1、5/1、7/1分别调到了1201.082分、1903.476分、2782.860分、3367.259分。
1.2. 纯八度滕尼—欧氏调音
对TE调音进行等比例缩放,使得纯八度成为纯的,就是纯八度TE调音。
非常简单。TE调音表
里面的第一个元素
就是对2/1的调音结果。因此,求出TE生程和TE调音表之后分别除以
即可。用
、
和
分别表示纯八度TE调音的TE生程、加权TE调音表、非加权TE调音表,则
七限魔术调律的纯八度TE调音结果是
说明2个生程的大小分别是1200.000分和380.352分;4个质数频率比2/1、3/1、5/1、7/1分别调到了1200.000分、1901.760分、2782.352分、3364.224分。
纯八度TE调音比TE调音更容易实现,采用它可以使一些问题变的直观简单,但误差会变大。
1.3. 傅比尼调音
傅比尼调音跟TE调音一样,但是不加权,直接解
傅比尼调音由于没有将JIP单位化,结果偏重高的质数频率比。因此TE调音通常比傅比尼调音更合理,除非认为和声限越高的音程就该容忍越低的误差。但傅比尼调音有一个特点,就是它的结果都是有理数,可以作为调律的一种特征表示。
2. 滕尼—欧氏调律量度
滕尼—欧氏调律量度(下文称TE调律量度)是对抽象调律的一套量化方法和评价标准,包括三个量:TE复杂度、TE误差和TE简单坏度。其关系是:
2.1. 滕尼—欧氏复杂度
TE复杂度是表示调律复杂程度的量度。求TE复杂度的方法有两种,一是通过外映射,二是直接通过映射表。外映射本身的价值是作为调律的一种特征表示,同时外映射的范具有表征调律的复杂度的意义。
求外映射的方法可以简单到一句话:对于和声限序数
、秩
的调律,已知映射表
,则其外映射
的第
个元素
等于
的第
种
取
组合的列拼成的矩阵的行列式。
展开来说的话是这样。首先我们定义组合迭代函数
,就是Python官方
库的
函数做的事情——给出
以下正整数里面取
个元素的所有组合的集合序列。这个集合序列中共有
与
的组合数
个集合,且每个集合都有
个元素。设有
的矩阵
和
个元素的集合
;定义列切片函数
为取
的第
列拼成的矩阵。因为
有
个元素,所以这个矩阵为
的方阵,必然存在行列式。对于和声限序数为
、秩为
的调律,已知映射表
,记集合序列
,则其外映射
有
个元素,第
个元素
满足
其中
表示取矩阵的行列式。
但对于求TE复杂度,我们要用加权外映射
。做法就是先给映射表加权,即
最后对加权外映射
取二阶范,得到的就是一种TE复杂度——
复杂度。用
表示复杂度,则
通过外映射求复杂度实际上是比较麻烦的方法。用格拉姆矩阵的方法从映射表直接求复杂度要简单的多:
TE复杂度除了
复杂度以外还有两种。金·沃德·史密斯(Gene Ward Smith)提出了方均根复杂度;格拉汉姆·布里德(Graham Breed)提出了单位化方均根复杂度。这里分别称为布氏和史氏方均根复杂度。
要计算方均根复杂度,我们首先定义一种范,称为方均根范(RMS norm)。向量的方均根范就是它各元素的方均根。它跟二阶范有很密切的联系——它等于二阶范除以元素数的方根。
史氏方均根复杂度就是对外映射取方均根范:
或者从映射表直接求:
布氏方均根复杂度,从映射表直接求就会非常优雅,用外映射却会非常迷惑。它采用这种定义:
关于分母上的
,笔者理解为数外映射的元素的时候把正交基也都算上,这样正好有
个元素(但布里德本人否定这种理解)。
从映射表直接求:
这个式子里面
根本没出现。但实际上,矩阵每次进行相乘的时候都取平均,
的方阵的行列式就是原来的
。
总之TE复杂度存在着三种定义:一种
复杂度和两种方均根复杂度。它们的结果是不同的,但在相同秩、相同纯律子群的情况下,它们的比值都是常数,所以选择其中任意一种都可以比较出TE复杂度。
特殊地,对于平均律,两种方均根复杂度都等于TE调音时这个平均律对纯八度的等分数。例如,十二平均律的复杂度就接近12,十九平均律的复杂度就接近19。
笔者倾向于使用布里德的定义,因为这个对人类的认知最友好。
2.2. 滕尼—欧氏误差
TE误差是调律在TE调音的情况下各质数频率比到JIP的方根差或方均根差。这同样存在着三种定义:L2误差、布氏和史氏方均根差。对于相同秩、相同纯律子群的调律,任意一种都可以用。但上面TE复杂度用的是哪种定义,这里TE误差也得用同一套。
用TE调音表减去JIP再取二阶范就是L2误差,即方根差。用
表示TE误差,则
用TE调音表减去JIP再取方均根范就是布氏方均根差。
最后是用
表示的史氏方均根差。它是先定义TE简单坏度再用关系反推出来的。笔者当然不会尝试解释它的TE简单坏度是怎么定义的,这里只给出公式。
2.3. 滕尼—欧氏简单坏度
TE简单坏度是调律在TE调音的情况下的相对误差。无论何种定义,TE简单坏度都等于对应的TE复杂度和TE误差的乘积。
2.4. 滕尼—欧氏对数修正坏度
TE对数修正坏度不属于TE调律量度的组成部分。它是对TE简单坏度的一种修正,理由是有人认为TE简单坏度十分偏向复杂的调律。TE对数修正坏度的计算:
其中
为TE对数修正坏度,
为TE简单坏度,
为TE复杂度。
TE对数修正坏度的一个重要性质是无下界性。虽然高复杂度的调律的TE对数修正坏度会远远高于TE简单坏度,但给定任意正值,一定存在TE对数修正坏度低于这个值的调律。
当然,笔者并不认同TE简单坏度偏向复杂的调律,更不用说「十分偏向」,所以也不认同随意使用TE对数修正坏度来评价调律。
以上。
雏鸣札D卷第二篇
版本稳定版0