王維濤


摘 要:對(duì)于音樂(lè)愛(ài)好者來(lái)說(shuō),學(xué)習(xí)音律學(xué)的內(nèi)容是件非常有意義的事情,音律的學(xué)習(xí)必須以聲音音響作為基礎(chǔ),轉(zhuǎn)換分析計(jì)算的數(shù)據(jù)為人耳可感知的音高(pitch),從內(nèi)心深處理解不同律制(temperament)的差異。
關(guān)鍵詞:Excel VBA;音律學(xué);律制
微軟辦公軟件Microsoft Office中的Excel,是人們廣為熟知的處理數(shù)據(jù)的工具。我們用這款數(shù)據(jù)處理軟件,計(jì)算生成所需律制的數(shù)據(jù),使用Excel VBA編寫(xiě)代碼,調(diào)用Windows API函數(shù),產(chǎn)生所需律制的音高音響。
音分(cent)是計(jì)量音程(interval)的對(duì)數(shù)單位,以等律(十二平均律Twelve-tone equal temperament)八度(octave)等分為十二個(gè)半音(semitone),每半音為100音分計(jì)。此方法由英國(guó)數(shù)學(xué)家、語(yǔ)言學(xué)家、語(yǔ)音學(xué)家亞歷山大J.埃利斯(Alexander J.Ellis 1814-1890)所倡導(dǎo)使用,埃利斯選擇半音(semitone)的百分之一,為計(jì)量基礎(chǔ)值,即12002,音分值(cent value)是當(dāng)今普遍使用測(cè)量計(jì)算音高和音程的標(biāo)準(zhǔn)方法。
音分值從0至1200,音高頻率從261.6256Hz至523.2513Hz,涵蓋鋼琴小字一組范圍。
我們使用Windows API中的硬件與系統(tǒng)類(lèi)函數(shù)Beep或APIBeep生成簡(jiǎn)單的聲音。在Excel VBA編程調(diào)用Beep或APIBeep函數(shù)聲明如下:
Declare Function Beep Lib "kernel32" Alias "Beep"(ByVal dwFreq As Long,ByVal dwDuration As Long)As Long
參數(shù):dwFreq 聲音頻率(從37Hz到32767Hz)。
dwDuration 聲音的持續(xù)時(shí)間,以毫秒為單位。
我們給出十二平均律C大調(diào)音階示例。
在已打開(kāi)計(jì)算好的音分值與音高頻率的Excel工作簿(sheet1)中,選擇“開(kāi)發(fā)工具”選項(xiàng)卡(可通過(guò)“文件”菜單中“選項(xiàng)”菜單的“自定義功能區(qū)”添加),點(diǎn)擊代碼功能區(qū)的Visual Basic圖標(biāo),打開(kāi)Microsoft Visual Basic for Applications窗口,點(diǎn)擊窗口中“插入”菜單,選擇“模塊”菜單,打開(kāi)代碼窗格,鍵入代碼:
Declare Function APIBeep Lib "kernel32" Alias "Beep"(ByVal dwFreq As Long,ByVal dwDuration As Long)As Long
Public Sub array_get_value()
Dim cent_frequ(1201,2)As Single '數(shù)組
Dim i,j As Integer '循環(huán)變量
Sheets(1).Activate
For i=0 To 1200 '數(shù)組賦值
For j=0 To 1
cent_frequ(i,j)=Sheets(1).Cells(i+1,j+1).Value
Next
Next
APIBeep cent_frequ(0,1),2000 '生成聲音
APIBeep cent_frequ(200,1),2000
APIBeep cent_frequ(400,1),2000
APIBeep cent_frequ(500,1),2000
APIBeep cent_frequ(700,1),2000
APIBeep cent_frequ(900,1),2000
APIBeep cent_frequ(1100,1),2000
APIBeep cent_frequ(1200,1),2000
End Sub切換窗口,在音分值與音高頻率的Excel工作簿(sheet1)中,選擇“開(kāi)發(fā)工具”選項(xiàng)卡,點(diǎn)擊“控件”功能區(qū)“插入”圖標(biāo),添加“按鈕”控件,窗口會(huì)自動(dòng)彈出“指定宏”對(duì)話框,選擇鍵入代碼的子過(guò)程名array_get_value,編輯“按鈕”名稱(chēng)“十二平均律C大調(diào)音階”。
點(diǎn)擊“十二平均律C大調(diào)音階”按鈕可聽(tīng)到每個(gè)音符持續(xù)2秒鐘聲音序列。
代碼中,以讀取音分值與頻率二維表組成的數(shù)組元素發(fā)出音響,使數(shù)組下標(biāo)值與音分值一致,是為方便初學(xué)者修改代碼產(chǎn)生其他律制音響序列,也可以直接使用音分值與頻率二維表單元格數(shù)值,因?yàn)楸碇兄狄?音分值開(kāi)始,所以在引用音分值時(shí),需做加1處理,例如APIBeep Cells(901,2).Value,2000,括號(hào)中的值,為音分值與頻率二維表中的行、列值,901行、2列,對(duì)應(yīng)音分值900,頻率為440Hz的值。鍵入代碼:
Declare Function APIBeep Lib "kernel32" Alias "Beep"(ByVal dwFreq As Long,ByVal dwDuration As Long)As Long
Public Subcell_get_value()
Sheets(1).Activate
APIBeepCells(1,2).Value,2000 '生成聲音
APIBeep Cells(201,2).Value,2000
APIBeep Cells(401,2).Value,2000
APIBeep Cells(501,2).Value,2000
APIBeep Cells(701,2).Value,2000
APIBeep Cells(901,2).Value,2000
APIBeep Cells(1001,2).Value,2000
APIBeep Cells(1201,2).Value,2000
End Sub
可產(chǎn)生相同效果。下面我們做分析,都使用音分值與頻率二維表組成的數(shù)組元素的值。
五度相生律(Pythagorean temperament)由基礎(chǔ)律(音)開(kāi)始,以頻率比3∶2(完美五度)產(chǎn)生新律(音),每律(音)相隔五度的律制。
以音分值與音高頻率表中的0,204,408,498,702,906,1110,1200,音分值可生成五度相生律大調(diào)音階。以音分值與音高頻率表中的0,204,294,498,702,792,996,1200,音分值可生成五度相生律小調(diào)音階。
純律(Pure temperament)由基礎(chǔ)律(音)開(kāi)始,以頻率比3∶2,頻率比5∶4產(chǎn)生新律(音)的律制。
以音分值與音高頻率表中的0,204,386,498,702,884,1088,1200,音分值可生成純律大調(diào)音階。以音分值與音高頻率表中的0,204,316,498,702,814,1018,1200,音分值可生成純律小調(diào)音階。
中庸全音律(Meantone temperament)是在歐洲應(yīng)用數(shù)百年,兼有五度相生律和純律優(yōu)點(diǎn)的律制。
以音分值與音高頻率表中的0,193,386,504,697,890,1083,1200,音分值可生成中庸全音律大調(diào)音階。以音分值與音高頻率表中的0,193,311,504,697,814,1007,1200,音分值可生成中庸全音律小調(diào)音階。
比照前述十二平均律C大調(diào)音階示例,在音分值與音高頻率的Excel工作簿(sheet1)中,選擇“開(kāi)發(fā)工具”選項(xiàng)卡,打開(kāi)Microsoft Visual Basic for Applications窗口,點(diǎn)擊窗口中“插入”菜單,選擇“模塊”菜單,在代碼窗格,鍵入代碼(各律制代碼,可輸入在單模塊中,也可輸入在各自獨(dú)立模塊中;各律制代碼輸入在單模塊中,最好做代碼優(yōu)化,輸入在多模塊中,模塊名稱(chēng),按序號(hào)自動(dòng)增加),切換至“開(kāi)發(fā)工具”選項(xiàng)卡,選擇“控件”功能區(qū)“插入”圖標(biāo),添加“按鈕”控件,在自動(dòng)彈出的“指定宏”對(duì)話框中,選擇鍵入代碼相關(guān)的子過(guò)程名,編輯按鈕名稱(chēng)為對(duì)應(yīng)律制名稱(chēng)。
此方法也可應(yīng)用在民族律制的學(xué)習(xí)中。
參考文獻(xiàn):
[1]繆天瑞.律學(xué)[M].北京:人民音樂(lè)出版社,1996.
[2]王光祈.中國(guó)音樂(lè)史[M].上海:三聯(lián)書(shū)店,2014.