专栏文章

乐理的一些随笔

算法·理论参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mipur939
此快照首次捕获于
2025/12/03 18:16
3 个月前
此快照最后确认于
2025/12/03 18:16
3 个月前
查看原文
绝不是因为上了《石钟山记》。
不妨以弦长丈量音符。拿纯律比较十二平均律。
众所周知,毕达哥拉斯提出,比例越简洁,两个音的和声听起来越自然悦耳。
比方说,纯五度就是 32\frac32 倍的弦长。
但问题来了,如果要升调的话,比例就变了,很不好。
于是想到了一种新方法:把一个八度十二等分,变成以 21122^\frac1{12} 为公比的等比数列。
这种方法就适合升调,但反过来比例就对不上了。
此谓鱼与熊掌不可得兼。
比如大三度,理论 12log254=3.86312\log_2\frac54=3.863,实际上 2412=1.2602^\frac4{12}=1.260,误差就有点大。
列出表格:
98\frac9854\frac5443\frac4332\frac3253\frac53158\frac{15}8
2.0392.0393.8633.8634.9804.9807.0207.0208.8448.84410.88310.883
1.1221.1221.2601.2601.3351.3351.4981.4981.6821.6821.8881.888
可见,绝对误差有时能达到 0.1560.156 之大,所以十二平均律听上去就没有纯律那么和谐,不转调的情况下纯律是更好的选择。
那倘若以 Stern-Brocot Tree 拟合一下有理数呢?
-12?34!?5!67?8!9!1011!
<<1716\frac{17}{16}98\frac9865\frac6543\frac4332\frac3232\frac3232\frac3221\frac2121\frac2121\frac2121\frac21
>>1817\frac{18}{17}5549\frac{55}{49}1916\frac{19}{16}54\frac5443\frac4375\frac7532\frac3253\frac5374\frac74158\frac{15}8
<<8984\frac{89}{84}2521\frac{25}{21}2923\frac{29}{23}1712\frac{17}{12}85\frac853722\frac{37}{22}95\frac95179\frac{17}9
>>4437\frac{44}{37}3427\frac{34}{27}4129\frac{41}{29}1912\frac{19}{12}169\frac{16}916889\frac{168}{89}
<<6350\frac{63}{50}9970\frac{99}{70}2717\frac{27}{17}4123\frac{41}{23}18598\frac{185}{98}
>>10063\frac{100}{63}5732\frac{57}{32}
<<9855\frac{98}{55}
可以看见纯律中的比例均出现了,因此可以胡扯为什么是“十二”平均律而不是其他的数字。12 是最小的可以让纯律中比例均出现的,更大的有 23、24、31、32 等。但是 23 和 31 这种质数明显也不方便,所以 12 就是最好的了,但是其实吧,24 确实还行。附 23、24、31、32 的表格:
-1234!567?8!9?10!111213?14!1516?17!18192021!22
<<3332\frac{33}{32}1716\frac{17}{16}1110\frac{11}{10}87\frac8776\frac7665\frac6554\frac5443\frac4343\frac4332\frac3232\frac3232\frac3232\frac3221\frac2121\frac2121\frac2121\frac2121\frac2121\frac2121\frac2121\frac2121\frac21
>>3433\frac{34}{33}1211\frac{12}{11}98\frac984337\frac{43}{37}1613\frac{16}{13}54\frac541713\frac{17}{13}43\frac4343\frac43107\frac{10}73423\frac{34}{23}32\frac3232\frac3232\frac3253\frac5353\frac5374\frac7495\frac95158\frac{15}83116\frac{31}{16}
<<10198\frac{101}{98}2321\frac{23}{21}4439\frac{44}{39}5043\frac{50}{43}2117\frac{21}{17}1411\frac{14}{11}2116\frac{21}{16}2317\frac{23}{17}75\frac752316\frac{23}{16}3725\frac{37}{25}2919\frac{29}{19}85\frac8553\frac5374\frac74169\frac{16}9116\frac{11}6179\frac{17}93317\frac{33}{17}
>>8174\frac{81}{74}8061\frac{80}{61}5037\frac{50}{37}3928\frac{39}{28}3323\frac{33}{23}14598\frac{145}{98}3221\frac{32}{21}117\frac{11}785\frac85127\frac{12}73922\frac{39}{22}4223\frac{42}{23}3217\frac{32}{17}
<<7354\frac{73}{54}5639\frac{56}{39}6140\frac{61}{40}138\frac{13}83118\frac{31}{18}5329\frac{53}{29}14577\frac{145}{77}
>>12391\frac{123}{91}3421\frac{34}{21}4325\frac{43}{25}9552\frac{95}{52}17794\frac{177}{94}
<<11571\frac{115}{71}14881\frac{148}{81}
>>14992\frac{149}{92}
-1234?567?8!9?10!11121314?15!1617?18!19202122!23
<<3534\frac{35}{34}1716\frac{17}{16}1211\frac{12}{11}98\frac9876\frac7665\frac6554\frac5443\frac4343\frac4332\frac3232\frac3232\frac3232\frac3232\frac3221\frac2121\frac2121\frac2121\frac2121\frac2121\frac2121\frac2121\frac2121\frac21
>>1817\frac{18}{17}5549\frac{55}{49}1513\frac{15}{13}1916\frac{19}{16}119\frac{11}954\frac5497\frac9743\frac4343\frac4375\frac751611\frac{16}{11}32\frac3232\frac3232\frac3253\frac5353\frac5374\frac74116\frac{11}6158\frac{15}83317\frac{33}{17}
<<8984\frac{89}{84}5245\frac{52}{45}2521\frac{25}{21}7158\frac{71}{58}2923\frac{29}{23}1310\frac{13}{10}118\frac{11}81712\frac{17}{12}11579\frac{115}{79}1711\frac{17}{11}85\frac8553\frac533722\frac{37}{22}74\frac7495\frac95179\frac{17}93518\frac{35}{18}
>>4437\frac{44}{37}3427\frac{34}{27}3527\frac{35}{27}4129\frac{41}{29}3724\frac{37}{24}1912\frac{19}{12}138\frac{13}81911\frac{19}{11}169\frac{16}916889\frac{168}{89}6835\frac{68}{35}
<<6350\frac{63}{50}8364\frac{83}{64}9970\frac{99}{70}9159\frac{91}{59}2717\frac{27}{17}1811\frac{18}{11}2615\frac{26}{15}4123\frac{41}{23}18598\frac{185}{98}
>>12883\frac{128}{83}10063\frac{100}{63}4930\frac{49}{30}4526\frac{45}{26}5732\frac{57}{32}
<<6741\frac{67}{41}9855\frac{98}{55}
>>11671\frac{116}{71}
-12345?6789?10!1112?13!1415161718?19!202122?23!2425262728?2930
<<4544\frac{45}{44}2221\frac{22}{21}1514\frac{15}{14}1110\frac{11}{10}98\frac9876\frac7665\frac6565\frac6554\frac5443\frac4343\frac4343\frac4332\frac3232\frac3232\frac3232\frac3232\frac3232\frac3221\frac2121\frac2121\frac2121\frac2121\frac2121\frac2121\frac2121\frac2121\frac2121\frac2121\frac2121\frac21
>>2322\frac{23}{22}3129\frac{31}{29}1211\frac{12}{11}1917\frac{19}{17}87\frac8776\frac765546\frac{55}{46}119\frac{11}954\frac5454\frac541713\frac{17}{13}43\frac4343\frac4343\frac43107\frac{10}71913\frac{19}{13}32\frac3232\frac3232\frac3232\frac3253\frac5353\frac5353\frac5374\frac7495\frac95137\frac{13}72111\frac{21}{11}4322\frac{43}{22}
<<7772\frac{77}{72}3532\frac{35}{32}8576\frac{85}{76}6959\frac{69}{59}11697\frac{116}{97}97\frac9711183\frac{111}{83}118\frac{11}875\frac7512386\frac{123}{86}11780\frac{117}{80}2617\frac{26}{17}117\frac{11}785\frac8553\frac539255\frac{92}{55}127\frac{12}774\frac7495\frac95116\frac{11}6158\frac{15}84423\frac{44}{23}4523\frac{45}{23}
>>10493\frac{104}{93}2318\frac{23}{18}1511\frac{15}{11}13393\frac{133}{93}2516\frac{25}{16}138\frac{13}89758\frac{97}{58}5331\frac{53}{31}2514\frac{25}{14}6435\frac{64}{35}4323\frac{43}{23}15380\frac{153}{80}8845\frac{88}{45}
<<5543\frac{55}{43}2619\frac{26}{19}6139\frac{61}{39}1811\frac{18}{11}6538\frac{65}{38}3419\frac{34}{19}13976\frac{139}{76}10154\frac{101}{54}13368\frac{133}{68}
>>7861\frac{78}{61}6749\frac{67}{49}15796\frac{157}{96}11869\frac{118}{69}5933\frac{59}{33}
<<9368\frac{93}{68}9352\frac{93}{52}
-12345?678910?11!1213?14!15161718?19!20212223?24!2526272829?3031
<<4645\frac{46}{45}2322\frac{23}{22}1514\frac{15}{14}1211\frac{12}{11}98\frac9887\frac8776\frac7665\frac6554\frac5454\frac5443\frac4343\frac4343\frac4332\frac3232\frac3232\frac3232\frac3232\frac3221\frac2121\frac2121\frac2121\frac2121\frac2121\frac2121\frac2121\frac2121\frac2121\frac2121\frac2121\frac2121\frac21
>>4746\frac{47}{46}2423\frac{24}{23}1615\frac{16}{15}109\frac{10}93329\frac{33}{29}6455\frac{64}{55}1916\frac{19}{16}65\frac653629\frac{36}{29}54\frac5497\frac975340\frac{53}{40}43\frac4343\frac4375\frac75139\frac{13}93121\frac{31}{21}32\frac3232\frac3232\frac3232\frac3232\frac3253\frac5353\frac5374\frac7474\frac74116\frac{11}6137\frac{13}72111\frac{21}{11}4523\frac{45}{23}
<<4745\frac{47}{45}2926\frac{29}{26}4136\frac{41}{36}2521\frac{25}{21}119\frac{11}97762\frac{77}{62}1411\frac{14}{11}1310\frac{13}{10}11083\frac{110}{83}1914\frac{19}{14}75\frac751712\frac{17}{12}9665\frac{96}{65}8053\frac{80}{53}1711\frac{17}{11}85\frac8553\frac5353\frac533722\frac{37}{22}74\frac746537\frac{65}{37}95\frac95158\frac{15}82312\frac{23}{12}9247\frac{92}{47}
>>3935\frac{39}{35}4437\frac{44}{37}1714\frac{17}{14}1915\frac{19}{15}3527\frac{35}{27}2317\frac{23}{17}118\frac{11}84129\frac{41}{29}8355\frac{83}{55}3724\frac{37}{24}117\frac{11}785\frac852314\frac{23}{14}127\frac{12}77241\frac{72}{41}6134\frac{61}{34}9047\frac{90}{47}13770\frac{137}{70}
<<7965\frac{79}{65}3326\frac{33}{26}8364\frac{83}{64}4231\frac{42}{31}1813\frac{18}{13}9970\frac{99}{70}9159\frac{91}{59}4126\frac{41}{26}2918\frac{29}{18}2817\frac{28}{17}5532\frac{55}{32}7039\frac{70}{39}11359\frac{113}{59}
>>9679\frac{96}{79}6548\frac{65}{48}13799\frac{137}{99}12883\frac{128}{83}5233\frac{52}{33}12477\frac{124}{77}5131\frac{51}{31}
<<15395\frac{153}{95}7948\frac{79}{48}
感觉好像没人像我这样思考过,别人都是什么十九平均律之类的。毕竟我这种思考方法反了,逻辑上就不通,但结果是很有趣的。
生成上述表格的代码(上面的是手动修过的,毕竟也不想把代码整太麻烦):
PY
z=int(input())
t=[(9,8),(5,4),(4,3),(3,2),(5,3),(15,8)]
def g(a,b):
	print('|$\\frac'+('{'+str(a)+'}'if a>9 else str(a))+('{'+str(b)+'}'if b>9 else str(b))+'$'if b<100 else'|',end='')
	if(a,b)in t:t.remove((a,b));return 1
	return 0
def f(x,s,r,a,b,c,d):
	if min(a,b,c,d)>100:print('|',end='');return 0
	if s==0:return g(c,d)if r else g(a,b)
	return f(x,s-r,0,a,b,a+c,b+d)if pow(2,x)*pow(b+d,z)<pow(a+c,z)else f(x,s-1+r,1,a+c,b+d,c,d)
h=0
print('-',end='')
for j in range(1,z):print(f'|{j}',end='')
print('\n:-:',end='')
for j in range(1,z):print('|:-:',end='')
print('\n',end='')
for i in range(2,12):
	print('$>$'if i%2 else'$<$',end='')
	for j in range(1,z):h=h+f(j,i,1,0,1,1,0)
	print()
print(h)

评论

0 条评论,欢迎与作者交流。

正在加载评论...