• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      探究算法編程在節(jié)奏創(chuàng)作領(lǐng)域中的輔助作用

      2019-07-17 08:09:22
      音樂文化研究 2019年2期
      關(guān)鍵詞:長句樂段譜例

      高 弘

      內(nèi)容提要:編程技術(shù)對作曲家實(shí)現(xiàn)創(chuàng)作的局部自動化具有重要意義。當(dāng)代,人們對于作曲家的綜合素質(zhì)也提出了時代性的新要求,即應(yīng)該積極掌握計(jì)算機(jī)輔助創(chuàng)作領(lǐng)域的各項(xiàng)技能,成為計(jì)算機(jī)與作曲兩個交叉領(lǐng)域的綜合型人才。利用編程技術(shù),作曲家把個人需求通過計(jì)算機(jī)算法來實(shí)現(xiàn),再把算法植入在程序里,從而達(dá)到“人機(jī)合一”的理想效果。本文著重在節(jié)奏這一音樂參數(shù)上探究,如何在避免機(jī)械性的同時,提煉個性化的創(chuàng)作需求,最終通過算法的控制來形成程序。以此論證,相較于單純依靠人力來進(jìn)行音樂創(chuàng)作的傳統(tǒng)方法,算法作曲在未來有著很大的優(yōu)勢和潛能。

      前 言

      近幾年來,國內(nèi)外對于計(jì)算機(jī)技術(shù)介入作曲領(lǐng)域的研究呈現(xiàn)出不斷加速、擴(kuò)大的趨勢。這主要得益于現(xiàn)今人們獲取數(shù)據(jù)的方式已經(jīng)變得更為方便,計(jì)算機(jī)CPU 硬件等性能較以前也得到了大幅度提高?;谶@一現(xiàn)象,人們可以試驗(yàn)各種各樣的算法來訓(xùn)練計(jì)算機(jī)不斷優(yōu)化模型。無疑,音樂這一人類引以為豪且極富創(chuàng)造性的領(lǐng)域,也遭到了計(jì)算機(jī)這一“不速之客”的介入。其實(shí),這一趨勢并不是在最近幾年才開始出現(xiàn)的。因?yàn)橛?jì)算機(jī)介入作曲呈現(xiàn)出的方式不同,其差異性主要取決于人類對它的定位,或者說,在何種范圍賦予計(jì)算機(jī)一定的“自主權(quán)”。計(jì)算機(jī)是作曲家的助手、提高其創(chuàng)作效率與分析的工具,如何去利用好這一工具,才能在既貼近作曲家的想法,又不干擾作曲家藝術(shù)構(gòu)思的前提下,提高創(chuàng)作效率,甚至達(dá)到能反哺創(chuàng)作思維的效果?

      本文試圖在節(jié)奏這一領(lǐng)域,探究如何把作曲家對音樂的控制思路,演化為對應(yīng)的算法,并把這些算法納入到程序的設(shè)計(jì)里,使作曲家的想法可以迅速地“變現(xiàn)”,反饋給作曲家,進(jìn)一步把程序作為模塊根據(jù)功能的不同而分類、存儲,以便創(chuàng)作時可以隨需求的變化加以調(diào)整和復(fù)用,從而極大地?cái)U(kuò)展作曲家的創(chuàng)造能力。

      一、編程風(fēng)格的思考

      我們首先需要思考幾個問題。第一,程序設(shè)計(jì)的結(jié)構(gòu)是什么? 我們最終需要以什么數(shù)據(jù)形式來產(chǎn)出? 如果要得到需要產(chǎn)出的這種數(shù)據(jù)形式,需要進(jìn)行什么操作? 第二,有哪些參數(shù)是需要我們在過程中鍵入的? 有哪些是可以預(yù)設(shè),以備程序隨時調(diào)取使用的? 第三,假設(shè)前兩步能夠完成,我們要如何進(jìn)一步優(yōu)化代碼,使其中一些模塊可以被其他作品再次使用? 或是如何改善容錯性,增強(qiáng)其在適用范圍以外的韌度,更加靈活地貼近隨時變更的創(chuàng)作需求?

      在編程的領(lǐng)域中,這種理念就被提煉為是“高內(nèi)聚、低耦合”。意思就是,首先要有模塊化的思維,使諸多模塊盡量聚焦于一個單一功能來實(shí)現(xiàn),也就是提高內(nèi)聚性,作為一個模塊,我們要盡量使得一個模塊內(nèi)的各個子功能、子模塊或子元素之間緊密聯(lián)系起來,以增強(qiáng)代碼彼此之間的關(guān)聯(lián)性,而且這也是模塊復(fù)用的基礎(chǔ)。而低耦合是指在高內(nèi)聚的基礎(chǔ)上,盡量削弱不同功能模塊之間的重疊甚至彼此依賴的程度。即在不同功能的模塊之間,其中一個模塊的使用并不強(qiáng)制依賴另一個模塊的介入與調(diào)用。簡單來說,就是使模塊與模塊間盡可能獨(dú)立地存在,讓每個模塊單獨(dú)完成某個特定的子功能。而模塊與模塊之間的接口部分,盡量純粹和不依賴其他模塊的介入。這樣就可以允許作曲家根據(jù)不同的需求來獨(dú)立調(diào)用不同功能的模塊,或是加以組合、拼接以達(dá)到更加豐富的創(chuàng)作功能。所以,在接下來講述代碼實(shí)現(xiàn)的章節(jié)中,筆者將根據(jù)結(jié)構(gòu)的種類來劃分為不同的函數(shù)模塊,并針對各類模塊分別來進(jìn)行代碼實(shí)現(xiàn)。

      二、一些結(jié)構(gòu)體在節(jié)奏層面的代碼實(shí)現(xiàn)

      (一)自由平行樂段

      自由平行樂段,意指由四個樂句構(gòu)成的一個結(jié)構(gòu)樂段。其內(nèi)部分別由第一樂句與第三樂句相互對應(yīng),而第二樂句與第四樂句相互對應(yīng),見譜例1。

      譜例1

      以上譜例是一段由大提琴所演奏的低音聲部,我們先集中解決結(jié)構(gòu)與節(jié)奏部分,所以需要暫時剔除所有的音高信息。如譜例所示,這是一個長度為16小節(jié)的規(guī)整的平行樂段,共4句,每句4小節(jié)。其中,第1句與第3句成對應(yīng)關(guān)系,第2句與第4句成對應(yīng)關(guān)系。

      那么接下來,首先需要考慮的是,我們需要計(jì)算機(jī)產(chǎn)出什么形式的數(shù)據(jù)? 為了得到這種數(shù)據(jù),我們又需要如何給予一個程序參數(shù)?

      面對第一個問題,我們首先需要的是一組列表,它能夠儲存計(jì)算機(jī)產(chǎn)生的節(jié)奏數(shù)據(jù)。為方便計(jì)算機(jī)能“讀懂”我們的節(jié)奏信息,我們可以用4來代表一個全音符,2代表一個二分音符,以此類推,見表1。

      表1

      當(dāng)然,也可以根據(jù)自身需要新建其他節(jié)奏型,上表只是為達(dá)到我們的章節(jié)目標(biāo)而展示出的部分。

      接著,我們把譜例1中的節(jié)奏信息“翻譯”為能夠在程序中存儲的列表,如下:

      '(4 4 4 4)

      '(2 1 1 4 4 2.5 .5 .5 .5)

      '(4 4 4 4)

      '(2.5 .5 .5 .5 2 1 .5 .5 2 2 4)

      第一個目標(biāo)是借助程序內(nèi)提前設(shè)定的算法,最后產(chǎn)出類似于這樣的一個列表,但是并不需要如此“精確”,否則只是實(shí)現(xiàn)了一個打譜功能而已。真正需要達(dá)到的目標(biāo),是在實(shí)現(xiàn)同樣樂段結(jié)構(gòu)的基礎(chǔ)上,有一定程度的“自由”,以保證創(chuàng)作的個性化。如果每次的調(diào)用都只能產(chǎn)生同一結(jié)果,那也就失去了設(shè)計(jì)此算法的意義。

      那如何保證,在擁有一定程度的個性化時,又能展示出預(yù)期的結(jié)構(gòu)呢? 首先,就要對樂段結(jié)構(gòu)有深刻的理解,然后使這些理解在與為之設(shè)計(jì)的代碼過程中間有所體現(xiàn)。從譜例1中可以很明顯地看出,這是一個典型的平行樂段。第1句與第3句完全對應(yīng),第2句與第4句雖然也是對應(yīng)關(guān)系,但是并不完全相同,它們之間的對應(yīng),更多的是體現(xiàn)在過程中,其中有節(jié)奏變化元素的彼此對應(yīng),但這并不影響他們之間的對應(yīng)關(guān)系,從曲式角度來說,它們不是彼此獨(dú)立存在的。

      為此,需要把我們頭腦中的曲式概念在編程環(huán)境里加以模擬,從而“告訴”計(jì)算機(jī),這4句里實(shí)際上只有2句是需要調(diào)用“生產(chǎn)”的模塊,即需要產(chǎn)生一個新的樂句,而后2句因?yàn)楹颓?句是對應(yīng)關(guān)系,我們只需要重復(fù)(當(dāng)然是變化的重復(fù))已得到的前2句的數(shù)據(jù)即可。那么我們需要一個專門用來控制曲式結(jié)構(gòu)的列表,在上方這個譜例中,它會顯示為如下:

      '(1 2 1 2)

      有了控制曲式的列表之后,我們需要關(guān)心的是每個樂句的內(nèi)容。本質(zhì)上來講,也是曲式,只不過是更低一層次的結(jié)構(gòu)。顯然,第1句雖然只是一個初步的展示,但我們發(fā)現(xiàn)它的節(jié)奏過于單一,甚至幾乎都是全音符。這是因?yàn)檫@個聲部是低音聲部,難免在節(jié)奏的豐富程度上無法與旋律聲部相比擬。也就是說,同樣是第1句,它是否是低音聲部、旋律聲部,或是中間填充的和聲聲部,對于節(jié)奏元素的產(chǎn)生有著決定性的意義。而這在我們的實(shí)際創(chuàng)作過程中也是很常見的情況。但對于計(jì)算機(jī)來說,我們需要“告知”它,需要按哪一種聲部類型來產(chǎn)生樂句中的節(jié)奏。所以,我們還需要另外構(gòu)建一個品種列表,如低音、主旋律、副旋律、填充聲部等,用來對應(yīng)不同的節(jié)奏生成策略。

      至此,有了兩組數(shù)據(jù),一個是曲式列表'(1 2 1 2),另一個是聲部列表'(bass),接下來要深入到結(jié)構(gòu)內(nèi)部。這時會發(fā)現(xiàn),第2句雖然屬于新產(chǎn)生的一個獨(dú)立樂句,但也和第1句有著緊密的內(nèi)在聯(lián)系。譬如,第2、第3小節(jié),也都是由全音符組成,而第1小節(jié)可以看成是一個全音符的兩次自我分裂。一個全音符,理論上可以不斷地進(jìn)行自我分裂,如譜例2所示。

      譜例2

      不難發(fā)現(xiàn),每次分裂都是把最后一個音符作為被分裂對象,而前面的值都予以保留(第一個原始的全音符也可看為自己的最后一個音符),三次分裂后的狀態(tài)會出現(xiàn)在第2樂句和第4樂句中。所以,自我分裂是眾多實(shí)現(xiàn)新樂句方法的一種,為此我們可以構(gòu)建代碼(見圖1)。

      圖1

      這個名為division的函數(shù)模塊解決的就是這個問題。關(guān)于分裂次數(shù)方面為避免每次都需人工給予參數(shù),筆者在內(nèi)部把它交給了隨機(jī)數(shù)字處理,但不會超過分裂三次的情況,我們可以看到在給定參數(shù)值4(意味著是全音符)的情況下,多次運(yùn)算后在控制臺顯示的結(jié)果情況,與我們所預(yù)期的完全符合。

      在第2句的第4小節(jié),我們發(fā)現(xiàn)了一個并不能通過分裂模型得到的結(jié)果(見譜例3)。

      譜例3

      它同樣也出現(xiàn)在了第4樂句的第1小節(jié),正如前面筆者所做的,我們必須從具體的事物出發(fā),然后再提煉出具有模型化的抽象。那譜例3的這個動機(jī)本質(zhì)上是什么邏輯?

      從這個小節(jié)第三拍的后半拍開始的三個連續(xù)八分音符,本質(zhì)上是一種連接,它起到了一個連接句的功能,也就是說,如果在抽象層面上來理解,它也可以是這種形式(見譜例4)。

      譜例4

      或者:

      上面幾個譜例所展示的,從根本上來說都是具有向后面平滑過渡的性質(zhì)。也就是說,筆者需要構(gòu)建一個可供連接句選擇的節(jié)奏元素列表,在需要時調(diào)取即可。至于調(diào)取的究竟是哪個元素,其實(shí)并不重要。那么,之所以在最后一小節(jié)出現(xiàn)帶有連接性質(zhì)的節(jié)奏元素,是為了更好地進(jìn)入到下一樂句,我們可以把第2樂句看成是一個既保留第1句節(jié)奏元素的同時,擁有自我分裂模型與連接模型的樂句,只要同時實(shí)現(xiàn)這三個功能,即便一些具體的時值每次運(yùn)算會有不同,也不會影響到第2句在曲式結(jié)構(gòu)中的功能。下面請看在以上思路通過代碼實(shí)現(xiàn)之后,多次運(yùn)算的第2句的數(shù)據(jù)情況(見圖2):(代表第2句的模塊里只擁有一個參數(shù)入口,就是被運(yùn)算的節(jié)奏列表,此處為第1句的節(jié)奏列表)。

      圖2

      以上經(jīng)過運(yùn)算的結(jié)果正是我們想要的:1.在第2樂句中,第1樂句的節(jié)奏元素予以了部分保留;2.擁有自我裂變;3.順利完成最后一個小節(jié)具有連接性質(zhì)的樂句。

      在一個平行樂段中,第1樂句與第2樂句相對較為核心,能夠表達(dá)樂段的思想,而第3樂句與第4樂句則視為前2句的一個變奏,也就是說,接下來的核心就是如何實(shí)現(xiàn)“變化”的功能。相對較為“簡單”地通過調(diào)整順序以達(dá)到變化的效果,此效果只需要一個簡單的函數(shù),幾乎市面上所有的編程語言都封裝了這樣一個可以實(shí)現(xiàn)隨機(jī)排列的函數(shù),所以就不在本文講了。筆者認(rèn)為,隨機(jī)排列雖然可以起到變化的效果,但是難以實(shí)現(xiàn)相較之原對象情緒上的增減起伏,作為平行樂段的后半部分,只擁有隨機(jī)排列這個功能肯定是不夠的。一個現(xiàn)實(shí)可行的思路是,在隨機(jī)排列的基礎(chǔ)上,結(jié)合原有的自我分裂模型或自我合并模型(對應(yīng)樂曲情緒的相對起伏)實(shí)現(xiàn)變化。此種思路的根本原理建立在“節(jié)奏在音樂中起到調(diào)節(jié)情緒的基本功能”這一觀點(diǎn)上。聽密集的節(jié)奏,會讓人感覺活潑;聽稀疏的節(jié)奏,音樂則會顯得舒緩。而唯一需要注意的是,第4樂句最后一個節(jié)奏時值要相對夠長,以達(dá)到結(jié)束整個樂段的目的。

      在理清了思路之后,筆者開始實(shí)現(xiàn)第3樂句與第4樂句的代碼。

      譜例中,第3樂句與第1樂句完全一致,我們暫且可以只用隨機(jī)排列函數(shù)(因?yàn)槿恳恢?所以隨機(jī)排列在此處與完全重復(fù)并無區(qū)別)。第4樂句要同時實(shí)現(xiàn)3個功能:1.隨機(jī)排列;2.在原有基礎(chǔ)上繼續(xù)自我裂變;3.尾音需要較長的時值已獲得段落穩(wěn)定感。

      按照此要求來設(shè)計(jì)代碼后的多次運(yùn)算結(jié)果如圖3所示:

      圖3

      實(shí)現(xiàn)第4樂句的代碼模塊(fourthphrase)也只有一個參數(shù)入口,由于我們是在第2樂句的基礎(chǔ)上去實(shí)現(xiàn)功能的,這里的參數(shù)就是第2樂句的節(jié)奏列表。經(jīng)過多次運(yùn)算后我們發(fā)現(xiàn),已經(jīng)實(shí)現(xiàn)了對第4樂句的預(yù)期功能。

      下面筆者需要把之前所做的功能整合在一起,同時要時刻關(guān)注起初提出的問題,即我們最后需要產(chǎn)出的數(shù)據(jù)形式是什么? 我們因此需要暴露出哪些參數(shù)接口,以方便我們操作?

      毫無疑問,我們需要得到的數(shù)據(jù)形式為一段完整的平行樂段(當(dāng)然只涉及節(jié)奏,音高將會在下一個章節(jié)中涉及),里面分別清晰地展示4個樂句,每一樂句都擁有自己的節(jié)奏列表。第二個問題是我們需要制作出何種程序形式便于我們操作? 也就是以什么樣的形式去操作這一組代碼模塊,筆者認(rèn)為需要提供一個節(jié)奏列表,也就是第1句的節(jié)奏列表作為操作對象,或者,即提供第1樂句的節(jié)奏,然后代碼自動生成剩余3個樂句。圖4是這組代碼的運(yùn)行結(jié)果,我們可以為這組代碼起個名字,叫parallel,中文即平行的意思。

      在實(shí)際運(yùn)用中,我們并不需要print功能(控制臺顯示為橘黃色的數(shù)據(jù)就是print功能輸出的),因?yàn)榻?jīng)由print功能輸出的數(shù)據(jù),無法繼續(xù)傳遞或輸出到下一個函數(shù)。這里使用它,是為了較清晰地展示哪些數(shù)據(jù)是第1句,哪些數(shù)據(jù)是第2句,以此類推。

      圖4

      (二)綜合句法

      這也是除了平行樂段外,最常見的一種結(jié)構(gòu),較為通俗地稱呼為短短長。它主要表現(xiàn)為:首先出現(xiàn)兩個非常相似的短句,緊接著再來一個長度為兩個短句之和的長句。它通??梢元?dú)立存在,也可以嵌入在某些結(jié)構(gòu)體當(dāng)中,如平行樂段。作為一種結(jié)構(gòu),它也有各種相應(yīng)的變體,其變化主要體現(xiàn)在其長句的特征上:

      1.長句的素材和短句的素材并無明顯相關(guān);

      2.長句的主體,尤其是長句的前半部分,和短句的素材高度相關(guān);

      3.長句內(nèi)部,又嵌套了一個短短長的結(jié)構(gòu)。

      筆者要做的就是把這三個版本的短短長結(jié)構(gòu)全部整合在一個函數(shù)里,然后交給計(jì)算機(jī)來隨機(jī)選擇,而創(chuàng)作者則只需指定一共占用多少時值即可,這也是該函數(shù)接收的唯一參數(shù)。同時,筆者在函數(shù)內(nèi)部存儲16為參數(shù)的默認(rèn)值,即當(dāng)創(chuàng)作者不給予函數(shù)參數(shù)的時候,自動調(diào)取16為函數(shù)參數(shù),然后執(zhí)行函數(shù)。當(dāng)給予函數(shù)參數(shù)時,函數(shù)以參數(shù)實(shí)際值執(zhí)行函數(shù)。筆者把這個函數(shù)命名為ssl(意思即short-short-lang,中文意為“短短長”)。

      效果見圖5。

      圖5

      由于此處沒有給予函數(shù)任何參數(shù),函數(shù)假定了參數(shù)值為16調(diào)取執(zhí)行了ssl函數(shù)(16這個數(shù)值意為整個短短長樂段時值為16拍,這個數(shù)值被筆者封裝在函數(shù)內(nèi)部)。筆者連續(xù)執(zhí)行了三次,可以從圖5中看出,第一次執(zhí)行ssl函數(shù)的結(jié)果顯示是一個普通的短短長結(jié)構(gòu),其中第一個短句占時值4拍,第二個短句與第一個短句完全相同,長句占時值8拍。第二次執(zhí)行ssl函數(shù)的結(jié)果顯示是一個短短長結(jié)構(gòu),其中的長句里又嵌套了一個短短長結(jié)構(gòu),即在長句所占的8拍的節(jié)奏空間內(nèi),又實(shí)現(xiàn)了一個2+2+4的短短長結(jié)構(gòu)。第三次執(zhí)行出的結(jié)果同第二次相同,在這三次執(zhí)行的結(jié)果中并沒有顯示出第二種變體,即長句的主體,尤其是長句的前半部分,和短句的素材高度相關(guān),那么可以再多執(zhí)行幾次,看看是否會有這類結(jié)構(gòu)出現(xiàn)(圖6)。

      圖6

      這次執(zhí)行的第一次結(jié)果就符合預(yù)期:長句保留了短句的節(jié)奏素材,構(gòu)成了長句的前半部分。

      (三)節(jié)奏數(shù)據(jù)的人性化處理

      不難發(fā)現(xiàn),這些數(shù)據(jù)雖然體現(xiàn)了一些結(jié)構(gòu)的特征,但是從細(xì)節(jié)上來說,它們還是不夠豐富,或者說不具備足夠的人性化特點(diǎn)。固然,根據(jù)不同的創(chuàng)作需求,或許作曲家也可以接受這些節(jié)奏形態(tài)。但是筆者認(rèn)為,應(yīng)基于更加音樂性的角度來對這些節(jié)奏的數(shù)據(jù)進(jìn)行二次處理,用來滿足差異化的創(chuàng)作需求,則更為合理。下面參見一組節(jié)奏數(shù)據(jù)的對比:

      譜例5

      在譜例5中,標(biāo)注為原型的節(jié)奏列表為:

      (.5 .5 .5 .5 1.5 .5 .5 .5 .5 .5 2)

      從樂句結(jié)構(gòu)上來說,這是一個長度為2小節(jié)的長句,停留音為2拍,即占樂句總長度的四分之一。無疑,這樣的一組節(jié)奏,有時候并不能滿足作曲家對于節(jié)奏豐富性的需求。所以,需要構(gòu)建一個對這些節(jié)奏數(shù)據(jù)進(jìn)行二次處理的函數(shù),為的是在不破壞或顯著更改樂句結(jié)構(gòu)的前提下,豐富節(jié)奏內(nèi)容。為此筆者構(gòu)建了一個名為humaniz的函數(shù),來達(dá)到此目的。

      筆者把這組數(shù)據(jù),當(dāng)成函數(shù)參數(shù)并以此調(diào)動humaniz函數(shù),然后控制臺中顯示了這樣一組節(jié)奏數(shù)據(jù):

      (0.5 0.5 0.5 0.25 1.75 0.25 0.25 0.5 0.5 0.5 1.0 1.5)。

      這也就是在譜例5中標(biāo)注為“處理后”的節(jié)奏,與“原型”對比之后可以發(fā)現(xiàn),原本在“原型”中平均化的節(jié)奏(主要表現(xiàn)為連續(xù)的八分音符進(jìn)行)被打破,其手段是針對某一個八分音符進(jìn)行分裂處理(分裂為兩個十六分音符)。而對于停留音的出現(xiàn),并不是簡單地用二分音符來展示,取而代之的是遲滯一個八分音符而出現(xiàn),并且這個八分音符與之前的時值相互合并,造成了一個延留音,避免造成了聽眾過于直接突兀的印象。事實(shí)上,筆者在humaniz函數(shù)內(nèi)部封裝了三種對于停留音的處理辦法,遲滯出現(xiàn)只是其中一種,這樣就可以保證每次調(diào)用humaniz函數(shù)時對于停留音過于單一的處理情況。

      圖7

      (四)不同結(jié)構(gòu)體在宏觀層次上的運(yùn)用

      目前為止,雖然已經(jīng)實(shí)現(xiàn)了一些不同的結(jié)構(gòu),但是還是處于比較微觀的層次,無法在一個統(tǒng)一的平臺上綜合地使用。因?yàn)樗鼈兿嗷ブg沒有聯(lián)系的,處于彼此孤立的狀態(tài)。就拿前文中已經(jīng)實(shí)現(xiàn)的一些結(jié)構(gòu)來舉例:假設(shè),創(chuàng)作者需要一個片段,這個片段是由兩個時長為64拍的平行樂段、一個時長為16拍的短短長,再加上一個時長為32拍的半平行樂段。那么這時候,只能依次地按照如下的順序運(yùn)算——parallel函數(shù)、parallel函數(shù)、ssl函數(shù)、halfparallel函數(shù)。雖然這樣的方式最后可以滿足想要的結(jié)構(gòu),但是仍不可避免會有以下三個缺點(diǎn):

      1.創(chuàng)作者需要進(jìn)行頻繁的操作,此處至少需要操作四次,并且每次都要需要輸入每個函數(shù)相匹配的參數(shù)才能運(yùn)行函數(shù),這無疑加大了創(chuàng)作者的工作負(fù)擔(dān),不利于此文講述的半自動化輔助功能的宗旨。

      2.每個函數(shù)之間并沒有內(nèi)在的聯(lián)系。從作曲創(chuàng)作的角度來講這是不能接受的,按照上例中的操作方式,每個函數(shù)運(yùn)行的時候,并不依賴于任何其他函數(shù)產(chǎn)生的結(jié)果,而是獨(dú)立運(yùn)行的,這就說明從音樂素材的角度來看,四個函數(shù)之間的結(jié)果沒有建立起任何關(guān)聯(lián)。

      3.無法追溯已經(jīng)存在過的結(jié)果。舉一個例子,當(dāng)使用者第一次運(yùn)行parallel函數(shù),產(chǎn)生了一個平行樂段,而在之后的某個時刻,他需要重復(fù)這個平行樂段,那么即使他再次運(yùn)行parallel函數(shù),由于parallel函數(shù)內(nèi)置的隨機(jī)性,也無法得到與之前完全相同的結(jié)果。

      綜上,我們還需要設(shè)計(jì)一個可以統(tǒng)一調(diào)取不同功能的函數(shù)的平臺。它應(yīng)當(dāng)支持創(chuàng)作者盡可能以極簡的方式輸入“必要的信息”,從而產(chǎn)生指定的結(jié)構(gòu)。這里面包含每個結(jié)構(gòu)是否是獨(dú)立運(yùn)行或是取材于哪個部分,以及只支持追溯。那么,究竟什么才是“必要的信息”? 對于不依賴于其他結(jié)構(gòu)的獨(dú)立產(chǎn)生聲部的函數(shù)來說,總時長、結(jié)構(gòu)名稱以及其中第一樂句的內(nèi)容素材(可缺省)是必要的信息;而對于需要依賴其他結(jié)構(gòu)內(nèi)容從而才能產(chǎn)生聲部的函數(shù)來說,需要提供被依賴的聲部,或者說是被錨定的聲部,以及結(jié)構(gòu)名稱作為必要的信息;最后,對于追溯功能來說,只需提供需要被追溯的位置,就能作為必要信息。

      理清了上述思路之后,開始實(shí)現(xiàn)結(jié)構(gòu)函數(shù)rhysglobal。

      函數(shù)rhysglobal的假想內(nèi)部結(jié)構(gòu)為:

      〈函數(shù)名〉〈時長列表〉〈函數(shù)列表〉

      rhysglobal函數(shù)的運(yùn)行邏輯如下:函數(shù)名設(shè)置為為rhysglobal,rhysglobal函數(shù)會首先讀取〈函數(shù)列表〉里的函數(shù),根據(jù)它們的類型,決定是否讀取〈時長列表〉中的元素。如果該函數(shù)是獨(dú)立運(yùn)行的,那么直接讀取〈時長列表〉中的元素來限定該函數(shù)產(chǎn)生節(jié)奏的總長度;如果該函數(shù)是依賴于其他結(jié)構(gòu)內(nèi)容的,則在該函數(shù)后需直接輸入被依賴內(nèi)容的位置,這種情況下,不需要讀取〈時長列表〉中的元素。以下展示一個結(jié)構(gòu)函數(shù)rhysglobal的實(shí)例(見圖8):

      圖8

      接下來詳細(xì)分析一下這個結(jié)果的產(chǎn)生過程:首先rhysglobal函數(shù)讀取其中〈函數(shù)列表〉的第一個元素——ssl,這是一個獨(dú)立運(yùn)行的負(fù)責(zé)產(chǎn)生短短長結(jié)構(gòu)的函數(shù),因此,它需要讀取〈時長列表〉,而〈時長列表〉的第一個元素是4,即4小節(jié)的意思,那么rhysglobal產(chǎn)生了一個時長為4小節(jié)的短短長結(jié)構(gòu)——((2 1 1)(2 1 1)(2 1 1 4))。繼續(xù),rhysglobal函數(shù)開始讀取〈函數(shù)列表〉的第二個元素——(fssl 0),第二個元素自己本身是一個列表。這是由于fssl函數(shù)本身的特點(diǎn)決定的,不同于ssl,fssl雖然也產(chǎn)生短短長結(jié)構(gòu),但是它需要依賴于錨定聲部提供的素材,才能運(yùn)行函數(shù),而且不支持使用者手動輸入。從這一點(diǎn)上來說,fssl才像是一個自動化的函數(shù)。(為了方便,在我的使用習(xí)慣中,所有帶“f”子母開頭的函數(shù),全部為自動化函數(shù)。f為function-automated的首字母。)所以,它需要提供給它錨定聲部的素材內(nèi)容,這就是列表中第二個元素0的功能。0即代表定位出rhysglobal函數(shù)的第一個結(jié)果,也就是剛剛經(jīng)由ssl函數(shù)產(chǎn)生的結(jié)果,以它作為素材,運(yùn)行fssl。從結(jié)果上不難看出,兩者之間關(guān)聯(lián)程度比較高。

      ssl-〉((2 1 1)(2 1 1)(2 1 1 4))

      (fssl 0)-〉((2 1 1)(2 1 1)(1 0.5 2 2 0.5 0.25 0.25 0.5 1))

      最后,rhysglobal函數(shù)讀取〈函數(shù)列表〉的最后一個元素——0,有別于〈函數(shù)列表〉中的前兩個元素都是函數(shù),0并不是一個函數(shù),只是一個數(shù)值。但這并沒有讓計(jì)算機(jī)報(bào)錯,原因就在于rhysglobal函數(shù)內(nèi)置了定位函數(shù),當(dāng)識別出元素是數(shù)字的時候,內(nèi)置的定位函數(shù)馬上開始遍歷(for-each函數(shù))已經(jīng)存在于rhysglobal函數(shù)中的結(jié)果,并按照數(shù)字把相應(yīng)的結(jié)果取出來,再返還給rhysglobal函數(shù)。按照Scheme的計(jì)數(shù)方式,0即代表列表中的第一個元素,那么對于rhysglobal函數(shù)來說第一個元素就是函數(shù)ssl產(chǎn)生的((2 1 1)(2 1 1)(2 1 1 4)),所以,結(jié)果中又一次出現(xiàn)了((2 1 1)(2 1 1)(2 1 1 4))。

      結(jié) 語

      本文中實(shí)現(xiàn)的一些算法,主要是處于節(jié)奏這一音樂參數(shù)上面,其范圍涵蓋了自由平行樂段、綜合型句法這兩個基本結(jié)構(gòu)元素的構(gòu)建,以及設(shè)計(jì)結(jié)構(gòu)函數(shù)來支持創(chuàng)作者對結(jié)構(gòu)進(jìn)行定制。并且,對于如何更加人性化處理一些節(jié)奏數(shù)據(jù)進(jìn)行了一些探索。需要說明的是,在這條道路上需要作曲家不斷地付出與探索,就像一款軟件需要維護(hù)一樣,因?yàn)樾枨罂偸窃诓粩嘧兓?當(dāng)有新的創(chuàng)作需求時,就需要完善、重構(gòu)甚至重新設(shè)計(jì)對應(yīng)的算法,來保障程序?qū)?chuàng)作的輔助作用。在這一過程中,作曲家也積累了越來越多的編程經(jīng)驗(yàn),懂得如何利用編程技術(shù)來達(dá)到自己的創(chuàng)作目的,從而會設(shè)計(jì)出更為貼近自身創(chuàng)作特征的程序。最后,筆者概括利用算法對創(chuàng)作進(jìn)行輔助所帶來的優(yōu)勢有三點(diǎn):1.加速作曲過程。雖然前期的程序設(shè)計(jì)工作較為耗時,但一旦順利完成,剩余工作將會輕松很多;2.會“反哺”并優(yōu)化作曲家的創(chuàng)造思維。確立算法,并且植入程序后,所帶來的效果就可以直接反饋給作曲家,這會給作曲家?guī)砀嗟撵`感,也會給分析者帶來更清楚的思路。3.由于不同功能的是以一個個模塊的形式來儲存的,這樣有助于催生作曲家形成模塊化的創(chuàng)作思維模式。

      綜上,本文的核心觀點(diǎn),就是作曲家首先需要把自己對于作品的藝術(shù)構(gòu)想,轉(zhuǎn)換為某種算法,或是算法的集合,然后把這些算法植入到程序的編寫中,以求達(dá)到計(jì)算機(jī)輔助作曲的目的。其實(shí)在世界各地已經(jīng)有相當(dāng)一部分具有編程知識的作曲家在某種程度上進(jìn)行了實(shí)踐,但是運(yùn)用范圍還不夠廣泛,依然不成體系,而且實(shí)驗(yàn)性質(zhì)的實(shí)踐居多。作曲家可以根據(jù)自己的創(chuàng)作體系特點(diǎn),把實(shí)現(xiàn)過的函數(shù)按照不同的屬性予以歸類,也可以把一些常用的作曲技術(shù),編寫進(jìn)函數(shù)功能里,根據(jù)需要隨時調(diào)取,以輔助自己的創(chuàng)作。

      猜你喜歡
      長句樂段譜例
      “傳術(shù)音樂”吉他教學(xué)(五)
      樂器(2024年4期)2024-05-11 06:21:11
      論豫劇唱腔中調(diào)式及調(diào)式運(yùn)用分類與設(shè)計(jì)邏輯
      美學(xué)視角之樂段辨析
      黃河之聲(2019年24期)2019-12-16 01:11:52
      江南絲竹器樂合奏曲《三六》
      長江叢刊(2018年28期)2018-10-31 08:51:22
      武俠意境交響化:阿鏜《神雕俠侶交響樂》本體論
      論曲式學(xué)中復(fù)樂段的辨析問題
      北方音樂(2017年11期)2017-01-28 22:52:47
      這樣分析含同位語的長句
      吼唱在關(guān)中大地上的“秦腔”——論小說《白鹿原》中長句和排比句的秦腔韻味
      英語長句譯法新探
      ——意群—動態(tài)對等法
      音樂作品分析教學(xué)內(nèi)容中的“非常規(guī)”曲式類型
      ——以樂段范疇為例
      文教資料(2012年13期)2012-08-15 00:42:55
      肇源县| 贞丰县| 申扎县| 清苑县| 泗洪县| 灵川县| 本溪市| 从化市| 吐鲁番市| 宣武区| 乌拉特后旗| 嘉祥县| 通海县| 晋中市| 汪清县| 邳州市| 响水县| 襄城县| 桃江县| 名山县| 裕民县| 邢台县| 武乡县| 司法| 社会| 台东县| 宜君县| 五家渠市| 华宁县| 镶黄旗| 西宁市| 泸定县| 望城县| 定远县| 临西县| 澄城县| 姜堰市| 德令哈市| 成都市| 韶山市| 汕头市|