戴舒琪,夏光宇
(1.北京大學(xué) 信息科學(xué)技術(shù)學(xué)院,北京 100871; 2.上海紐約大學(xué) 工程與計算機(jī)科學(xué)學(xué)院,上海 200122)
隨著計算機(jī)音樂領(lǐng)域的發(fā)展,越來越多的樂器開始了電子化之路.在電子合成器的幫助下,人們可以在計算機(jī)和智能移動設(shè)備的軟件上演奏樂器.然而,相比于鋼琴、小提琴和小號這些西方樂器,我國民族音樂中的琵琶、古箏等彈撥樂器有著一套自己獨(dú)特的、更為復(fù)雜的技法體系,即使有著出色的合成器音色,也難以在缺乏技法模型的情況下,于計算機(jī)上演奏出流暢而真實(shí)的樂曲.以素有“民樂之王”美譽(yù)的琵琶為例,它有著所有民族樂器中最為復(fù)雜的技法體系,即便是簡單的琵琶曲目,除了彈挑、輪指這樣的基本技法外,也會用到掃弦、拉弦、揉弦、泛音等一系列中級難度的技法.這不僅需要計算機(jī)理解掌握這些常見技法,還要學(xué)習(xí)模仿人的演奏習(xí)慣,才能“以假亂真”.
另一方面,智能化的計算機(jī)自動演奏近年來日益受矚目.以鋼琴為例,在計算機(jī)中輸入一段鋼琴樂譜,就能自動合成相應(yīng)的鋼琴音樂.而對于琵琶這樣的中國民族樂器而言,要想實(shí)現(xiàn)智能化自動演奏,必須要有更為精確而智能的技法控制模型.例如,想要在計算機(jī)上生成一段由輪指彈奏的指定節(jié)奏下的1/4音符,則需要精確計算出輪指的時長,并根據(jù)時長限制和樂曲風(fēng)格等智能控制輪指的速度.同樣,琵琶的不同技法模型在疊加和銜接時也需要更為智能的控制,譬如,如何在左手揉弦的同時右手進(jìn)行長輪,將掃弦緊接輪指從而形成掃輪等.
不論是通過計算機(jī)和移動設(shè)備的軟件演奏琵琶,還是智能化的計算機(jī)自動演奏,琵琶常見技法的建??刂贫急夭豢缮伲淠P退疁?zhǔn)更是決定演奏效果的關(guān)鍵所在.由琵琶出發(fā),邁出民族樂器技法智能電子化的第一步,將來更容易推廣至古箏、阮、柳琴、三弦等技法相似的民族彈撥樂器,對西方的吉他等彈撥樂器的技法電子化,也有著重要的借鑒意義.
本文對琵琶的輪指、掃弦、推拉弦揉弦等主要技法,及其衍生或疊加而成的常見技法進(jìn)行計算建模,并加入了泛音技法的采樣,輸入樂譜音符序列和對應(yīng)的技法標(biāo)示后,程序?qū)⒆詣由汕康腗IDI格式編碼文件,最后使用GarageBand中的琵琶合成器對MIDI文件輸出合成結(jié)果.在實(shí)驗(yàn)階段,采用analysis by synthesis(A-by-S)方法進(jìn)行實(shí)驗(yàn),最終確定各個模型的參數(shù),并與GarageBand ios版琵琶的演奏進(jìn)行對比,取得了顯著效果.
MIDI鍵盤最初用來控制鋼琴,而對于鋼琴,并不需要復(fù)雜的技法控制,甚至根本不必對技法建模,就可以在計算機(jī)上演奏大部分樂曲.對吉他而言,它與琵琶在構(gòu)造和技法上都有相似之處,然而目前的學(xué)術(shù)研究和業(yè)界軟件中也只有基本的彈撥、推拉弦和掃弦技法,也沒有根據(jù)樂曲要求來自動智能調(diào)節(jié)參數(shù)的模型.
在蘋果公司2016年5月發(fā)布的新版GarageBand ios版中,加入了采樣制作的琵琶合成器,并添加了彈、輪指、推拉弦和掃弦的技法,這也是當(dāng)前唯一的琵琶技法模型.然而,這些技法模型有著致命缺陷: (1) 技法太少,無法滿足絕大多數(shù)琵琶樂曲的需求;(2) 模型過于簡單,導(dǎo)致演奏效果和人的真實(shí)演奏差距非常大,例如其中的輪指模型完全采用均勻分布,不符合人的實(shí)際演奏情況,且無法體現(xiàn)輪指和夾彈、滾奏、搖指之間的區(qū)別;(3) 無法根據(jù)樂曲要求,智能精確地控制技法,銜接操作難度大,難以流暢演奏,例如無法控制輪指個數(shù)(琵琶曲目中常常有精確的五指輪或四指輪要求),更無法精確限制輪指的節(jié)奏與時長等.由于GarageBand的琵琶采樣合成器的音色目前仍屬業(yè)界最佳,尤其是推拉弦的音色,于是本文選擇該合成器進(jìn)行建模后的音色合成.
在聲學(xué)方面,文獻(xiàn)[1]針對琵琶的11種左手技法,進(jìn)行了時長、能量、頻譜的聲學(xué)參數(shù)分析,這對本文2.3節(jié)中的推拉弦和揉弦模型的構(gòu)建有所啟發(fā).除此之外,其他民族彈撥樂器尚沒有任何從計算機(jī)或聲學(xué)角度進(jìn)行技法建?;蚍治龅慕?jīng)驗(yàn)可以借鑒.
琵琶的左右手各有約30種技法(文獻(xiàn)[2]中附錄三與四分別記錄了琵琶左右手共68種技法),兩手互相組合,變化繁多.從計算機(jī)演奏的角度來看,其中的基本技法(即獨(dú)立且有與其他技法明顯不同的合成單位)有右手的彈挑、輪指、掃弦與左手的推拉弦、揉弦、泛音.大類中又有細(xì)分,左右手組合、不同技法銜接又衍生出新技法.本文的技法模型,以單音“彈”為最小的基本單元,4種基本技法模型為基礎(chǔ),涵蓋了大部分琵琶曲目所需的技法.
為了更接近人的真實(shí)演奏效果和實(shí)現(xiàn)精準(zhǔn)控制,一方面,根據(jù)琵琶演奏經(jīng)驗(yàn)和相關(guān)技法發(fā)聲原理進(jìn)行編程建模,輸出結(jié)果為MIDI編碼格式的文件;另一方面,借鑒文獻(xiàn)[3]中提出的analysis-by-synthesis方法,根據(jù)合成實(shí)驗(yàn)的結(jié)果不斷調(diào)整參數(shù),驗(yàn)證并修改模型.
輪指是琵琶演奏中最為常見的技法,其中又可以細(xì)分為長輪、三指輪、四指輪、五指輪、輪雙等.現(xiàn)有的輪指模型使用各指均勻分布的方式,與真實(shí)演奏差距大,且無法精確控制輪指個數(shù)與時長.因此,采用全新的計算模型,從時間控制(速度)和力度控制兩個維度對常用的四指輪、五指輪及長輪進(jìn)行建模*輪指有“上出輪”(即按照食指、中指、無名指、小指順序彈奏)和“下出輪”(按照小指、無名指、中指、食指順序彈奏)之分,目前在實(shí)際演奏中,下出輪幾乎很少出現(xiàn),因此本文只討論上出輪..
(1) 四指輪
又稱“半輪”,食、中、名、小4指依次“彈”出,連得4聲.
首先是速度,對于四指輪來說,除了第四聲的延長時間由樂譜中下一個指法的開始時間所控制外,其余3指的彈奏時長都有一定的規(guī)律分布.且根據(jù)經(jīng)驗(yàn),演奏速度較快或較慢時,往往各聲之間的時長差別較小.
(1)
式(1)中:T為速度(Tempo,單位: 每分鐘四分音符的個數(shù),bpm);D為四指輪的總時長(單位: s);L表示最后一聲的拍長(單位: 四分音符個數(shù));αi是控制前3聲時長關(guān)系的參數(shù)(浮點(diǎn)數(shù));B為其余3聲的基準(zhǔn)拍長.
(2)
式(2)中:αi是關(guān)于前3聲總時長的二次函數(shù).可以通過兩種方式控制速度: 一是調(diào)整輪指的總時長D,時間越短,速度越快;二是直接調(diào)整每一聲的基準(zhǔn)拍長B,B越小,則速度越快.
其次是力度.設(shè)每一聲的力度為vi,為1到127的正整數(shù),V是基準(zhǔn)力度,βi為浮點(diǎn)參數(shù),則有
vi=βi×Vi=1,2,3,4;0≤βi≤1.
(3)
(2) 五指輪
簡稱“輪”,食、中、名、小4指依次“彈”出,大指“挑”進(jìn),連得5聲.其建模公式與四指輪基本相同,將式(1),(2)中i的取值范圍增加到4,式(3)中i的取值增加到5即可.
(3) 長輪
兩個以上的“輪”連接在一起稱為“長輪”.在人演奏長輪時,無法精確保證每個輪的速度和力度都相同,為了更接近真實(shí)演奏效果,在長輪模型中加入噪音參數(shù)nt與nv,分別用來模擬速度和力度的偏差.同時,將相鄰輪之間的間隔也加入考量.另外,由于一段長輪中連續(xù)輪的個數(shù)不定,無法由總時長確定其輪指速度,因此,加入K作為每個輪的拍長參數(shù)用于調(diào)節(jié)輪的速度,N為輪的個數(shù).模型公式如下:
N×K=60TD,
(4)
(5)
vi=βi×V+nvi=1,2,3,4,5;0≤βi≤1.
(6)
掃弦與彈的區(qū)別在于,食指自右向左彈出后,同時要彈多根弦,如得一聲.由此,掃又可分為雙彈(2根弦)、小掃(3根弦)、掃(4根弦)、拂(4根弦,自左向右)、琶音(慢速,得4聲)、連續(xù)掃拂等.*本文討論的掃弦模型,在應(yīng)用于從低音到高音,或從高音到低音的掃弦時,可以通過調(diào)整音高和力度參數(shù)進(jìn)行選擇.
根據(jù)經(jīng)驗(yàn)和測評,掃弦時4聲的間隔幾乎沒有差異,可認(rèn)為是平均分布.式(7)表示時間控制,與式(1)類似,只是將αi變?yōu)槌?shù)1,表示最后1聲弦音的拍長,表示其余3根弦的基準(zhǔn)拍長;T為速度(每分鐘四分之一拍的個數(shù));D是以s為單位的總時長.對于大多數(shù)掃弦(爬音除外),L的值會遠(yuǎn)遠(yuǎn)大于B,以獲得4弦1聲的效果.
L+3B=60TD.
(7)
在力度上,由于琵琶4根弦的構(gòu)造不同,用食指掃弦時各弦所發(fā)出的音量也有所區(qū)別,但一般來說,在同一把琴上4根弦的力度比例可近似認(rèn)為是恒定的,其公式模型與式(3)相同.
(1) 推拉弦
推、拉弦分別是左手按弦向右推進(jìn)或向左拉出,使得弦音升高的指法.兩者在拉高弦音的效果上并沒有明顯差異,由文獻(xiàn)[1]的實(shí)驗(yàn)結(jié)果,也可從聲學(xué)角度得知二者幾乎沒有差別.現(xiàn)有的推拉弦模型,無法精確控制速度和音高,本文的模型則能夠很好地解決這些問題.
t(i)=L1+B×i1≤i≤N,
(8)
(9)
(2) 揉弦
揉弦指的是左手按弦在音位上作規(guī)律的小幅度搖動,發(fā)出波音效果,本文的揉弦模型是市面上迄今為止第一個揉弦模型.與推拉弦模型的不同之處在于,揉弦沒有必須拉到某一指定音高的要求,只需小幅度的音高變化,且絕大多數(shù)情況下,揉弦的速度沒有明顯區(qū)別,只需按某一速度進(jìn)行循環(huán)往復(fù)地?fù)u動即可.如式(10)所示,揉弦中一個推拉搖動所用拍長為常數(shù)參數(shù)Dx,N為重復(fù)個數(shù).每一個小幅度推拉搖動的公式即為推拉弦的公式(8)和(9),目標(biāo)音高需設(shè)置在較小范圍內(nèi).
N×Dx=60TD.
(10)
泛音廣泛存在于弦樂器中,這里討論的是琵琶的自然泛音,其原理與吉他的自然泛音類似.根據(jù)文獻(xiàn)[4],當(dāng)左手虛按在琴弦上(僅僅接觸琴弦但不用力),琴弦的振動將受到限制,且只有以此觸點(diǎn)為節(jié)點(diǎn)的振動才被保留下來.如果觸點(diǎn)在琴弦的1/2處,那么泛音頻率就是琴弦基頻的2倍;如果觸點(diǎn)在琴弦的1/3或2/3處,那么泛音頻率就是琴弦基頻的3倍,依此類推.由于目前市面上的琵琶合成器均沒有泛音的合成選項,MIDI命令也無法直接控制濾波器,因此,本文計算出琵琶每根弦各個泛音的頻率,再根據(jù)計算結(jié)果使用濾波器在泛音所對應(yīng)音高的弦音上進(jìn)行濾波.
在琵琶的常見技法中,絕大多數(shù)都是由上述4種基本技法疊加、銜接衍生而來.而目前市面上還沒有考慮這些衍生技法的模型.在此,分別以左右手配合的揉弦輪指,以及右手掃弦與輪指銜接的“掃帶輪”兩種最典型的技法為例,描述衍生技法的建模.
(1) 揉弦與輪指
在右手輪指的同時左手進(jìn)行揉弦,是琵琶演奏中極為常用的技法.其組合建模的方式為,將式(10)中的揉弦總時長N×Dx設(shè)為輪指的每一聲時長,即式(1)中的αi×B與L;將普通輪指調(diào)用若干次“彈”換為調(diào)用若干次“揉弦”;同時,揉弦公式中的L1與L2參數(shù)需調(diào)至更小的值.
(2) 掃帶輪
“輪”時首先用食指作“掃”,然后中、名、小、大指緊跟作輪單弦.聯(lián)立五指輪和掃弦的時長公式,可得:
(11)
在力度方面,雖然掃弦的力度通常比輪指要大,但由于兩者的力度公式形式相同,如式(3),可直接沿用.
除泛音模型直接使用GarageBand中的濾波器在MIDI音符上進(jìn)行實(shí)驗(yàn)外,其余模型的實(shí)驗(yàn),均是先編程輸出MIDI格式的編碼文件,再由GarageBand琵琶采樣合成器生成音頻,并采用文獻(xiàn)[3]中的analysis by synthesis方法,與真實(shí)的演奏片段進(jìn)行比對,分析差距,調(diào)節(jié)參數(shù),如此循環(huán)往復(fù).
在實(shí)驗(yàn)的參數(shù)調(diào)節(jié)中,除了依據(jù)專業(yè)的演奏經(jīng)驗(yàn)和發(fā)音原理外,我們邀請了琵琶演奏家、琵琶愛好者以及無琵琶背景的普通音樂愛好者,分別進(jìn)行聆聽,將他們的反饋意見應(yīng)用到實(shí)驗(yàn)的analysis by synthesis方法中.下面逐一介紹4種指法模型的實(shí)驗(yàn)情況.
根據(jù)輪指的速度公式(1),(2),有兩種方式控制輪指速度: 一是調(diào)整輪指的總時長D,時間越短,速度越快;二是直接調(diào)整每一聲的基準(zhǔn)拍長B,B越小,則速度越快.L作為最后一個音的總拍數(shù),在輪指后緊接其他指法的情形下,由樂曲及下一個指法的要求來確定L的具體數(shù)值(通常較短);在沒有明確要求時,則L為琵琶弦音的自然延長拍數(shù),根據(jù)經(jīng)驗(yàn),自然延長的時間約為2s左右.
表1 輪指模型參數(shù)的估計結(jié)果
注: 在四指輪和五指輪模型中,只使用其公式中i取值范圍以內(nèi)的值.
根據(jù)實(shí)驗(yàn)測試和調(diào)整,時間控制公式中的參數(shù)ki及力度控制公式中βi的估計取值如表1所示,如此,既能保證每一聲的間隔時長在輪速較快或較慢時差異更小,也能保持最佳的時長比例.長輪中,速度噪音nt與力度噪音nv分別為基準(zhǔn)拍長B和基準(zhǔn)力度V上下5%范圍內(nèi)的隨機(jī)數(shù),從而更接近真實(shí)演奏.
實(shí)驗(yàn)中發(fā)現(xiàn),即便在力度和速度分布上與人的演奏接近,本文的輪指模型在音樂性上顯得過于機(jī)械.于是,進(jìn)一步在長輪模型中加入了一些常見的音樂效果,如,通過在輪指各聲的音量V上,按時序增加線性漸強(qiáng)或漸弱的包絡(luò),來控制整體的漸強(qiáng)與漸弱.
在掃弦的模型公式(7)中,L值與輪指模型中的L相同,同時,與輪指模型類似,也通過控制時長D或直接調(diào)整B來控制掃弦速度,具體力度參數(shù)實(shí)驗(yàn)估計結(jié)果見表2.
推拉弦模型中的L2的取值參照輪指和掃弦模型的L參數(shù),其余參數(shù)的實(shí)驗(yàn)計算估值如表3所示.模型中notetarget與noteorigin的取值分別為目標(biāo)音高和原始音高的MIDI音高值,在揉弦模型中notetarget默認(rèn)為noteorigin+1.
表2 掃弦模型力度參數(shù)的估計結(jié)果
注: “拂”指法中,生成順序?yàn)閺摩?到β1.
表3 推拉弦與揉弦模型參數(shù)的估計結(jié)果
注:L1/T,L2/T,B/T的單位都是s;e為自然常數(shù).
實(shí)驗(yàn)發(fā)現(xiàn),計算頻率并濾波的方法合成出的泛音,與真實(shí)的琵琶自然泛音相比,仍有較大的差距.由于琵琶每根弦的自然泛音數(shù)目很少,完全可以通過采樣錄音的方式將其記錄下來,再封裝出函數(shù)調(diào)用接口,加入技法模型中,由程序在合成音頻時進(jìn)行調(diào)用.
為了檢驗(yàn)?zāi)P妥罱K的效果,本文從琵琶傳統(tǒng)古曲《高山流水》(浦東派演奏家,林石城編曲版)中改編出7小節(jié)的選段,涵蓋擰弦、輪指、掃弦、泛音、揉弦、推拉弦等技法,分別用GarageBand ios版中的琵琶和真實(shí)琵琶進(jìn)行演奏,并與本文中模型的合成結(jié)果進(jìn)行對比分析.對于GarageBand琵琶中無法演奏的技法,則用簡化版或相近技法代替,例如,用音高相同或相差一個八度的弦音代替泛音、不使用揉弦、掃輪拆分為掃弦和輪指等.檢驗(yàn)結(jié)果表明: 本文的模型不僅大大提高了計算機(jī)演奏的質(zhì)量,與人的真實(shí)演奏更為相似;而且相比GarageBand中需要花費(fèi)大量時間練習(xí)操作、錯誤率高、無法精準(zhǔn)控制演奏的事實(shí),本文的模型生成簡單便捷,可操作性強(qiáng).相關(guān)合成結(jié)果見http:∥shuqid.net/pipa.
實(shí)驗(yàn)結(jié)果表明: 本文所提出的琵琶常用技法計算模型,不論是在指法的種類數(shù)目,與人演奏的相似度,還是在演奏控制上都有著質(zhì)的飛躍,可以實(shí)現(xiàn)大部分中等難度琵琶曲目的電子化合成,控制自由準(zhǔn)確,生成便捷,并且保證了相當(dāng)?shù)难葑噘|(zhì)量.同時,采用MIDI編碼格式也保證了該模型的通用性和可擴(kuò)充性.
針對模型中存在的問題,還有更多的改進(jìn)空間:
(1) 琵琶指法組合千變?nèi)f化,在現(xiàn)有模型基礎(chǔ)上,增加更多的高級指法模型,包括更多的“噪音”技法,如“摘”、“拍板”、“絞線”等(倘若難以實(shí)現(xiàn)物理模型,也可以直接使用類似本文“泛音”技法的采樣方法來加入,畢竟這些技法沒有音高,音色種類較為固定),則可以演奏更多的琵琶樂曲.
(2) 在建模時采用機(jī)器學(xué)習(xí)方法來假設(shè)和驗(yàn)證分布,或許可以提高模型的精確性.例如,式(2)中αi的二次函數(shù)的參數(shù)可以通過回歸模型進(jìn)行解決,或假設(shè)為其他分布類型;甚至可以不假設(shè)分布,采用生成對抗網(wǎng)絡(luò)(Generative Adversarial Network)[5],在建立生成指法的網(wǎng)絡(luò)同時,再設(shè)計一個判別網(wǎng)絡(luò)專門用來判斷該指法是否由人演奏.
(3) 增加模型參數(shù),采用一些機(jī)器學(xué)習(xí)中的監(jiān)督學(xué)習(xí)算法,從合成的指法模型音頻出發(fā),以真實(shí)演奏的音頻信號波形為訓(xùn)練樣本,從而更準(zhǔn)確地分析調(diào)整各個指法模型.
(4) 嘗試學(xué)習(xí)同一指法在不同曲目中的音頻樣本,或許能夠得到不同演奏家在不同演奏風(fēng)格下的指法模型,進(jìn)一步學(xué)習(xí)某個具體演奏家的演奏習(xí)慣.
(5) 可以適當(dāng)加入一些觸弦所產(chǎn)生的噪音,更加真實(shí)地模擬人的演奏效果.
(6) 設(shè)計模型的圖形化操作界面,讓非開發(fā)者用戶也能自如演奏.
未來若能夠創(chuàng)建琵琶指法符號的電子識別系統(tǒng),結(jié)合本文中的指法模型,將真正實(shí)現(xiàn)計算機(jī)上的琵琶智能讀譜及自動演奏.琵琶中級指法智能模型,作為民族樂器智能電子化的第一步,不僅為其他民族樂器,也為部分西方樂器(如吉他)的指法電子化提供了很好的借鑒;對中西方樂器融入未來信息世界,特別是對于建立中國民族音樂的獨(dú)特體系,有著重要而深遠(yuǎn)的意義.