田佳鷺
(沈陽師范大學,沈陽110034)
音樂由音調、節奏、和聲、音色等部分組成,通過各種不同的音符構成曲調旋律,通過聲音所產生的頻率能夠有效地使人們產生共鳴[1]。此外音樂通常以簡譜、五線譜等記譜法描述,該方法的實現將簡化圖譜的表現形式,利用動態直觀的可視化視圖方法代替原本的靜態視圖,使音樂的表現形式不再單一。可視化的實現為人們帶來視聽上的新體驗,使音樂的美以另一種方式得以呈現,同時有利于對樂理知識掌握甚少的人進行音樂的學習,為人們對于音樂的學習降低門檻[2]。此外該方法借助于MATLAB,利用多種基礎庫函數,例如音樂處理函數、FFT快速傅里葉變換函數、各種繪圖函數等實現音樂旋律的實時動態可視化。
所謂音樂旋律動態可視化從圖形上來說是指將音樂的播放時間設置為二維圖形的橫坐標,將音樂的頻率轉化為音高作為縱坐標,例如:do,re,mi,fa,so,la,xi七個基本音調,在此基礎上根據所選取音樂是C調還是F調以及其他音調進行相應的修改[3]。音樂中不只包含音調還要涉及到節拍、時值等因素的處理,音樂中每一首歌曲都有固定的節拍設置,音的時值代表每個音持續的時長通常分為全音符、二分音符、四分音符、八分音符、十六分音符等。方法所使用的節選音樂為C調音樂《小星星》,它是以四分音符為一拍每小節四拍構成的。音樂的節拍和時值則分別用zpz變量和duration矩陣進行存放,并作為重要元素繪制到階梯圖當中[4]。該方法中動態視圖以可視化的方式呈現時利用了兩種方式:一種是固定橫坐標軸,通過一個代表音樂實時播放的點帶動整個階梯圖的走向來實現動態成像;另一種則更具靈活性,將階梯圖伴隨著橫坐標軸時間軸一起運動,展現出音樂頻率高低起伏、音高持續時間的變化[5]。
作為一款強大的數學軟件MATLAB的繪圖功能較為突出,方便用戶利用可視化的方式實現計算結果[6]。它包含眾多有關數值、符號的計算功能,讓用戶不再被晦澀難懂的數學運算所困擾。此外它還提供了豐富的應用工具箱,極大地方便用戶使用這些處理工具,使得用MATLAB解決問題所編寫的代碼相比其他編程語言例如C、C++、Java等要更加簡潔易懂[7]。該方法中重點用到了MATLAB的數值分析、圖像繪制功能以及音樂處理函數,例如MATLAB中的audioread()函數可以自動獲取音樂的音頻信號、采樣頻率、采樣精度等信息。目前大數據應用十分廣泛,為了與時俱進MATLAB也進行了相應的改善,將其與大數據相結合[8]。實際上MATLAB覆蓋了從最主要的數據獲取、數據的組織和基礎的探索和分析等方面,通過這些高端的機器學習方法進行大數據的一些學習并轉換成模型,之后把大數據嵌入到生產環境當中去,并且MATLAB針對不同的數據規模也擁有著專門的針對這些問題的處理方式,可以說MATLAB現在已經可以被廣泛應用到各個專業領域當中去[9]。
首先將音樂的音長、時值、音色等存放在特征向量的矩陣中,在呈現出靜態可視化圖形的基礎上實現運動。所謂點實現是指,以時間為橫坐標的坐標軸保持不變的情況下,以一個質點代表音樂的播放軌跡,為重點說明旋律可視化,這里直接以矩陣的方式輸入特征向量。
例如方法中所例舉的音樂《小星星》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函數復制生成時值矩陣
在繪制圖形時,階梯圖將每個起點連接成階梯形狀,stairs階梯圖的坐標是<起點,值>
>>start(1)=duration(1);%起始矩陣第1個元素
>>for k=2:1:length(duration);
start(k)=start(k-1)+duration(k);
>>end;%生成起始矩陣
>>start(length(start)+1)=start(length(start))+duration(length
(duration));%最后一個起始點
>>pitch(length(pitch)+1)=pitch(length(pitch));%最后一個時值
方法中應用到庫函數comet(xdata,ydata,p),它的作用的以類似彗星運動軌跡的形式動態繪制曲線圖。庫函數comet、comet3函數,前者主要用于繪制二維動態彗星軌跡圖,comet3函數用于繪制三維圖像,comet(y)僅需一個參數即可繪制出質點繞向量y運動的軌跡,comet(x,y,n)需要三個參數繪制質點軌跡包含x,y坐標,第三個參數n代表軌跡尾線長度nXlength(y),n的范圍在0到1之間,默認為0.1。如果只運用基本的comet()函數則無法實現所需要的動態視圖效果,由于庫函數中質點運動的速度過快人的肉眼無法清晰地識別,所以該方法對comet()函數進行了改進,在庫函數源代碼的四處for循環繪圖處增加語句pause(0.2);目的是延緩質點的運動軌跡,以此來實現0.2秒的暫停時間使動態圖得以完整呈現。
在MATLAB中對音樂振幅、頻率的分析時利用FFT快速傅里葉變換,它是對基本的離散傅里葉變換的變形,傳統的DET離散傅里葉變換計算量大、浪費時間,而使用改進的FFT簡單易行,減少了大量以前需要做的乘積工作[10]。通過FFT快速傅里葉變換對頻率和振幅的分析獲取音樂特征。FFT快速傅里葉變換將時間采樣信號與頻率采樣信號進行關聯,揭示振幅與頻率的特點。基礎的傅立葉級數為:

