田佳鷺
(沈陽(yáng)師范大學(xué),沈陽(yáng)110034)
音樂(lè)由音調(diào)、節(jié)奏、和聲、音色等部分組成,通過(guò)各種不同的音符構(gòu)成曲調(diào)旋律,通過(guò)聲音所產(chǎn)生的頻率能夠有效地使人們產(chǎn)生共鳴[1]。此外音樂(lè)通常以簡(jiǎn)譜、五線(xiàn)譜等記譜法描述,該方法的實(shí)現(xiàn)將簡(jiǎn)化圖譜的表現(xiàn)形式,利用動(dòng)態(tài)直觀的可視化視圖方法代替原本的靜態(tài)視圖,使音樂(lè)的表現(xiàn)形式不再單一??梢暬膶?shí)現(xiàn)為人們帶來(lái)視聽(tīng)上的新體驗(yàn),使音樂(lè)的美以另一種方式得以呈現(xiàn),同時(shí)有利于對(duì)樂(lè)理知識(shí)掌握甚少的人進(jìn)行音樂(lè)的學(xué)習(xí),為人們對(duì)于音樂(lè)的學(xué)習(xí)降低門(mén)檻[2]。此外該方法借助于MATLAB,利用多種基礎(chǔ)庫(kù)函數(shù),例如音樂(lè)處理函數(shù)、FFT快速傅里葉變換函數(shù)、各種繪圖函數(shù)等實(shí)現(xiàn)音樂(lè)旋律的實(shí)時(shí)動(dòng)態(tài)可視化。
所謂音樂(lè)旋律動(dòng)態(tài)可視化從圖形上來(lái)說(shuō)是指將音樂(lè)的播放時(shí)間設(shè)置為二維圖形的橫坐標(biāo),將音樂(lè)的頻率轉(zhuǎn)化為音高作為縱坐標(biāo),例如:do,re,mi,fa,so,la,xi七個(gè)基本音調(diào),在此基礎(chǔ)上根據(jù)所選取音樂(lè)是C調(diào)還是F調(diào)以及其他音調(diào)進(jìn)行相應(yīng)的修改[3]。音樂(lè)中不只包含音調(diào)還要涉及到節(jié)拍、時(shí)值等因素的處理,音樂(lè)中每一首歌曲都有固定的節(jié)拍設(shè)置,音的時(shí)值代表每個(gè)音持續(xù)的時(shí)長(zhǎng)通常分為全音符、二分音符、四分音符、八分音符、十六分音符等。方法所使用的節(jié)選音樂(lè)為C調(diào)音樂(lè)《小星星》,它是以四分音符為一拍每小節(jié)四拍構(gòu)成的。音樂(lè)的節(jié)拍和時(shí)值則分別用zpz變量和duration矩陣進(jìn)行存放,并作為重要元素繪制到階梯圖當(dāng)中[4]。該方法中動(dòng)態(tài)視圖以可視化的方式呈現(xiàn)時(shí)利用了兩種方式:一種是固定橫坐標(biāo)軸,通過(guò)一個(gè)代表音樂(lè)實(shí)時(shí)播放的點(diǎn)帶動(dòng)整個(gè)階梯圖的走向來(lái)實(shí)現(xiàn)動(dòng)態(tài)成像;另一種則更具靈活性,將階梯圖伴隨著橫坐標(biāo)軸時(shí)間軸一起運(yùn)動(dòng),展現(xiàn)出音樂(lè)頻率高低起伏、音高持續(xù)時(shí)間的變化[5]。
作為一款強(qiáng)大的數(shù)學(xué)軟件MATLAB的繪圖功能較為突出,方便用戶(hù)利用可視化的方式實(shí)現(xiàn)計(jì)算結(jié)果[6]。它包含眾多有關(guān)數(shù)值、符號(hào)的計(jì)算功能,讓用戶(hù)不再被晦澀難懂的數(shù)學(xué)運(yùn)算所困擾。此外它還提供了豐富的應(yīng)用工具箱,極大地方便用戶(hù)使用這些處理工具,使得用MATLAB解決問(wèn)題所編寫(xiě)的代碼相比其他編程語(yǔ)言例如C、C++、Java等要更加簡(jiǎn)潔易懂[7]。該方法中重點(diǎn)用到了MATLAB的數(shù)值分析、圖像繪制功能以及音樂(lè)處理函數(shù),例如MATLAB中的audioread()函數(shù)可以自動(dòng)獲取音樂(lè)的音頻信號(hào)、采樣頻率、采樣精度等信息。目前大數(shù)據(jù)應(yīng)用十分廣泛,為了與時(shí)俱進(jìn)MATLAB也進(jìn)行了相應(yīng)的改善,將其與大數(shù)據(jù)相結(jié)合[8]。實(shí)際上MATLAB覆蓋了從最主要的數(shù)據(jù)獲取、數(shù)據(jù)的組織和基礎(chǔ)的探索和分析等方面,通過(guò)這些高端的機(jī)器學(xué)習(xí)方法進(jìn)行大數(shù)據(jù)的一些學(xué)習(xí)并轉(zhuǎn)換成模型,之后把大數(shù)據(jù)嵌入到生產(chǎn)環(huán)境當(dāng)中去,并且MATLAB針對(duì)不同的數(shù)據(jù)規(guī)模也擁有著專(zhuān)門(mén)的針對(duì)這些問(wèn)題的處理方式,可以說(shuō)MATLAB現(xiàn)在已經(jīng)可以被廣泛應(yīng)用到各個(gè)專(zhuān)業(yè)領(lǐng)域當(dāng)中去[9]。
首先將音樂(lè)的音長(zhǎng)、時(shí)值、音色等存放在特征向量的矩陣中,在呈現(xiàn)出靜態(tài)可視化圖形的基礎(chǔ)上實(shí)現(xiàn)運(yùn)動(dòng)。所謂點(diǎn)實(shí)現(xiàn)是指,以時(shí)間為橫坐標(biāo)的坐標(biāo)軸保持不變的情況下,以一個(gè)質(zhì)點(diǎn)代表音樂(lè)的播放軌跡,為重點(diǎn)說(shuō)明旋律可視化,這里直接以矩陣的方式輸入特征向量。
例如方法中所例舉的音樂(lè)《小星星》1=C 4/4,部分代碼如下:
>>pitch=[1 1 5 5 6 6 5 4 4 3 3 2 2 1 5 5 4 4 3 3 2 5 5 4 4 3 3 2 1 1 5 5 6 6 5 4 4 3 3 2 2 1]%音高
>>duration=repmat([1 1 1 1 1 1 2],1,6)%利用repmat函數(shù)復(fù)制生成時(shí)值矩陣
在繪制圖形時(shí),階梯圖將每個(gè)起點(diǎn)連接成階梯形狀,stairs階梯圖的坐標(biāo)是<起點(diǎn),值>
>>start(1)=duration(1);%起始矩陣第1個(gè)元素
>>for k=2:1:length(duration);
start(k)=start(k-1)+duration(k);
>>end;%生成起始矩陣
>>start(length(start)+1)=start(length(start))+duration(length
(duration));%最后一個(gè)起始點(diǎn)
>>pitch(length(pitch)+1)=pitch(length(pitch));%最后一個(gè)時(shí)值
方法中應(yīng)用到庫(kù)函數(shù)comet(xdata,ydata,p),它的作用的以類(lèi)似彗星運(yùn)動(dòng)軌跡的形式動(dòng)態(tài)繪制曲線(xiàn)圖。庫(kù)函數(shù)comet、comet3函數(shù),前者主要用于繪制二維動(dòng)態(tài)彗星軌跡圖,comet3函數(shù)用于繪制三維圖像,comet(y)僅需一個(gè)參數(shù)即可繪制出質(zhì)點(diǎn)繞向量y運(yùn)動(dòng)的軌跡,comet(x,y,n)需要三個(gè)參數(shù)繪制質(zhì)點(diǎn)軌跡包含x,y坐標(biāo),第三個(gè)參數(shù)n代表軌跡尾線(xiàn)長(zhǎng)度nXlength(y),n的范圍在0到1之間,默認(rèn)為0.1。如果只運(yùn)用基本的comet()函數(shù)則無(wú)法實(shí)現(xiàn)所需要的動(dòng)態(tài)視圖效果,由于庫(kù)函數(shù)中質(zhì)點(diǎn)運(yùn)動(dòng)的速度過(guò)快人的肉眼無(wú)法清晰地識(shí)別,所以該方法對(duì)comet()函數(shù)進(jìn)行了改進(jìn),在庫(kù)函數(shù)源代碼的四處for循環(huán)繪圖處增加語(yǔ)句pause(0.2);目的是延緩質(zhì)點(diǎn)的運(yùn)動(dòng)軌跡,以此來(lái)實(shí)現(xiàn)0.2秒的暫停時(shí)間使動(dòng)態(tài)圖得以完整呈現(xiàn)。
在MATLAB中對(duì)音樂(lè)振幅、頻率的分析時(shí)利用FFT快速傅里葉變換,它是對(duì)基本的離散傅里葉變換的變形,傳統(tǒng)的DET離散傅里葉變換計(jì)算量大、浪費(fèi)時(shí)間,而使用改進(jìn)的FFT簡(jiǎn)單易行,減少了大量以前需要做的乘積工作[10]。通過(guò)FFT快速傅里葉變換對(duì)頻率和振幅的分析獲取音樂(lè)特征。FFT快速傅里葉變換將時(shí)間采樣信號(hào)與頻率采樣信號(hào)進(jìn)行關(guān)聯(lián),揭示振幅與頻率的特點(diǎn)。基礎(chǔ)的傅立葉級(jí)數(shù)為:
對(duì)于包含n個(gè)均勻采樣點(diǎn)的向量x,其傅里葉變換定義為:
其中i是虛數(shù)單位。對(duì)于x和y,索引j和k的范圍為0到 n-1[11]。
該方法的實(shí)現(xiàn)可以獲取到更加準(zhǔn)確的振幅、頻率便于對(duì)樂(lè)曲中的音高進(jìn)行分析,為以后將該方法應(yīng)用到更多音樂(lè)的識(shí)別中提供了良好的基礎(chǔ)[12]。第一種點(diǎn)實(shí)現(xiàn)方法的實(shí)現(xiàn)結(jié)果如圖1所示。
圖1 音樂(lè)旋律動(dòng)態(tài)實(shí)時(shí)可視化點(diǎn)實(shí)現(xiàn)方法結(jié)果圖
第二種實(shí)現(xiàn)方法是使圖形伴隨著時(shí)間軸一起實(shí)時(shí)運(yùn)動(dòng),比起第一種呈現(xiàn)效果看起來(lái)要更加靈活生動(dòng),所謂動(dòng)態(tài)圖無(wú)外乎是將一幀一幀的圖片呈現(xiàn)出來(lái)并將這若干幀快速的連接起來(lái)呈現(xiàn)出動(dòng)態(tài)的效果[13]。方法中主要對(duì)音高和時(shí)值兩個(gè)矩陣進(jìn)行描述,階梯圖stairs的坐標(biāo)為<起點(diǎn),值>,pitch矩陣保存了音樂(lè)中每個(gè)音調(diào)的音高作為第2個(gè)坐標(biāo)值,由于start矩陣中還不完全是起始值,因此利用相關(guān)的duration時(shí)值矩陣與start矩陣相結(jié)合去描述起點(diǎn)值,將其從時(shí)值變換為起點(diǎn)值生成起點(diǎn)值矩陣,利用>>start(k)=start(k-1)+duration(k);>>start(1)=duration(1);語(yǔ)句實(shí)現(xiàn)[14]。
然后在呈現(xiàn)出靜態(tài)階梯圖的基礎(chǔ)上加入一個(gè)循環(huán)變量,在程序中設(shè)置一個(gè)名為m的變量進(jìn)行循環(huán)控制,設(shè)m的初始值為0,最大值設(shè)定為40,此處注意需要根據(jù)不同的音樂(lè)對(duì)m的最大值進(jìn)行調(diào)整,否則循環(huán)的時(shí)間過(guò)長(zhǎng)產(chǎn)生無(wú)用數(shù)據(jù),此處實(shí)現(xiàn)利用語(yǔ)句m=m+0.8;來(lái)控制循環(huán)速度。最后通過(guò)基本的坐標(biāo)軸函數(shù)>>axis([m,m+8,0,10]);設(shè)置當(dāng)前圖形的坐標(biāo)范圍,參數(shù)的設(shè)置分別為x軸、y軸的最小值和最大值,第二個(gè)參數(shù)設(shè)置為m加8的目的,在于由于在階梯圖中繪制了網(wǎng)格圖片,所以將每一幀呈現(xiàn)出的圖片大小規(guī)定為一幀中有8個(gè)方格的寬度使畫(huà)面更加清晰直觀,否則畫(huà)面將呈現(xiàn)密集或稀疏的狀態(tài)[15]。
主要的部分代碼如下:
>>pitch=[1 1 5 5 6 6 5 4 4 3 3 2 2 1 5 5 4 4 3 3 2 5 5 4 4 3 3 2 1 1 5 5 6 6 5 4 4 3 3 2 2 1];%音高矩陣
>>duration=repmat([1 1 1 1 1 1 2],1,6);%利用repmat函數(shù)復(fù)制生成時(shí)值矩陣
>>start(1)=duration(1);%起始矩陣第1個(gè)元素>>for k=2:1:length(duration);
start(k)=start(k-1)+duration(k);>>end;%生成起始矩陣
>>start(length(start)+1)=start(length(start))+duration(length(duration));%最后一個(gè)起始點(diǎn)
>>pitch(length(pitch)+1)=pitch(length(pitch));%最后一個(gè)時(shí)值
>>stairs(pitch);%繪制階梯圖
>>pz=4;%本音樂(lè)是每小節(jié)有4拍,該值要根據(jù)具體音樂(lè)來(lái)指定
>>zpz=start(length(start));%音樂(lè)的總節(jié)拍數(shù)>>grid on;%設(shè)置網(wǎng)格線(xiàn)
>>set(set(gca,'YTickLabel',{'c','d','e','f','g','a','b','1','2','3','4','5','6','7','C','D','E','F','G','A','B'})%設(shè)置Y軸刻度標(biāo)簽>>m=m+0.8;
>>axis([m,m+8,0,10]);%移動(dòng)坐標(biāo)系>>pause(0.2);
第二種音樂(lè)旋律實(shí)時(shí)動(dòng)態(tài)可視化方法的結(jié)果如圖2、圖3所示。
圖2 音樂(lè)旋律實(shí)時(shí)動(dòng)態(tài)可視化第二種實(shí)現(xiàn)方法的結(jié)果圖(截取的音樂(lè)片段)
圖3 音樂(lè)旋律動(dòng)態(tài)可視化完整圖
結(jié)果顯示音樂(lè)旋律的動(dòng)態(tài)實(shí)時(shí)可視化可以很好地表達(dá)音樂(lè)的旋律,通過(guò)快速傅里葉變換分析進(jìn)行相應(yīng)頻率的轉(zhuǎn)換,對(duì)音樂(lè)中的重要特征進(jìn)行提取并解析。充分運(yùn)用MATLAB函數(shù)庫(kù),使得音高能夠隨著時(shí)間以梯形圖的方式動(dòng)態(tài)呈現(xiàn),可以使人們通過(guò)視覺(jué)的方式更加直觀的理解音樂(lè)。通過(guò)兩種可視化的實(shí)現(xiàn)方式使音樂(lè)的呈現(xiàn)更具有多元化,即使是以可視化的方式呈現(xiàn)也可以擁有多種方式,使旋律變得更加生動(dòng)靈活。將音調(diào)轉(zhuǎn)換成階梯圖方便了人們對(duì)音樂(lè)的理解學(xué)習(xí)即使是對(duì)于不懂樂(lè)理的人也能迅速理解每一個(gè)旋律。
在日后的研究中還要對(duì)該方法繼續(xù)進(jìn)行完善,使其能夠自動(dòng)識(shí)別音樂(lè),不用針對(duì)每一首歌進(jìn)行手動(dòng)設(shè)置。此外該方法以后還將應(yīng)用到對(duì)于人們?cè)诔钑r(shí)所產(chǎn)生的不夠準(zhǔn)確的音調(diào)加以調(diào)整等方面,通過(guò)此方法來(lái)幫助人們進(jìn)行糾正。音樂(lè)可視化已經(jīng)成為未來(lái)的發(fā)展趨勢(shì),音樂(lè)將以各種形態(tài)方式得以展現(xiàn),可視化的應(yīng)用極大地豐富了人們的現(xiàn)實(shí)生活,將來(lái)還會(huì)將該應(yīng)用與大數(shù)據(jù)相結(jié)合從中擴(kuò)充大量的音樂(lè)對(duì)曲庫(kù)進(jìn)行豐富,變成系統(tǒng)完善的體系優(yōu)化其性能,快速實(shí)現(xiàn)大量音樂(lè)的旋律轉(zhuǎn)換。