本文刊載於武漢樂學院學報《黃鐘》1999-1、2期

    音的性質(於電腦內)數據化的商榷(一)

    ── 音高、音調、音程、音長

     

        這裡所指的"音的性質",是指人耳對音所生的客觀感受與反應而言。如:音之高低、音之長短、音之音色、音之強弱....等。

        這些性質,在電腦資訊中,自然都是以數據(或說數位)的型態,來模擬、記錄、轉換的。Midi的本義,其實就是就是這種數據化的『標準』之一。

        筆者因為立願從事古琴譜之電腦翻譯、抄製與出版,又須兼及一般樂譜與工尺譜的繕製,因此不得不自行設計轉譜程式,經近十年來的研思與改進,自然也自行發展出一套標準,相信與Midi雷同的可能性極少,願在此先對音高、音調、音長部份加以披露,以就教同好!

                              ---導言---

     

        有的系統把樂音資訊,當作一般文書資料來看待。如以.5 ─ ─ 表示三拍的高音So之類。這種方式太過原始,不利於資料的再處理與轉化,又很浪費記憶體。

     本身也無法適應音樂的要求。

        我們心目中的樂音資訊是數據化的。他以數位的方式,存儲於電腦主記憶體及輔助記憶體內,當我們要運用他時,才透過程式內的公式來轉化、翻譯,並以我們所須要的各種型態出現。

        現在所稱的Midi就類同於此種觀念。

     

                            ---音高、音調部份---

     

        我們設計音高在電腦數據中的表示法時,有幾個問題是要加以考量的:除須顧及音程之不規則性之外(如自然音階中,有些鄰音是全音,有些卻是半音,si-Do移調時就不能是Fa-So而應是#Fa-So之類),還須顧及不同音域,及(臨時及調性)#、b記號的表示法,及在運算及轉(調)換(算)之方便性問題。

        第一種可想到的設計,是把Do定為0、Re定為2、Mi定為4、Fa定為5、So定為7、La定為9、Si定為11,之類。即半音間之數據差一,全音間之數據差二。但0(Do)與2(Re)之間的1,究應為#Do呢?還是bRe呢?在這個問題有答案之前,全音之數據兩倍於半音之數據的這種設計,意義就不大。因此我們不須考慮這種設計。

        第二種設計,是參考簡譜,把Do定為1、Re定為2、Mi定為3、Fa定為4、So定為5、La定為6、Si定為7之類。即無論半音全音,數據均差一,不必管其鄰音音程之不同。至於#、b號,則採用每音另配屬一個記憶體作為旗號的辦法,遇有符號,則通知此旗號易幟,當然也就可以表示bb、b、%、#、X、及『無』,等六種臨時或調性符號了。這種辦法要用到兩個以上的位元組,(高低八度若再用一位元組,就須三個位元組以上)所用的位元組(Bytes),本身又未充分利用。因此音符越多,浪費就越大。且轉調、移調時如何簡便的變換#b號呢?這也是大問題之一!

        幾經研思,我採取的第三種設計,則完全放棄音列式的級進表示法,而改採五度環的表示法,如下:

     

     

    bb

    bb

    bb

    bb

    bb

    bb

    bb

     b

    b

    b

    b

    b

    b

    b

     

     

     

     

     

     

     

    #

    #

    #

    #

    #

    #

    #

    X

    X

    X

    X

    X

    X

    X

       

    Fa

    Do

    So

    Re

    La

    Mi

    Si

    Fa

    Do

    So

    Re

    La

    Mi

    Si

    Fa

    Do

    So

    Re

    La

    Mi

    Si

    Fa

    Do

    So

    Re

    La

    Mi

    Si

    Fa

    Do

    So

    Re

    La

    Mi

     Si

    數據代值

    -15

    -14

    -13

    -12

    -11

    -10

     -9

     -8

     -7

     -6

     -5

     -4

     -3

     -2

     -1

     

     

     7

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

     

        這種設計,八度內的35個(包括各種異名同律位音)含升降符號音,每一音皆可有明確定義的數據代值。(──最大數據與最小數據,差34)

        我們若用-15到+19,這些整數數據代值來代表音高,則程式該如何轉換這些代值,為音樂上的音名呢?如何轉調呢?

        可以透過我們所設計的,下面這三個公式:

     

    公式甲:基本音名(無升降號)=〔(代值(有升降號) X 4)+1〕/7的餘數

            譬如 La=6,即=〔(代值3X4)+1〕/7=13/7之餘數 6

              如 Si=7,即=〔(代值5X4)+1〕/7=21/7之餘數 7

    21/7之餘數本為0,可見餘數若小或等於0,必須加上7,方合我們的須

    要,       

    由此bSo=5,即=〔(代值-6  X4)+1〕/7 =-23 /7之餘數=-2+7

       bbRe=2,即=〔(代值-12 X4)+1〕/7 =-47 /7之餘數=-5+7

        #So=5,即=〔(代值8 X4)+1〕/7 =33/7之餘數5

     

     公式乙: 當 -15 <=代值<= -9   有一 『bb』符號

              當 - 8 <=代值<= -2   有一 『 b』符號
              當 - 1 <=代值<=  5   無      符號

              當   6 <=代值<= 12   有一 『 #』符號

              當  13 <=代值<= 19   有一 『 X』符號

     

     公式丙: 移高五度調(多一升記號,或少一降記號的調)只要將代值全減一。

             移低五度調(多一降記號,或少一升記號的調)只要將代值全加一。

     

             移高二度調(多兩升記號,或少兩降記號的調)只要將代值全減二。

             移低二度調(多兩降記號,或少兩升記號的調)只要將代值全加二。

     

             移高六度調(多三升記號,或少三降記號的調)只要將代值全減三。

             移低六度調(多三降記號,或少三升記號的調)只要將代值全加三。

     

              :::::::::::::::::::::::::::::

    依此類推,升降號可自動調整...........................

     

        移高五度調後,原音名必轉化為低五度了;移低五度調後,原音名必轉化為高五度了。

        這是移高五度,要減一,移高二度要減二....;

    這是移低五度,要加一,移低二度要加二....,剛好反相的原理。

        這種五度環的對應表示法,有此三公式來處理之後,相對於一般的鄰音列對應法,應是簡捷又方便許多的。

     

        不過這種表示法,代值是有正負值的,電腦處裡有正負之數值時,必須浪費一個位元來表示正負符號。我們為了節約位元,以便可只用一位元組,就能同時表示音名與音域,最好將代值再全改為正數。

        我們預備只用5個位元來處理音高代值,(三個位元來處理音域)。則因2^5=32 < 35。因此我們必須放棄上述五度環的頭尾三音(bbFa、xMi與xSi─反正這三音本也就是絕少用到的!)則35-3=32,才能剛好可用五個位元來表達。1 Byte 有八位元,基本音名只用掉五個,如此省下的三位元(8-5=3),我們才可以用來表達(2^3=8)八個八度的音域(見後所述)。

        總之這種作法的目的,是為了節約位元,使基本音名、#b符號、音域等三個有關音高與音調的音性,可以只用一個Byte的數位,就全得以表達清楚!對這個只有正數,不用負數的資料變數(記憶體)型態,我們則可以透過加上 Unsigned (以C語言為例)修飾詞的辦法,來通知電腦,取消正負號,如此就可以達到多一位元來運用之目的。

        修正後的代值如下:

     

    bb

    bb

    bb

    bb

    bb

    bb

    bb

     b

    b

    b

    b

    b

    b

    b

     

     

     

     

     

     

     

    #

    #

    #

    #

    #

    #

    #

    X

    X

    X

    X

    X

    X

    X

       

    Fa

    Do

    So

    Re

    La

    Mi

    Si

    Fa

    Do

    So

    Re

    La

    Mi

    Si

    Fa

    Do

    So

    Re

    La

    Mi

    Si

    Fa

    Do

    So

    Re

    La

    Mi

    Si

    Fa

    Do

    So

    Re

    La

    Mi

     Si

    數據代值

    放棄

     

     

     7

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    放棄

    放棄

     

     修正公式甲:基本音名(無升降符號)=〔(代值(有升降符號) X 4)+1〕/7的餘數。公式甲,基本上並無改變,只是少了餘數小於0時之處理。(餘數若等於0,就直接轉換為7)。更形簡單!由此公式可知:

    代值為 0、 7、14、21、28除七之餘數為0者,基本音名為Do(1);

        代值為 2、 9、16、23、30除七之餘數為2者,基本音名為 Re(2);

        代值為 4、11、18、25     除七之餘數為4者,基本音名為 Mi(3);

        代值為    6、13、20、27  除七之餘數為6者,基本音名為 Fa(4);

        代值為1、 8、15、22、29  除七之餘數為1者,基本音名為 So(5);

        代值為3、10、17、24、31  除七之餘數為3者,基本音名為 La(6);

        代值為5、12、19、26      除七之餘數為5者,基本音名為 Si(7);

        下面談到移調時,我們還會運用到此規則。

     修正公式乙: 當     0 <=代值<=  5 有一 『bb』符號

                  當   6 <=代值<= 12 有一 『 b』符號

                  當  13 <=代值<= 19 無      符號

                  當  20 <=代值<= 26 有一 『 #』符號

                  當  27 <=代值<= 31 有一 『 X』符號

     

     公式丙不變: 移為高五度調,只要將代值全減一。

                  移為低五度調,只要將代值全加一。

    依此類推,升降號可自動調整

     

        現在,八度內之七個基本音已可用一Byte 的數據代值來處理了,我們再來研討高低八度如何表示的問題?依自然數級進法,即:

    Do定為1、Re定為2、....Si定為7、

           .              

    Do定為8、Re定為9...Si定為14、

    :

    Do定為15....之類的辦法,

    高一八度數據值就要+7,

    低一八度就要-7。

    若音域為八個八度,則最大數與最小數差56。

        這種方法顯然不適於我們採用。我們因為已兼顧#b號的關係,一個八度內數據代值已差32,則高低八度不能只加減7,而最少要加減32。(前面我們已將八度內之異名同律位基本音,由35個縮減為32個)。

        電腦記憶體的一Byte,有八個位元,我們既已將前五位元(2^5=32個數位)來表示八度內之32個異名同律位音,則剩下的三個位元,正可以表達(2^3=8)八個八度。用自然數來說,就是每升降八度要加減32。但對二進位的(後三)位元來說,則升降八度,只要加減1而已。下面是用用位元來表示之對應情形:

                                       二進位      十進位

                                     後三位元值    自然數

             大字二組 = 000 00000      000 = 0     + 0 x 32 =  0

             大字一組 = 001 00000      001 = 1     + 1 x 32 = 32

             大字  組 = 010 00000      010 = 2     + 2 x 32 = 64

             小字  組 = 011 00000      011 = 3     + 3 x 32 = 96

             小字一組 = 100 00000      100 = 4     + 4 x 32 = 128

             小字二組 = 101 00000      101 = 5     + 5 x 32 = 160

             小字三組 = 110 00000      110 = 6     + 6 x 32 = 192

             小字四組 = 111 00000      111 = 7     + 7 x 32 = 224

     

         程式如何分別讀取一個位元組的後三位元,及前五位元,又分別轉換成音域及基本音名呢?辦法很多!我個人所採的辦法是:

     

        1、讀取前五位元值時:用 000 11111 (即十進位之 31) 與代值 作 AND 之運算,

            XXX XXXXX

    AND  000 11111

    -------------------------------------

              000 XXXXX  

    可得到前五位元十進位值0 - 31(含升降號之代值)

     (即相當於,取代值除以32之餘數)乘4後加1,再除以7,即為基本音名(無升降號)代值1-7。

        2、讀取後三位元值時:用 111 00000 (即十進位之224) 與代值 作 AND 之運算,

    XXX XXXXX

        AND  111 00000

      -------------------------------------

              XXX 00000  

    可得到 後三位元十進位 0 - 224除以32 後即為音域代值 0 - 7                               (即相當於,取代值除以32之商數)

     

                    ------移調時對音域的影響部份------

     

     以平移為高五度調為例,五度轉換後,有四音名(1234),必須轉化為低八度,如下:

                                       #

                                   . .  . .

                        名 5 6 71 2 3 4

                                        .

        平移為高五度調後之音名 1 2 34 5 6 71

        -------------------------------------------------------------------

      以平移為高大二度調為例,二度轉換後,有一音名(1),必須轉化為低八度,如下:

                                  #    #.

                        名 2 3 45 6 7 1

                                        .

        平移為高二度調後之音名 1 2 34 5 6 71

        -------------------------------------------------------------------

     以平移為低五度調為例,五度轉換後,有四音名(4567),必須轉化為高八度,如下:

                                    b

                        名 4 5 67 1 2 3

                               . . ..

                                           .

        平移為低五度調後之音名 1 2 34 5 6 71

        ----------------------------------------------------------------------

    以平移為低大二度調為例,二度轉換後,有一音名(7),必須轉化為高八度,如下:

                               b    b

                        名 7 1 23 4 5 6

                               .           .

          .

        平移為低二度調後之音名 1 2 34 5 6 71

        ----------------------------------------------------------------------

    歸納後,應如下所示:

     

          CCCCCCCCCCCCCC    CCCCCCCCCCCCCC

          調調調調調調調調調調調調調調    調調調調調調調調調調調調調調

          移移移移移移移移移移移移移移    移移移移移移移移移移移移移移

          為為為為為為為為為為為為為為    為為為為為為為為為為為為為為

                  #b                    #b   

          CDDEEFFGGAABBC    CDDEEFFGGAABBC

          調調調調調調調調調調調調調調    調調調調調調調調調調調調調調

          --------------    --------------

            523416614325        523416614325

           b#b#b#b#b#b#       b#b#b#b#b#b#

            記記記記記記記記記記記記        記記記記記記記記記記記記

            號號號號號號號號號號號號        號號號號號號號號號號號號

          --------------    --------------

              應降低八度(代值減32)之音      應升高八度(代值加32)之音

          --------------    --------------

              Do  Do  Do  Do  Do  Do        Si  Si  Si  Si  Si  Si

                  Re   Re  Re  Re  Re        La  La  La  La  La   

                       Mi  Mi  Mi  Mi        So  So  So  So      

                           Fa   Fa  Fa        Fa  Fa           

                                So  So        Mi  Mi            

                                    La        Re                   

          --------------    --------------

              代 值 除 七 之 餘 數 為       代 值 除 七 之 餘 數 為

          --------------    --------------

                       

                       1               

                                

                        3          3 3   

                   4               

                                         5 5 5   

                                         

          --------------    --------------

        由上表可知:

        C調移為bD調(5b記號)時,應先將原Si、La、So、Fa、Mi、Re六音升高八度,再轉換。

        換句話說,必須通知電腦(程式)原代值除七之餘數,為1、2、3、4、5、6者,除要加減平移之代值(此處為減五──因兩調差五降記號)之外,還要將代值再加32 。

        C調移為 B調(5#記號)時,應先將原La、So、Fa、Mi、Re、Do六音降低八度,再轉換。

        換句話說,必須通知電腦(程式)原代值除七之餘數,為6、0、1、2、3、4者,除要加減平移之代值(此處為加五──因兩調差五升記號)之外,還要將代值再減32 。

      餘類推。

     

         以後我們會談到,翻譯古琴譜時,會計算各空絃之音高(程)代值+徽位之音高(程) 代值(+泛音之音高(程)代值)。通常會超過好幾個八度,我們其實可以用更簡便的方法來應付此種音名轉換時,對音域的影響。

        以Do(1)為例,其五度為So(5),在同一八度內。代值只要加1,無須再加音域值(3 2);

                                 . .

            以So(5)為例,其五度為Re(2),在高一八度上。代值就要加1後,再加音域值(32) 。

     公式丁:

         也就是說:無論升高幾度(八度內)後,基本音名也變大的(如5>1),可知就在同一八度內,無須加32;無論升高幾度(八度內)後,基本音名反變小的(如2>5),可知必在高一八度上,須再加32。

       反之:無論降低幾度(八度內)後,基本音名也變小的(如1<5),可知就在同一八度內,無須減32;無論降高幾度(八度內)後,基本音名反變大的(如5>2),可知必在低一八度下,須再減32。

     

         而基本音名之值,則可用修正公式甲:

    基本音名(無升降符號)=〔(代值(有升降符號) X 4)+1〕/7的餘數,         (餘數若等於0,就直接轉換為7)先行計算出後,再作比較及處理。

     

                            ---音程、和絃部份---

     

         電腦製譜的第一步,面臨的就是音符輸入問題。基本旋律的輸入,無疑是無論如何,都難以省略減免的。但和絃部份既有樂理規則可尋,則和絃之實音我們就希望能不必一一輸, 而期盼能改採只用和絃記號通知電腦(程式),就能自行完成輸入的方式。如此才更能充分 發揮電腦的人工智慧,減免不必要的枯燥工作。

        早期鋼琴譜,及現行的吉它譜,就是採用只記和絃名稱,不必記出和絃實音之制度的!

         音程與和絃如何設計呢?

         上述五度環上具升降符號音(由0至31)之代值,因為是一種一對一的嚴格對應函數,洽是一組值得採用的數據。

        譬如純五度音程,其代值差必為一。反之代值差為一者,又必為純五度音程。

        再如大二度音程,其代值差必為二。反之代值差為二者,又必為大二度音程。

        再如小二度(自然半音)音程,其代值差必為五。反之代值差為五者,又必為小二度音程。

        而增一度(變化半音)音程,其代值差必為七。反之代值差為七者,又必為增一度音程。

        我們可由此觀察出原位大三和絃(如Do/Mi/So)之代值(此例為14/18/15),中音與低音之代值差(A值)為四,高音與低音之代值差(B值)為一。現在我們就可以(四/一)來代稱大三和絃之原位了。此值我把它叫作和絃的『AB值』。其中A值是中音與低音的代值差;B值是高音與低音的代值差。合稱『AB值』。

       我們可以進一步發現,只要三音之組合,其『AB值』為(四/一)的,都是大三和絃原位。只要是原位大三和絃其『AB值』又必是(四/一)。

       同理我們可求出各基本三和弦之『AB值』,如下:

         大三和絃原位之    『AB值』:( 四/ 一)如 (Do/Mi/ So)之(14/18/15)

         小三和絃原位之    『AB值』:(負三/ 一)如 (Mi/So/ Si)之(18/15/19)

         增三和絃原位之    『AB值』:( 四/ 八) 如 (So/Si/#Re)之(15/19/23)

         減三和絃原位之    『AB值』:(負三/負六)如 (Si/Re/ Fa)之(19/16/13)

     

         大三和絃第一轉位之『AB值』:(負三/負四)如 (Mi/ So/Do)之(18/15/14)

         小三和絃第一轉位之『AB值』:(  四/ 三)如 (So/ Si/Mi)之(15/19/18)

         增三和絃第一轉位之『AB值』:( 四/負四) 如 (Si/#Re/So)之(19/23/15)

         減三和絃第一轉位之『AB值』:(負三/  三)如 (Re/ Fa/Si)之(16/13/19)

     

         大三和絃第二轉位之『AB值』:(負一/ 三)如 ( So/Do/Mi)之(15/14/18)

         小三和絃第二轉位之『AB值』:(負一/負四)如 ( Si/Mi/So)之(19/18/15)

         增三和絃第二轉位之『AB值』:(負八/負四) 如 (#Re/So/Si)之(23/15/19)

         減三和絃第二轉位之『AB值』:( 六/  三)如 ( Fa/Si/Re)之(13/19/16)

     

         原位、第一轉位、第二轉位之『AB值』應有下列關系,可供我們核對:

         設原位之A值為X,B值為Y,則第一轉位之A值為Y-X;B值為 -X;

         設原位之A值為X,B值為Y,則第二轉位之A值為 -Y;B值為X-Y。

     

         有了上面這份對照表,我們就可以在已輸入低音後,用再通知電腦(程式),各三和絃之中音與高音,和低音之代值差(音程)各是多少的辦法,讓電腦自行輸入完整的和絃。

     

        至此我們還不滿足,我們還希望再建立起其它的常用和絃,尤其是七和絃的 『AB值』對照表,因為七和絃的輸入工作比三和絃更繁複、枯燥而易錯。更須要發揮電腦的人工智慧。

      下面是我們整理出來的,已可供電腦運用的,其它各常用(七)和弦之『AB值』對照表:

        降上主音增六和弦之『AB值』:(  四/  十) 如 (bRe/ Fa/ Si)之( 9/13/19)

          拿波列頓六和絃之『AB值』:(負三/負四) 如 ( Fa/bLa/bRe)之(13/10/ 9)

       屬音變體(小)三和絃之『AB值』:(負三/  一) 如 ( So/bSi/ Re)之(15/12/16)

        降下中音增六和弦之『AB值』:(  四/  十) 如 (bLa/ Do/#Fa)之(10/14/20)

     降導音變體(小)三和絃之『AB值』:(負三/  一) 如 (bSi/bRe/ Fa)之(12/ 9/13)

          主音變體七和弦之『AB值』:( 四/ 一/負二) 如 ( Do/ Mi/ So/bSi)之(14 /18/15/12)

     降上主音四音增六和弦之『AB值』:(  四/ 一/ 十) 如 (bRe/ Fa/bLa/ Si)之( 9 /13/10/19)

     降上主音四音增六和弦之『AB值』:(  四/ 六/ 十) 如 (bRe/ Fa/ So/ Si)之( 9 /13/15/19)

         上主音變體七和弦之『AB值』:( 四/ 一/負二) 如 ( Re/#Fa/ La/ Do)之(16 /20/17/14)

       上主音減三小七和弦之『AB值』:(負三/負六/負二) 如 ( Re/ Fa/bLa/ Do)之(16 /13/10/14)

     下屬音大三和弦加小七之『AB值』:( 四/ 一/負二) 如 ( Fa/ La/ Do/ Mi)之(13 /17/14/11)

           下屬(大)七和絃之『AB值』:(  四/ 一/  五) 如 ( Fa/ La/ Do/ Mi)之(13 /17/14/18)

                 屬七和絃之『AB值』:(  四/ 一/負二) 如 ( So/ Si/ Re/ Fa)之(15 /19/16/13)

     屬音減五小七變體和弦之『AB值』:(負三/負六/負二) 如 ( So/bSi/bRe/ Fa)之(15 /12/ 9/13)

     降下中音四音增六和弦之『AB值』:(  四/ 一/ 十) 如 (bLa/ Do/bMi/#Fa)之(10 /14/11/20)

         降下中音增六和弦之『AB值』:(  四/ 六/ 十) 如 (bLa/ Do/ Re/#Fa)之(10 /14/16/20)

                 小七和絃之『AB值』:(負三/ 一/負二) 如 ( La/ Do/ Mi/ So)之(17 /14/18/15)

       下中音減三小七和弦之『AB值』:(負三/負六/負二) 如 ( La/ Do/bMi/ So)之(17 /14/11/15)

       降導音大三小七和絃之『AB值』:(  四/ 一/  五) 如 (bSi/ Re/ Fa/ La)之(12 /16/13/17)

               導音七和弦之『AB值』:(負三/負六/負二) 如 ( Si/ Re/ Fa/ La)之(19 /16/13/17)

           導音變體七和弦之『AB值』:( 四/ 一/負二) 如 ( Si/#Re/#Fa/ La)之(19 /23/20/17)

                            ---音長部份---

         音長的數據設計,牽涉到附點與雙附點,附點音符拍長要加一半,雙附點要再加四分之一,這正是一種二進位的體系。不但如此,其它音符的原始設計,以電腦的觀點來看,其實也都是二進位式的,譬如:

     

                全音符之拍長,等於二分音符的兩倍;

              二分音符之拍長,等於四分音符的兩倍;

              四分音符之拍長,等於八分音符的兩倍;

              八分音符之拍長,等於16分音符的兩倍;

              16分音符之拍長,等於32分音符的兩倍;

              32分音符之拍長,等於64分音符的兩倍。

     

        所以音長代值正適用於,採二進位之位元,來對應處理,是我們很容意想到的,以下是其對應表:

     

          數據代值   對應位元圖       音符種類    

          --------      ----------          --------      ------

           128       1000 0000          全音符    

            64       0100 0000        二分音符    

            32       0010 0000        四分音符    

            16       0001 0000        八分音符   1/2 拍

             8       0000 1000        16分音符   1/4 拍

             4       0000 0100        32分音符   1/8 拍

             2       0000 0010        64分音符   1/16拍

             1       0000 0001       128分音符   1/32拍

     

           192       1100 0000    附點  全音符    

            96       0110 0000    附點二分音符    

            48       0011 0000    附點四分音符   3/2 拍

            24       0001 1000    附點八分音符   3/4 拍

            12       0000 1100    附點16分音符   3/8 拍

             6       0000 0110    附點32分音符   3/16拍

             3       0000 0011    附點64分音符   3/32拍

     

           224       1110 0000  雙附點  全音符    

           112       0111 0000  雙附點二分音符   7/2 拍

            56       0011 1000  雙附點四分音符   7/4 拍

            28       0001 1100  雙附點八分音符   7/8 拍

            14       0000 1110  雙附點16分音符   7/16拍

             7       0000 0111  雙附點32分音符   7/32拍

     

          以自然數排序後,整理如下:

     

           224       1110 0000  雙附點  全音符    

           192       1100 0000    附點  全音符    

     

           128       1000 0000          全音符    

           112       0111 0000  雙附點二分音符   7/2 拍

            96       0110 0000    附點二分音符    

     

            64       0100 0000        二分音符    

            56       0011 1000  雙附點四分音符   7/4 拍

            48       0011 0000    附點四分音符   3/2 拍

     

            32       0010 0000        四分音符    

            28       0001 1100  雙附點八分音符   7/8 拍

            24       0001 1000    附點八分音符   3/4 拍

     

            16       0001 0000        八分音符   1/2 拍

            14       0000 1110  雙附點16分音符   7/16拍

            12       0000 1100    附點16分音符   3/8 拍

     

             8       0000 1000        16分音符   1/4 拍

             7       0000 0111  雙附點32分音符   7/32拍

             6       0000 0110    附點32分音符   3/16拍

     

             4       0000 0100        32分音符   1/8 拍

             3       0000 0011    附點64分音符   3/32拍

             2       0000 0010        64分音符   1/16拍

             1       0000 0001       128分音符   1/32拍

     

         由上表可知,音長代值之範圍,係由1至224,若只用位元組中之七個位元來表示,則因 2^6 + 2^5 + 2^4 + 2^3 + 2^2 + 2^1 + 2^0 =127 ,所以是不夠的。仍必須採用,放棄 第八位元表示正負數(拍長並無負數!)的作法,用 Unsigned 修飾詞,以增加一位元,用全 一Byte中八位元的方式,來處理拍長代值。

     

        公式戊:拍長與代值之間的關係規則是:代值 = (拍長 X 32) 。

        也就是說我們存在電腦中的拍長代值是實際拍長的32倍。我們若直接用拍長值存入電腦,則1/32=0.03152,並非整數,而電腦處理非整數較慢,記憶體也會造成浪費。這是我們以拍長值之32倍,為拍長數據代值,作數位存取的原因。

     

        這種專用後三位元來代表音域,前五位元代表音名,另以一Byte代表音長的辦法,均參考了電腦記憶體以位元為處理單位的二進位特性。我們知道電腦對位元式的運算,快於對自然數的運算。資料較龐大時,如何節約記憶體,也是音樂電腦數據化的重要考量點,這是我們不怕麻煩,屢用公式轉換代值,以便參用位元特性,來設計音性數據值的主要兩個原因。

        當我們要把拍長全乘以二(或除以二)時,只要將代表拍長的位元組,其中之資料左移 (或右移)一次。當我們要將音域提高八度(或降低八度),只要將代表音高的位元組,後三位元之資料加一(或減一)一次。當我們要平移高五度(或低五度)時,只要將代表音高的位元組 ,前五位元之資料減一(或加一)一次,依此類推。

       以十進位數來說,就是:

       1:拍長代值,由1-224。拍子延長一倍,代值乘以2;拍子縮小一倍,代值除以2。

       2:音名代值,由0-31 。音名升高五度,代值加以1;音名降低五度,代值減以1。

                        音名升高二度,代值加以2;音名降低五度,代值減以2。

    餘類退推。

      3:音域代值,由0-7,音域提高八度,代值加以32;音域降低八度,代值減以32。

       無論升高幾度,基本音名反變低者,必已進入高八度,代值須再加以32;

       無論降低幾度,基本音名反變高者,必已進入低八度,代值須再減以32。

    .


     

    音的性質(於電腦內)數據化的商榷(二) ─古琴譜音高之翻譯部份           

     

    內容提要:

    文本介紹用電腦程式,翻譯古琴譜之基本原理。琴譜中與音高翻譯有關之訊息是調序、絃序、徽位、使用泛音與否。本文介紹一公式,可由此四參數,計算出音高。最後描述此程式的操作方法與流程。

    關 鍵 詞:電腦音樂 古琴譜翻譯

     

                               空絃之音高計算公式

     

         用電腦翻譯古琴譜之音高時,要計算(各調各)空絃之音高、徽位之音高、泛音之音高。

         其中以空絃之音高計算公式最為複雜。所幸我們終於找到了幾個公式。

         古琴有『琴譜五調』之說,因為以古琴(最低)的第一絃來看,只有為宮、為商、為角 、為徵、為羽五種調子。故也有只稱為宮調、商調、角調、徵調、羽調等五調的。

         若以含固定音高觀念的律調名來看,『琴譜五調』究屬何調?則因琴派的不同,(有的以黃鐘調為徵調、有的以仲呂調為徵調),就有多種系統。

         但我們分析起來,古琴的基本轉調法只有兩種:

         (一)、以慢宮為角法,轉高五度調;

         (二)、以緊角為宮法,轉低五度調。

         若以F調為基本調,則︰

    以慢宮為角法,可轉出 C、G、D、A四調;

        以緊角為宮法,可轉出bB、bE、bA、bD四調;

         各家之『琴譜五調』必包括在此九調之內。各調之調序編號,及各絃各調之音名如校︰

     

                           各琴調空絃音位對應表:

                                       

                          緊角法四調        慢宮法四調

                        ┌──────┐ 調 ┌──────┐

     

          調                          

          調          bD  bA bE bB F C G D A

          調                          

                         調  調    調  調  調  調  調  調

          ----------------------------------------------------------------------------------

          第一絃(C絃)                   

          第二絃(D絃)                    3 

          第三絃(F絃)                   

          第四絃(G絃)                  

          第五絃(A絃)                   

          第六絃(C絃)                   

          第七絃(D絃)      5 1           

     

          我們現僅以第一絃各調之唱名,與調序之關係來看,可知有如下之關係:

     

          調                           

          --------------------------------------------------------------------------------

          第一絃(C絃)唱名1               

          唱名代碼        14  18  17  16  15  14  18  17  16

     

    故第一絃之唱名代碼必=(10-調序)%5的餘數+14

    以第二絃各調之音名,與調序之關係來看,可知有如下之關係:

     

     

          調                           

          -------------------------------------------------------------------------------

          第二絃(C絃)                   

          唱名代碼        16  15  14  18  17  16  15  14  18

     

    故第二絃之唱名代碼必=(12-調序)%5的餘數+14

    同理第三絃之唱名代碼必=(14-調序)%5的餘數+14

    同理第四絃之唱名代碼必=(16-調序)%5的餘數+14

    同理第五絃之唱名代碼必=(18-調序)%5的餘數+14

    同理第六絃  同第一絃唱名代碼高八度。  42-

    同理第七絃  同第二絃唱名代碼高八度。  44-

     

      此五公式形式全同,只有第一個被減數不同,被減數與絃序之關係如下:

     

                絃 序   一 二 三 四 五

                ------------------------------------------------  (第六、七絃?)

                被減數      10  12  14  16  18

     

            可見被減數 =  8 + 2 x ( 絃序 ) 

                          2 x ( 4 + 絃序 )

     

         因此,此五公式實可合併為一公式,如下:

     

         唱名代碼 ={〔2 x ( 4 + 絃序 )〕- 調序 }% 5 的餘數  + 14

     

         若以X表示唱名代碼、D表示調序、S表示絃序,此公式為︰

     

         公式己 : X =[(( 2 x ( 4 + S )) - D ) % 5 ] + 14

     

         以第五絃(A絃、絃序為5)為例,A調時(調序為8)其空絃音名代碼,經計算為

     

         唱名代碼 ={〔2 X ( 4 + 5 )〕- 8 }% 5 的餘數 + 14

                  ={〔2 X  9〕- 8 }% 5 的餘數 + 14

                  ={18 - 8 }% 5 的餘數 + 14

                  ={10 }% 5 的餘數 + 14

                  = 0 + 14

                  = 14  (為宮,即Do的代碼) 洽合於上述之各琴調空絃音位對應表。

     

         再以第二絃(D絃、絃序為2)為例,D調時(調序為7)其空絃音名代碼,經計算為

     

         唱名代碼 ={〔2 X ( 4 + 2 )〕- 7 }% 5 的餘數 + 14

                  ={〔2 X 6 〕- 7 }% 5 的餘數 + 14

                  ={ 12 - 7 }% 5 的餘數 + 14

                  = 5 % 5 的餘數 + 14

                  = 0 + 14

                  = 14  (仍為宮,即Do的代碼) 亦洽合於上述之各琴調空絃音位對應表。

     

         基本音名之值,與唱名代碼之關係,即修正公式甲:

         基本音名=〔(唱名代碼X4)+1〕%7的餘數,(餘數若等於0,就直接轉換為7)。

     

         公式庚:各調各絃之基本音名=[(唱名代碼 X 4 ) + 1 ] % 7 的餘數,

    ={{[ 2X (4+絃序) - 調序 ] % 5 的餘數 + 14 } X 4   + 1 }% 7 的餘數, (餘數若等於0,就直接轉換為7)。

     

         以上就是可以被電腦運算的,計算古琴空絃音高,與調序、絃序間關係的通用公式。 (高八度絃,還要參考公式丁加以32!)

     

         完整的各調、各絃之音名代碼,應如下所示:

     

          調                          

          調           bD bA bE bB F C G D A

          調                          

                         調  調  調  調  調  調  調  調  調

       --------------------------------------------------------------------------------

      第 1絃(C絃)代碼   0   4   3   2   1   0   4   3   2

      第 2絃(D絃)代碼   2   1   32  4   3   2   1   32  4

      第 3絃(F絃)代碼   4   3   34  1   32  4   3   34  1

      第 4絃(G絃)代碼   1   32  36  3   34  1   32  36  3

      第 5絃(A絃)代碼   3   34  33  32  36  3   34  33  32

      第 6絃(C絃)代碼   32  36  35  34  33  32  36  35  34

      第 7絃(D絃)代碼   34  33  64  36  35  34  33  64  36

     

       以上,是以Do為0之代碼,以bbDo為0時,Do之代碼則為14,上表須修正為

          調                           

          調            bD bA bE bB F C G D A

          調                           

                          調  調  調  調  調  調  調  調  調

       ---------------------------------------------------------------------------------------

      第 1絃(C絃)代碼   14  18  17  16  15  14  18  17  16

      第 2絃(D絃)代碼   16  15  46  18  17  16  15  46  18

      第 3絃(F絃)代碼   18  17  48  15  46  18  17  48  15

      第 4絃(G絃)代碼   15  46  50  17  48  15  46  50  17

      第 5絃(A絃)代碼   17  48  47  46  50  17  48  47  46

      第 6絃(C絃)代碼   46  50  49  48  47  46  50  49  48

      第 7絃(D絃)代碼   48  47  48  50  49  48  47  78  50

     

         由琴譜來辨調,實務上有其複雜性。姑暫不論各琴譜,其自身律說、調說、轉調法、多有錯誤,且不能自圓其說。只以大要而論,彼此間最少就有六種體系:有一調高可有多調主者;有調主與調高成固定結合者(有一絃為宮,叫宮調者;也有三絃為宮,叫宮調者);有以三絃為黃鐘正調者,又有以一絃為黃鐘正調者。

        如<梅庵琴譜>似是有調高又有調主的了,但又曰:"僅言音(調主)而不言調(調高)者,可推求而知之─僅言宮,可知其為黃鐘調(三絃為宮)..."。可知它實是調主與調高成固定結合的體系,並以三絃黃鐘.宮為正調,且三絃為宮叫宮調。

        而<研易習琴齋琴譜>載:"中呂均,以三絃為宮,故名正調"。而正調本身又有宮音、商音、角音、徵音、羽音等曲目,可知它是一調高可有多調主,調高與調主並不成固定結合的體系,且以三絃仲呂.宮為正調。與<梅庵琴譜>完全不同。

        許多琴譜之琴曲,只言『商音』、『商意』....,而未附說明。則不能得知其所屬體系 ,究是本調之商音,還是低五度調(或高大三度調)之商音,而商(調主)又是否為第一絃或第三絃?

        這時,我們可能須要將同一琴譜作多種嘗試,以便觀查出其所屬體系。

        調序改變時,音代值可以很方便的轉換,這是我們用電腦譯譜的目的之一,也是我們採用音代值的原因之一。

         透過術以上公式,就可以作到了!

         我們理想中的作法,是將左手指法代碼、右手指法代碼、絃位代碼、徽位代碼等琴譜的原始資料輸入、存入電腦,只有在輸出時,才透過調序的設定,輸出全部或部分的音名及譜字,以節約記憶體及時間。故須要探討音高與調序、絃位、徽位、泛音之關係公式。

    古琴的譜字之上半段由左手符號(指法、徽位)組成,下半段由右手符號(指法、絃位)組成。則不但要與左手指法代碼、右手指法代碼產生關聯,還要考慮上下半段各由兩個造型組而成之邏輯性設計。

     

                               徽位之音高計算公式

     

        下面,我們將研討古琴各音位(徽位)之音高表示法:

        古琴雖只有十三個徽位,實際音位則遠超過於此,理論上最多應可有37個,其音名與所應增加之音名代值如下:

     

    序號

    11

    1

    3

    10

    5

    7

    9

    16

    23

    18

    13

    20

    15

    22

    17

    12

    19

    14

    21

    28

    35

    30

    25

    32

    27

    34

    29

    24

    31

    26

    33

    35

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    倍倍

     

     

             

     

       

      

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    應增

    代值

    7

    2卜

    -3

    -1

    6

    -4

    -2

    32

    39

    34

    29

    36

    31

    38

    33

    28

    35

    30

    37

    64

    71

    66

    61

    68

    63

    70

    65

    60

    67

    62

    69

    96

     

     

    以所加代值大小排序,則如下所示:

     

    序號

    1

    3

    5

    7

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    倍倍

     

     

             

     

     

     

     

     

     

       

      

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    應增

    代值

    -4

    -3

    -2

    -1

    2卜

    6

    7

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    60

    61

    62

    63

    64

    65

    66

    67

    68

    69

    70

    71

    96

     

          由上表可知,若x是徽位的序號,y是各徽位應加之代值,則

       公式辛:y=( H - 4 ) + ( 20 * (H % 12) )

     ,但要注意,是否超過八度?須參考前述公式丁---移調時對音域的影響部份--先用音名之比較法,若超過八度,須再加以32。(古琴之唱名連七自然音及含#、b號各五個的變化半音在內,共只有17個,可更進一步簡化為16個)。

     

                               泛音之音高計算公式

     

         理論上,古琴之十三個徽位上,皆可用左手之浮按法彈得泛音。其徽位若在空絃之x等分處,則音高為空絃之x倍,對照表如下:

     

    徽名     

    13

    12

    11

           

     

     

            

       

       

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    倍大

     

     

    倍純

     

    倍倍純

     

    倍倍大

     

    倍倍純

    倍倍倍純

    代值 

       

    -3

    -1

    32

    36

    33

    64

    68

    65

    96

    泛音 

     

    代值    

    96

    65

    68

    64

    33

    68

    32

    68

    33

    64

    68

    65

    96

    代值差       

    68

    64

    65

    32

    65

    32

     

         可知泛音奏法,只有六個徽位與實音所得音不同,採用泛音奏法時,只要在下列六徽位上,加以調整即可:(公式壬)

             1、第六徽、第九徽,應再加以32。

             2、第十一徽,應再加以64。

             3、第八徽、第十徽,應再加以65。

             4、第十二徽,應再加以68。

             5、第十三徽,應為96(按音演奏時,無洽當十三徽之音位)。

             6、須參考前述---移調時對音域的影響部份--之公式丁,遇有超過八度者,仍須再加32。

     

                       完整的古琴音高翻譯公式

     

         我們心目中理想的古琴翻譯公式,應為由調序、絃序、徽位三者為參數,計算出音程代值,再用由此三註標構成之三維陣列,通知電腦,其基本公式癸,由公式戊及公式辛合成,如下:(還要參考公式丁、公式壬)

     其中D為調序(0->8)、S為絃序(1->7)、H為徽序(1->36)。

    [D][S][H] =[(( 2 x ( 4 + S ))- D ) % 5 + 14 ] + [(H - 4 ) + ( 20 * ( H % 12 ) )]

     

         這個公式,用人工來算,當然是很不方便的,但高速計算正是計算機的基本功能,我們用微電腦翻譯琴譜,必須利用此長處,若只以一一預先列舉計算結果的方式,來設計此種琴譜翻譯程式,則不但佔用大量不必浪費的記憶體,設計起來也冗長而無趣!

    分享到:


  • 文章录入:mayasun责任编辑:admin
    关于 的论文
    没有相关论文