为什么琴键要排成等比数列?
鋼琴的每個鍵頻率是多少?頻率的排列有什么關系?黑白鍵的排列方式是出于什么原因?為什么有的音合在一起會和諧共處,有的音和在一起會打架?后來發現數學其實可以解釋這些問題。
下面的話可能不嚴格,但是音樂不需要嚴格,我們只需要列出想要滿足的條件,然后在這些條件下找到一個極優解,問題就算解決了。
一、頻率排列和琴鍵排列
說鋼琴一共有88個鍵,它們各自的頻率組成一個等比數列,比例系數是2開12次方,即2^(1/12),中音A(左起第49個鍵)的頻率規定為440Hz,于是所有88個鍵的頻率都確定了。
現在就有一個問題,為什么是等比數列而不是等差數列?從“十二平均律”這個名字看,在最低頻率和最高頻率之間均勻分布88個音,也應該得到一個等差數列才對。
這里有兩個原因。第一個原因,也就是我覺得最重要的原因,是取決于人的聽覺。人耳分辨兩個音的高低,靠的是兩個音之間的頻率比例,而不是頻率差值。比如說,一個正常人可以清楚的區分50Hz和55Hz,但卻很難區分5000Hz和5005Hz(也許莫扎特可以,但是莫扎特是大神,大神是不具備參考意義的…)。這就意味著,如果鋼琴上音的分布是等差數列,那么越到高音,你就會發現兩個音越難以區分。這不是我們想要的。
當然這不能決定琴鍵必須是等比數列,因為如果你聽到兩個音不太好區分,那么只要增大它們的頻率差即可,也就是說,耳朵的限制只能導致越到高音區,頻率差越大而已。但是從數學的角度,我們可以證明這些音的分布必須是等比數列。這也就是我認為的第二個原因。
我們希望琴鍵的排列具有周期性,這樣以便鋼琴家找到每一個音的位置。最方便的獲取周期的方式就是:一巴掌忽上去,就是一個最小正周期----這是手感上的周期性。我們要確定這一巴掌里面能覆蓋多少個鍵:太少了不行----因為這樣就限制了鋼琴音樂的豐富性;太多了也不行----因為這樣會導致每個鍵的寬度很窄,容易一指頭戳到兩個鍵。就現有鋼琴的排鍵密度,好多胖紙也會吐槽按不到兩個黑鍵中間去,巴赫這貨貌似就挺胖的…于是巴赫就想,一巴掌里面排12個音很恰當,7個白鍵,5個黑鍵,黑鍵以兩個一組、三個一組,間隔排列在均勻分布的白鍵之間。這是一個很好的排列方式:這使得你一巴掌無論拍在什么位置上,都會拍到一個最小正周期,并且具有視覺上的周期性----鋼琴家很容易一眼就確定每個音的位置。要滿足音的數量不多不少以及兩個周期性要求,這是最好的排列方式了。
我們還希望一巴掌上去,大拇指和小拇指的兩個音應該在相鄰兩個周期中的相同位置,比如說…(1234567)(1234567)(123…,一巴掌上去,大拇指和小拇指正好按到相鄰的兩個1、兩個2等等。這兩個音要非常和諧的共存,簡單地說就是聽起來超爽~
(從下面開始,用粗體的形如Ab來表示A_b,即A下標b)
我們現在知道聲音是周期性振動,音色取決于波形。鋼琴聲音的波形不是sin,因此用f(wt)表示角頻率為w的琴鍵的波形,那么兩個音一起按下去的效果就是F(t)=f(w1t)+f(w2t),(不妨設w2>w1)。我們希望F(t)的周期盡可能短(這里的“周期”指的是波形函數的數學周期,并不是人耳的聽感周期,人聽到的感覺是兩個獨立的頻率),一個周期內的波形盡可能簡單。簡單起見,設f(t)的最小正周期是1,F(t)的最小正周期是T,那么F(T)=f(w1T)+f(w2T),其中w1T=i,w2T=j,i和j都是正整數,那么T=i/w1=j/w2要盡量小,也就是說i=(w1/w2)j,我們要使i和j都盡量小。最佳的方式就是w2=2w1,這時i=1,j=2,這是最優解了。
我們稱上述這兩個音為一個“八度”,因為一個周期內有7個白鍵,如果標記為1234567的話,這兩個鍵就對應1和8。上述結果表明,一個八度的頻率應該是二倍關系,你一巴掌上去,總歸是按到頻率比例為1:2的兩個音。
現在我們還有一個想法,就是如果我按下兩個鍵,只要它們的間隔相同,那么無論這兩個鍵是在什么位置上,除了頻率高低以外,它們合成的效果都應該相同(這說法有種“一致連續”的趕腳)。從數學的角度講,也就是說:F1(t)=f(wit)+f(wjt),F2(t)=f(wmt)+f(wnt),如果j-i=n-m>0,那么存在a>0,使得F1(at)=F2(t)。簡單地說,就是我可以通過橫軸縮放,使得F1(t)與F2(t)重合。
F1(at)=f(awit)+f(awjt)=F2(t)=f(wmt)+f(wnt),于是awi=wm且awj=wn,兩式相除得到wj/wi=wn/wm。令j-i=n-m=1,這就意味著w(i+1)/wi=w(m+1)/wm=Constant對任意的i和m成立,這就證明了琴鍵頻率必須排成等比數列。
最后需要確定的是這個數列的比例系數。一個八度的頻率比例為1:2,中間有11個音,12個間隔,因此比例系數是2^(1/12)。
至于為什么中音A的頻率是440Hz,這完全是出于規定。這樣一來,所有的A音頻率都是整數(除了最低音27.5Hz),其余的音頻率全是無理數(當然實際調音的時候,只要差不多就行了……)。鋼琴上最低音頻率為27.5Hz,最高音頻率約為4186Hz。
二、聽感周期與大小調
這里還有第三個周期性----聽感上的周期性。首先來一張琴鍵圖:
?
上面這張琴鍵圖,Do、Re、Mi、。。。、Si、Do,分別對應CDEFGABC。以#代表升,b代表降,那么一個周期內的5個黑鍵依次稱為#C、#D、#F、#G、#A或bD、bE、bG、bA、bB。
我們說,兩個相鄰琴鍵的間隔稱為半音,比如C5和#C5、E5和F5、bA5和A5;中間隔一個琴鍵則稱為全音,比如C5和D5、#F5和#G5、E5和#F5。
以大調為例。C大調是以C作為Do,然后取間隔為“全,全,半,全,全,全,半”,依次確定Re、Mi、。。。、Si、Do。這些音全部在白鍵上。
當然也可以隨便找一個音定義為Do,然后按照上面所說的間隔確定相應的Re、Mi、……、Si、Do,這也構成一個大調。如果你選了圖中的D定義為Do,那么按照上面的規則構造出的就是D大調;如果你選了bE5作為Do,那么就造出了降E大調(至于為什么不叫升D大調,那是因為這個大調的音階里面有D出現,但是沒有E出現,E被替換為bE,而D還是D,沒有被替換為#D)。除了C大調以外的所有大調中都會出現黑鍵。
聽感上的周期性就在于兩點:1) 任何兩個大調,除了頻率整體的不同以外,給人帶來的聽感是完全相同的。也就是說如果你沒有絕對音高能力(就是我隨便給你彈一個音,你就能聽出來它是哪個鍵),那么我冷不丁給你來個C大調,然后過段時間再給你來個E大調,你就完全不能區分出它們的不同…2) 如果你彈C大調,從某個很低的Do開始往上彈,那么你的聽感就是(DoReMiFaSoLaSi)(DoReMiFaSoLaSi)…的循環,當然頻率會越來越高,但是除整體頻率變化之外,每個周期內音和音之間的聯系感是完全相同的。
當然還有小調,它們的間隔規則是“全,半,全,全,半,全+半,半”。例如a小調,是A B C D E F #G A。小調的效果就是比較憂郁比較冷,很容易聽出它和大調的區別。但是如果你沒有絕對音高能力,那么不同的小調在你聽來就是相同的(如果你聽到兩個小調的間隔時間夠長的話)…
一言以蔽之,就是說兩個頻率數列{ai}和{bi},你能否聽出它們的區別,取決于{ai/bi}是不是常數列。你會認為A大調和B大調、或者a小調與b小調是相同的,因為{Ai/Bi}和{ai/bi}都是常數列;但你很容易區分(DoReMiFaSoLaSi)和(FaSoLaSiDoReMi)的區別,因為它們相除不是常數列。琴鍵排列的最小正周期導致你必須等到下一組(DoReMiFaSoLaSi),才會有相同的聽感,之前的任意一組7個白鍵,聽感都是互不相同的。
作曲家喜歡用轉調,比如一首曲子,本來是A大調,中間轉成了E大調直到結尾,如果兩段的旋律相同,那作曲家和音樂家會聽出這兩段不一樣,但一般人會覺得這兩段就是在重復。也許在轉調的過程中,你能聽出一些變化來,但是轉完以后,你就分不清前后的區別了,比如kiss the rain最后一段,轉調的瞬間會讓你聽起來別扭,但是轉完了以后,你會覺得旋律和之前就是一樣的;再比如《月光》第三樂章,聽起來像是重復了3遍,前兩次確實是全同的重復,但是第三次,它就已經不在同一個調上了。更巧妙的曲子,旋律類似,但是音的間隔有微調(相當于一個數列的大小關系不變,但是間距有變化,效果類似于大調轉小調),如果兩個旋律前后隔得夠遠,一般人也有可能聽不出區別來,貝多芬經常干這種事情,比如的《悲愴》和《黎明》的第一樂章。
三、和諧與不和諧
前面提到過,聽感取決于波形。如果波形簡單,周期性好,那么聽起來就爽;反之就不爽…為了看到波形效果,我們現在假設鋼琴單音的波形就是sin,這樣幾何畫板就能畫出來了。
上述表格第二列是2^(i/12),第三列是第二列的有理數近似值,第四列是我標記音高的方式,第五列是對應的音。
最和諧的當然是八度兩個音了,它們的頻率關系是二倍,波形如下:
看起來很爽,所以聽起來也一樣。正是因為要這么爽,所以它決定了八度頻率的二倍關系。
再看一個和諧的例子。在表中可以看出So和Do的頻率關系約是1.5倍,可以猜測如果Do+So+Do,即1+5+8這三個音一起按下去,應該會很和諧。波形如下:
看上去確實很和諧,如果不相信的話,可以去鋼琴上彈一下,確實聽起來很爽。
同理,Do+Fa+Do也應該很漂亮:
?
大三和弦是Do+Mi+So,即1+3+5,這是一個協和和弦,可以看到波形如下:
雖然沒有前三張漂亮,但是對耳朵而言,這樣還算是很有規律的…
小三和弦是1+2.5+5,這個和弦就不如大三和弦那么舒服了,波形如下:
確實是有點亂,不過聽起來還算是可以。下面隨便找一個聽上去就蛋疼的組合,1+1.5+3+4,波形如下:
我看這個波形就覺得它很蛋疼,甚至還有拍頻的影子。也許你會覺得它看上去沒比小三和弦爛多少,但是如果你看到它后面的樣子:
?
你最好拿它去和Do+So+Do的波形比一下……
當然以上只是數學的一種解釋,漂亮的波形確實能產生好聽的聲音,但是蛋疼的波形不一定就會難聽。不同的音組合會給人不同的感受,就好像小調帶來憂郁抒情的氛圍,月光、辛德勒名單、肖邦夜曲第一首,(還有我軍訓時寫給14連的那首煞風景的無詞歌),這些都是用小調寫的,但如果你把小調的和弦畫成波形,那必須是很蛋疼的樣子…作曲的時候用哪些音,取決于作曲家的聽感。至于為什么不同的音樂(無非就是各種頻率和音色的音按某些規律組合)給人帶來的感受不一樣,那就不清楚了…
四、中國風音樂轉變為日本風
這是很多人感興趣的問題。我們大中華的音樂,通常用大調寫成,聽起來雄偉大氣上檔次;而小日本的音樂通常用小調寫成,聽起來陰郁狹窄甚至不乏蛋蛋的憂傷。但是如何把音樂轉變成日本風格呢?
其實說白了就是把一首大調音樂,轉換成起音相同的小調。比如有一首C大調的曲子,它對應的音階是C D E F G A B C,你應該把它轉換成c小調,對應的音階是C D bE F G bA B C。你需要做的是把這首曲子里面所有的E和A降半音,變成bE和bA,其它音保持不變。如果是G大調,那就轉成g小調,把所有的E和B降半音變成bE和bB。其它大調也類似,只不過你要小心的判斷要降的是哪兩個音。
不同的曲子在這種變換下會呈現出不同的性質。有的曲子,改完以后立刻節操盡失,變得極其小日本,我稱這一類曲子為“可日的”,或者“Fuckable”,典型的例子有《翻身的日子》、《牧童短笛》、《瀏陽河》等;有的曲子,改完以后旋律變得很怪,但是絲毫沒有日本風,甚至還能保留原來雄壯亦或是大氣的風格,頗有“寧為玉碎不為瓦全”的氣節,我稱這一類曲子為“不可日的”,或者“Unfuckable”,典型的例子是舒伯特的《軍隊進行曲》;還有的曲子改完以后,旋律很奇妙,時而有淡淡的日本風,時而又全無,時而抒情,時而蛋疼,這種既想hold住節操卻又心有余而力不足的曲子,我稱之為“半可日的”,或者“Semi-Fuckable”,典型的例子是《彩云追月》,這首改完以后更多的表現出格里格的范兒,以及詭異的沒有前后聯系感的旋律。
五、關于傅里葉
有人表示前面說的和諧不和諧,其實就是傅里葉變換。我覺得對這個問題用不上傅里葉。因為:
1. 傅里葉級數里的基函數是sin和cos,它們對于倍頻有正交性和完備性。但是鋼琴鍵的單音波形不是sin,之前設它為f(wt),它對于不同的w就不一定有正交性和完備性了,我情愿賭它根本沒有正交完備性……如果把每個單音f(wt)都以{sin(nwt), cos(mwt)}為基進行分解,那也沒有什么意義,因為我們聽到的直接就是頻率為w的f(wt)波形,而不是分解出來的AnSin(nwt)和BmCos(mwt)。
2. 如果你說把幾個音合成以后的波形再做分解,比如Do+So+Do的那個波形,那就更沒意思了。因為除了像八度這種倍頻關系的音組合以外,其它的音頻率關系都是無理數,這就意味著嚴格來說它們合成的波形是沒有周期性的。前面所說的“波形周期性好”只不過是說你一眼看上去的效果而已,看起來很有規律。對一個沒有周期性的定義域無窮的函數不能做傅里葉級數分解,而只能做傅里葉變換,這時搞出來的系數就不是離散的值,而是一個連續譜。
3. 就算你把波形做了近似,比如把Do+So+Do近似為F(t)=f(t)+f(1.5t)+f(2t),當然這個F(t)是有嚴格周期的,然后你把它給傅里葉分解了,搞出一堆系數,那也沒什么用。因為我彈琴的時候完全可以給這三個音任意的不同的力度,這會讓所有的系數全變掉,你一定會蛋碎的……你不近似直接做傅里葉變換也一樣,Φ(k)會整個變掉。
這篇文章想表達的理由是:如果幾個音的頻率關系可以約成分母很小的分數,那么它們合成的波形就會體現出很好的視覺上的周期性,那么聽起來就會和諧。在樂理里面也是類似于這么說的,你可以百度百科或維基百科一下“和弦”。
最后,就像開頭說的,“音樂不需要嚴格”,我覺得何必要用傅里葉這種大殺器來解決音樂這種小問題呢……沒有數學,音樂照樣好聽;有了數學,音樂也不會因此更好聽。何況數學比音樂要傲嬌的多了,難道你有聽說過“音樂虐我千百遍”這種說法嗎?音樂能在數學虐死我的時候把我治愈,那就足夠了......
∑編輯?|?Gemini
文章內容來自網絡,感謝原作者!
算法數學之美微信公眾號歡迎賜稿
稿件涉及數學、物理、算法、計算機、編程等相關領域
稿件一經采用,我們將奉上稿酬。
投稿郵箱:math_alg@163.com
總結
以上是生活随笔為你收集整理的为什么琴键要排成等比数列?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (pytorch-深度学习系列)深度卷积
- 下一篇: (pytorch-深度学习系列)pyto