對于包含n個均勻采樣點的向量x,其傅里葉變換定義為:

其中i是虛數單位。對于x和y,索引j和k的范圍為0到 n-1[11]。
該方法的實現可以獲取到更加準確的振幅、頻率便于對樂曲中的音高進行分析,為以后將該方法應用到更多音樂的識別中提供了良好的基礎[12]。第一種點實現方法的實現結果如圖1所示。

圖1 音樂旋律動態實時可視化點實現方法結果圖
第二種實現方法是使圖形伴隨著時間軸一起實時運動,比起第一種呈現效果看起來要更加靈活生動,所謂動態圖無外乎是將一幀一幀的圖片呈現出來并將這若干幀快速的連接起來呈現出動態的效果[13]。方法中主要對音高和時值兩個矩陣進行描述,階梯圖stairs的坐標為<起點,值>,pitch矩陣保存了音樂中每個音調的音高作為第2個坐標值,由于start矩陣中還不完全是起始值,因此利用相關的duration時值矩陣與start矩陣相結合去描述起點值,將其從時值變換為起點值生成起點值矩陣,利用>>start(k)=start(k-1)+duration(k);>>start(1)=duration(1);語句實現[14]。
然后在呈現出靜態階梯圖的基礎上加入一個循環變量,在程序中設置一個名為m的變量進行循環控制,設m的初始值為0,最大值設定為40,此處注意需要根據不同的音樂對m的最大值進行調整,否則循環的時間過長產生無用數據,此處實現利用語句m=m+0.8;來控制循環速度。最后通過基本的坐標軸函數>>axis([m,m+8,0,10]);設置當前圖形的坐標范圍,參數的設置分別為x軸、y軸的最小值和最大值,第二個參數設置為m加8的目的,在于由于在階梯圖中繪制了網格圖片,所以將每一幀呈現出的圖片大小規定為一幀中有8個方格的寬度使畫面更加清晰直觀,否則畫面將呈現密集或稀疏的狀態[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函數復制生成時值矩陣
>>start(1)=duration(1);%起始矩陣第1個元素>>for k=2:1:length(duration);
start(k)=start(k-1)+duration(k);>>end;%生成起始矩陣
>>start(length(start)+1)=start(length(start))+duration(length(duration));%最后一個起始點
>>pitch(length(pitch)+1)=pitch(length(pitch));%最后一個時值
>>stairs(pitch);%繪制階梯圖
>>pz=4;%本音樂是每小節有4拍,該值要根據具體音樂來指定
>>zpz=start(length(start));%音樂的總節拍數>>grid on;%設置網格線
>>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'})%設置Y軸刻度標簽>>m=m+0.8;
>>axis([m,m+8,0,10]);%移動坐標系>>pause(0.2);
第二種音樂旋律實時動態可視化方法的結果如圖2、圖3所示。

圖2 音樂旋律實時動態可視化第二種實現方法的結果圖(截取的音樂片段)

圖3 音樂旋律動態可視化完整圖
結果顯示音樂旋律的動態實時可視化可以很好地表達音樂的旋律,通過快速傅里葉變換分析進行相應頻率的轉換,對音樂中的重要特征進行提取并解析。充分運用MATLAB函數庫,使得音高能夠隨著時間以梯形圖的方式動態呈現,可以使人們通過視覺的方式更加直觀的理解音樂。通過兩種可視化的實現方式使音樂的呈現更具有多元化,即使是以可視化的方式呈現也可以擁有多種方式,使旋律變得更加生動靈活。將音調轉換成階梯圖方便了人們對音樂的理解學習即使是對于不懂樂理的人也能迅速理解每一個旋律。
在日后的研究中還要對該方法繼續進行完善,使其能夠自動識別音樂,不用針對每一首歌進行手動設置。此外該方法以后還將應用到對于人們在唱歌時所產生的不夠準確的音調加以調整等方面,通過此方法來幫助人們進行糾正。音樂可視化已經成為未來的發展趨勢,音樂將以各種形態方式得以展現,可視化的應用極大地豐富了人們的現實生活,將來還會將該應用與大數據相結合從中擴充大量的音樂對曲庫進行豐富,變成系統完善的體系優化其性能,快速實現大量音樂的旋律轉換。