李 強,于鳳芹
(江南大學 物聯(lián)網(wǎng)工程學院,江蘇 無錫 214122)(*通信作者電子郵箱1944189618@qq.com)
旋律作為音樂的靈魂,越來越引起研究者的關(guān)注,旋律的提取也成為音樂信息檢索(Music Information Retrieval, MIR)領(lǐng)域的研究熱點之一。旋律是單音高序列,即傾聽者能夠以該序列作為基準采用哼唱或吹口哨的方式重現(xiàn)音樂片段,或者傾聽者會自然而然地將其識別為音樂的本質(zhì)或核心[1],物理表示為對應主音中感知音高的基頻值(F0)序列[2]。在音樂信息檢索[3-4]、歌手識別[5]、音樂識譜[6-7]、以及音樂流派分類[8]等方面有廣泛的應用。
音樂旋律的提取方法分為基于源分離和基于音高顯著性兩大類[9]。后者一般直接對音頻信號計算音高顯著性,然后根據(jù)不同的方法提取旋律音高。文獻[10]提出源/濾波器模型的方法計算音高顯著性,然后采用維特比平滑的后處理算法得到旋律音高線;該模型提高了音高估計精度,但是算法計算音高顯著性的復雜度很高,并且對含有大量無聲幀的音樂效果很差。文獻[11]提出基于諧波和(Harmonic Summation, HS)的方法計算音高顯著性,然后采用聽覺流線索[12]的方法創(chuàng)建音高輪廓,通過對音高輪廓的各特征分布特性設計濾波規(guī)則來濾除非旋律音高輪廓,降低了計算音高顯著性的復雜度;但是當計算新的音高輪廓特征時,該算法必須重新設計濾波規(guī)則。文獻[13]提出采用機器學習的分類算法自動選擇旋律音高輪廓,克服了重新設計濾波規(guī)則的缺點;但是該算法采用HS計算音高顯著性,相較于源/濾波器模型,取得的音高估計精度較低。文獻[14]提出將源/濾波器模型和HS相結(jié)合計算音高顯著性,提高了音高估計精度;但是該算法只針對具有時間重疊的音高輪廓采用基于概率的大小來選擇旋律音高輪廓,并沒有區(qū)分含有倍頻錯誤的音高輪廓。
為了提高音高估計精度和減少倍頻錯誤,本文從音高輪廓的創(chuàng)建、旋律音高輪廓的選擇以及后處理三個部分提出改進音高輪廓創(chuàng)建和選擇的旋律提取算法。首先,采用HS和源濾波模型相結(jié)合的方法計算音高顯著性,得到旋律音高候選;然后,在采用基于時間和音高保持連續(xù)的聽覺流線索創(chuàng)建音高輪廓的基礎(chǔ)之上,提出利用音高顯著性的連續(xù)性,即將聽覺流線索和音高顯著性的連續(xù)性相結(jié)合創(chuàng)建音高輪廓,減少因不同聲源的相互干擾而導致同一聲源音高序列的不連續(xù);通過計算音高輪廓的統(tǒng)計特征并采用該特征訓練的隨機森林分類器選擇旋律音高輪廓,考慮到伴奏一般用于主音的修飾或作音樂片段的重復,提出利用伴奏的重復特性進一步選擇旋律音高輪廓,由于重復特性在音高輪廓集中表現(xiàn)為不同時間上具有等長且等音高的音高輪廓,將采用動態(tài)時間規(guī)整(Dynamic Time Warping, DTW)算法計算音高輪廓間的相似度,減小因音符長度的不同而引入的非線性偏差;最后,根據(jù)相鄰音高輪廓間的長時關(guān)系,提出基于相鄰音高輪廓每一幀的音高加權(quán)均值在時間上的平均檢測倍頻錯誤,并利用維特比平滑算法平滑旋律音高輪廓形成旋律音高線。
由于不同聲源的相互干擾,采用基于時間和音高保持連續(xù)的方法創(chuàng)建的音高輪廓將會同時出現(xiàn)不同聲源的音高,為了提高同一聲源音高序列的連續(xù)性,將聽覺流線索和音高顯著性的連續(xù)性相結(jié)合創(chuàng)建音高輪廓。
創(chuàng)建音高輪廓時,為了減少非旋律音高輪廓的創(chuàng)建,將刪除音高顯著性滿足式(1)的時頻點。
(1)
其中:μs和σs分別為音高顯著性的均值和標準差;τσ是界定濾波器低于μs的偏差程度;s[t]為幀t內(nèi)的音高顯著性,smax[t]為幀t內(nèi)的最大音高顯著性;τ+是一個比例參數(shù)。
為了跟蹤時頻點形成音高輪廓,首先選擇具有最大音高顯著性的點作為起始點(t,pt);根據(jù)聽覺流線索方法,對t+1幀計算滿足式(2)的音高集;然后,為了利用音高顯著性的連續(xù)性,對該范圍內(nèi)的音高計算與起始點的音高顯著性差值和音高差值,將滿足兩差值的絕對值之和最小的音高作為t+1幀的音高值,如式(3)。對起始點重復上述步驟計算t+2幀的音高值,以此類推,形成音高輪廓,否則重新選擇起始點重復上述步驟形成新的音高輪廓。
(2)
(3)
在創(chuàng)建音高輪廓過程中,當伴奏和主音的音高相近時,采用時間和音高保持連續(xù)的方法將無法區(qū)分兩者的音高。所以,本節(jié)從音高顯著性的連續(xù)性角度,將兩者相結(jié)合以進一步區(qū)分旋律候選音高。
DTW是一種非線性匹配算法,可以處理發(fā)音長短不一的模板匹配問題。該算法主要是為了尋找一個時間規(guī)整函數(shù)j=w(i),將序列T(i)的時間軸i非線性地映射到序列R(j)的時間軸j上,并使該函數(shù)w滿足式(4)。
(4)
其中:d[T(i),R(w(i))]是序列T的第i個元素和序列R的第j=w(i)個元素之間的距離測度,則D[T,R]是處于最優(yōu)時間規(guī)整情況下兩序列之間的累積距離。
伴奏的重復特性在音高輪廓集中表現(xiàn)為不同時間上具有等長且等音高的音高輪廓,反過來,滿足一定周期性的音高輪廓屬于伴奏,即將音高輪廓按周期平移后,能找到一音高輪廓與之近似相等,如式(5)。利用這一思想,提出一個兩階段方法從旋律音高輪廓集中去除非旋律音高輪廓:第一階段,從非旋律音高輪廓集中得到滿足式(5)的音高輪廓;第二階段,遍歷旋律音高輪廓集,去除集合中與該音高輪廓近似相等的音高輪廓。整個過程被描述見算法1。
(5)
算法1 基于伴奏重復特性選擇旋律音高輪廓。
根據(jù)驗證集上的最大綜合評價指標設置的似然性閾值F1,將音高輪廓劃分到旋律音高輪廓集P1={C1,C2,…,CM}和非旋律音高輪廓集P2={C1′,C2′,…,CN′};
將伴奏的重復周期范圍設置為T∈[1,5]s;
for 每一個Ci′∈P2do
ρ=0;
for 每一個Cj′∈P2(i≠j,Ci′和Cj′沒有時間重疊) do
if |len(Ci′)-len(Cj′)|≤Δυthen
采用DTW算法計算Ci′和Cj′之間的相似度SD;
ρ++;
endif
endif
endfor
ifρ>0 then
for 每一個Ck∈P1(Ci′和Ck沒有時間重疊) do
采用DTW算法計算Ci′和Ck之間的相似度SD;
從集合P1中刪除音高輪廓Ck;
endif
endif
endfor
endif
endfor
returnP1;
由于音高輪廓集P1和P2是根據(jù)音高輪廓和實際旋律線的音高重疊率進行劃分的,所以音高輪廓無論被標記為什么類型的輪廓,音高輪廓中都會含有一定數(shù)量的旋律音高,導致分類器給出誤分類。所以,本節(jié)利用伴奏具有的重復特性,進一步去除P1中的非旋律音高輪廓。
根據(jù)以下假設[11]提出基于相鄰音高輪廓的長時關(guān)系檢測倍頻錯誤:旋律音高輪廓的音高顯著性均值要大于其倍頻處的音高顯著性均值,以及旋律傾向于有一個連續(xù)的音高序列,避免大的音高跳躍。
首先,為了找到發(fā)生倍頻的音高輪廓,搜索滿足時間重疊以及在重疊時間內(nèi)輪廓音高距離的均值滿足倍頻程的音高輪廓對;然后,對倍頻音高輪廓的重疊區(qū)域向前和向后分別延伸兩個重疊時間,根據(jù)式(6),計算這兩個時間段內(nèi)每幀的音高加權(quán)均值,體現(xiàn)正確旋律音高輪廓有很大的音高顯著性;為了利用音高輪廓間的長時關(guān)系,根據(jù)式(7),計算音高加權(quán)均值在兩個延伸時間段內(nèi)的均值;最后,去除音高均值遠離上述均值的倍頻音高輪廓。
(6)
其中:pt為對應幀t的音高,spt為時頻點(t,pt)的音高顯著性,SSt為幀t的音高顯著性和,Wt為幀t的音高加權(quán)均值。
(7)
算法框圖如圖1所示,具體步驟如下:
1)采用等響度濾波器處理音頻,增大聽覺敏感的頻率范圍;對音頻信號進行短時傅里葉變換(Short Time Fourier Transform, STFT),為得到精確的頻率和幅度值,采用相位聲碼器[15]進行頻率/幅度糾正,提取每幀的頻譜峰值。
2)將HS和源濾波模型相結(jié)合計算音高顯著性,提取每幀的音高顯著性峰值。
3)將式(1)濾除的時頻點存儲在S-,剩余的點存儲在S+;將S+中滿足最大音高顯著性的點(t,pt)作為起始點添加到Ch;從Ch中當前點的下一幀出發(fā),搜索S+中與起始點的音高差滿足式(2)的時頻點集,對搜索到的時頻點計算其與起始點的音高差值Pd和音高顯著性差值Sd,根據(jù)式(3),將滿足(|Pd|+λ|Sd|)最小的時頻點添加到Ch,并從原集合S+中刪除;對Ch中當前點的下一幀重復上述步驟,直到在原集合S+中沒有滿足式(2)的時頻點;考慮到被掩蔽的時頻點可能位于S-,按上述步驟搜索S-,當跟蹤長度位于100 ms范圍內(nèi),將得到的時頻點添加到Ch,重新回到S+重復上述步驟,否則,去除S-中的音高跟蹤,將Ch添加到集合C中,并將起始點從S+中刪除以及Ch清零;在S+中重新尋找滿足最大音高顯著性的點重復上述步驟,直到S+中沒有剩余點;C即為形成的音高輪廓集。
4)計算關(guān)于時間、音高、音高顯著性等音高輪廓統(tǒng)計特征,然后利用音高輪廓標簽特征和統(tǒng)計特征訓練的隨機森林分類器選擇旋律音高輪廓。
5)根據(jù)算法1,從旋律音高輪廓集P1中進一步去除非旋律音高輪廓。
7)利用維特比平滑算法平滑旋律音高輪廓形成旋律音高線。
圖1 改進音高輪廓創(chuàng)建和選擇的旋律提取算法
為了驗證本文算法的有效性,通過仿真將本文算法、SAL算法[11]和C3算法[14]在音樂數(shù)據(jù)集ORCHSET[16]上進行對比分析。數(shù)據(jù)集ORCHSET作為音樂信息檢索評測(Music Information Retrieval Evaluation eXchange, MIREX)比賽的測試數(shù)據(jù)之一,由交響樂、交響詩、芭蕾舞套裝和其他由交響樂團演奏的音樂形式,共由64個wav格式的音頻錄音組成,采樣率為44.1 kHz,音樂持續(xù)時間的范圍為10~32 s,并且該數(shù)據(jù)集將每一首音樂的左聲道和右聲道以平均的形式合并為單聲道。對比算法將會在Inter Core i3-3234 3.4 GHz CPU、2 GB RAM的硬件環(huán)境,以及Windows 10、Python 2.7、Ubuntu1 4.04的軟件環(huán)境下運行。
實驗將數(shù)據(jù)集隨機劃分為63%的訓練集、12%的驗證集和25%的測試集。為了解釋最終結(jié)果的偏差,采用四次不同的隨機劃分重復每一次實驗。
算法評價指標采用MIREX的評價方法,對于音高估計的評價采用原音高精度(Raw Pitch Accuracy, RPA),即正確估計的基頻個數(shù)占真實基頻個數(shù)的比例;原色度精度(Raw Chroma Accuracy, RCA)表示將估計的音高值映射到一個八度范圍內(nèi),計算正確估計的基頻個數(shù)占真實基頻個數(shù)的比例;對于有聲和無聲幀的檢測采用聲音召回率(Voicing Recall rate,VR)評價,即正確估計的有聲幀的個數(shù)占真實有聲幀個數(shù)的比例;聲音虛警率(Voicing False Alarm rate,VFA)表示錯誤估計的有聲幀個數(shù)占真實無聲幀個數(shù)的比例;而對音高估計和幀檢測兩者總的評價采用總精度(Overall Accuracy,OA),即正確估計的幀和音高個數(shù)占真實幀和音高個數(shù)的比例。
為了驗證本文在創(chuàng)建音高輪廓、選擇旋律音高輪廓以及后處理階段提出的各方法的有效性,將各方法分別組合進行仿真實驗得到表1。
表1 各階段的方法及其組合在總精度上的對比結(jié)果
從表1可以看出,本文提出的創(chuàng)建音高輪廓方法相比聽覺流線索提高了0.98個百分點的總精度;在本文的創(chuàng)建音高輪廓方法基礎(chǔ)之上,基于伴奏重復特性的音高輪廓選擇方法提高了1.6個百分點的總精度,倍頻錯誤的檢測方法提高了2.47個百分點的總精度,說明了該類型的音樂數(shù)據(jù)滿足伴奏的重復特性以及含有一定的諧波特性;對比OA列的起始和結(jié)束行得出本文算法提高了3.32個百分點的總精度,說明了本文方法的有效性。
仿真實驗得出SAL算法、C3算法和本文算法的評價指標在測試數(shù)據(jù)集上的均值結(jié)果如表2所示。
表2 各算法的評價指標在測試數(shù)據(jù)集上的均值結(jié)果
從表2可以看出,相對于SAL算法,C3算法在OA上提高了21.57個百分點,而本文算法在OA上較C3算法提高了3.32個百分點;從RPA結(jié)果可以看出,本文算法提高了音高估計精度,觀察RPA和RCA兩列的差別,從上到下分別為30.42個百分點、17.9個百分點和8.72個百分點,本文算法得到了最小的差別,表明了本文提出的倍頻錯誤檢測方法的有效性;對比表2中三種算法的VR和VFA兩列,得出想要提高有聲幀的召回率,那么相應地將會提高有聲幀的錯誤率;由于本文算法進一步選擇旋律音高輪廓以及進行后處理步驟,得出本文降低了有聲幀的召回率。
為了可視化各算法在音樂數(shù)據(jù)集上的效果,得到各算法提取的旋律音高線的對比如圖2,其中灰色線段為算法估計的旋律,而黑色線段為真實旋律。為了提高可視化的可對比效果,將各算法提取的旋律音高在原基礎(chǔ)上提高一個倍頻程,真實旋律的音高保持不變,并且采用虛線連接部分音高輪廓(虛線點不代表音高)。
從圖2可以看出,大部分的音高錯誤都集中在5~15 s以及20~28 s的范圍內(nèi),是音高變化相對頻繁的區(qū)域;而圖2(a)的SAL算法在該范圍內(nèi)給出了近90%的錯誤,即算法對該類型的數(shù)據(jù)效果很差;對于圖2(b),C3算法在10~15 s以及23~28 s的范圍內(nèi)丟失了大量的音高輪廓,說明該算法在該范圍內(nèi)將正確的音高輪廓劃分為非旋律輪廓;而圖2(c)中的本文算法則在該范圍內(nèi)給出了正確的音高輪廓,但是算法在5~10 s以及20~22 s的范圍內(nèi)產(chǎn)生了少量的倍頻錯誤和一部分音高輪廓的丟失。
圖2 各算法提取的音高旋律線與真實旋律的對比
本文針對旋律音高線包括不同聲源的音高而導致音高估計精度降低,以及在音高輪廓分類之后,如何進一步選擇旋律音高輪廓的問題,提出改進音高輪廓創(chuàng)建和選擇的旋律提取算法。算法在采用聽覺流線索方法創(chuàng)建音高輪廓的基礎(chǔ)上,利用音高顯著性的連續(xù)性,降低音高輪廓包括不同聲源的音高,并通過伴奏的重復特性進一步去除旋律音高輪廓中的非旋律音高輪廓,以提高旋律音高輪廓的區(qū)分精度。實驗結(jié)果表明,所提算法可有效提高音高估計精度和總精度。仿真實驗結(jié)果表明,該算法提高了音高估計精度,減少了倍頻錯誤,但是總精度卻只達到了53.64%,說明本算法還有很大的完善空間,下一步將考慮引入音色特征,進一步提高音高輪廓的區(qū)分精度。