黎思泉,王泓程,顧思恒,張杰霖,萬(wàn)永菁
(華東理工大學(xué) 信息科學(xué)與工程學(xué)院,上海 200237)
鋼琴是“樂(lè)器之王”,鋼琴學(xué)習(xí)者的數(shù)量也十分龐大。為了提高習(xí)琴者的學(xué)習(xí)效率,各式各樣的鋼琴陪練軟件應(yīng)運(yùn)而生。為了能準(zhǔn)確評(píng)價(jià)習(xí)琴者的演奏效果,必須采用有效的樂(lè)音識(shí)別技術(shù)提取出隱含在鋼琴音頻中的節(jié)奏和音符。
正確的音符端點(diǎn)檢測(cè)是實(shí)現(xiàn)樂(lè)音識(shí)別的前提。文獻(xiàn)[1]改進(jìn)了短時(shí)能量算法,采用自適應(yīng)閾值尋找音符段起始位置,該算法能夠大致分割出不同的音符段。Masri[4]提出了一種對(duì)高頻能量進(jìn)行加權(quán)的算法,能夠加強(qiáng)時(shí)域特征,使音符端點(diǎn)識(shí)別更加準(zhǔn)確,但是,2種算法在識(shí)別大字組的音頻時(shí)準(zhǔn)確率比較低。Bello[3]等提出用相位特征來(lái)表征音符起始點(diǎn),但僅對(duì)部分音頻有較好的效果,在相位特征不夠明顯的樂(lè)譜中,檢測(cè)準(zhǔn)確率低于基于幅值的識(shí)別方法。
在端點(diǎn)的識(shí)別算法中,識(shí)別準(zhǔn)確率更高的有基于距離的算法,比較有代表性的有基于短時(shí)傅里葉變換以及諧波結(jié)構(gòu)計(jì)算頻譜距離[4]和基于短時(shí)MFCC倒譜計(jì)算距離[5]。基于距離的算法能夠有效切分音符,但是,鋼琴由于自身諧波規(guī)律,識(shí)別某些頻譜突變的和弦可能會(huì)導(dǎo)致同一個(gè)音符段被切分;在快節(jié)奏樂(lè)曲中出現(xiàn)2個(gè)連彈的相同琴鍵的情況下,也無(wú)法準(zhǔn)確識(shí)別。
近年來(lái)提出了一些基于先驗(yàn)知識(shí)的識(shí)別算法,預(yù)先提取樂(lè)譜的音頻特征,再與待識(shí)別鋼琴音頻進(jìn)行校對(duì)得出音頻的頻域信息,從而實(shí)現(xiàn)音符切分,效果比較好的有采用改進(jìn)的非負(fù)矩陣分解(Non-negative Matrix Factorization,NMF)提取音頻特征的算法[6]和基于Chroma-based BOW特征的算法[7]。通過(guò)預(yù)先提取單音的頻譜特征可有效識(shí)別音符起始點(diǎn),但是,必須在識(shí)別鋼琴曲音頻前預(yù)先對(duì)鋼琴曲的標(biāo)準(zhǔn)音頻進(jìn)行特征提取,準(zhǔn)備工作量大。
針對(duì)鋼琴樂(lè)音音符端點(diǎn)檢測(cè)問(wèn)題,本文提出了一種融合時(shí)頻信息的算法,在能量峰值確定音符端點(diǎn)的基礎(chǔ)上,利用頻域的信息再進(jìn)行端點(diǎn)篩選,并通過(guò)分析能量衰減的程度保證篩選的準(zhǔn)確性。通過(guò)改進(jìn)能夠?qū)崿F(xiàn)對(duì)大字組音頻的準(zhǔn)確識(shí)別,并且不需要先驗(yàn)知識(shí),以準(zhǔn)確地識(shí)別出音符起始點(diǎn)。
算法首先基于音頻幀能量突變信息進(jìn)行端點(diǎn)預(yù)檢測(cè),然后依據(jù)音頻鍵號(hào)頻譜信息進(jìn)行端點(diǎn)過(guò)濾,實(shí)現(xiàn)音符端點(diǎn)的精準(zhǔn)切分。
鋼琴的音符能量來(lái)源于琴槌對(duì)琴弦的短時(shí)敲擊,并經(jīng)過(guò)鋼琴腔體后傳入人耳,因此,可將人耳感知到的鋼琴音符視作一個(gè)短時(shí)能量脈沖。
首先對(duì)音頻信號(hào)進(jìn)行分幀處理,計(jì)算每一幀信號(hào)的絕對(duì)幅度平方和,獲得每一幀信號(hào)的能量Ei,如式(1)所示:

式(1)中:si(m)為第i幀音頻信號(hào)的第m個(gè)點(diǎn)的幅值;L為幀長(zhǎng),幀長(zhǎng)的取值與采樣頻率相關(guān),為了簡(jiǎn)化運(yùn)算并保證準(zhǔn)確率,通常取采樣頻率的1.5%~2%作為幀長(zhǎng)。
然后,計(jì)算相鄰兩幀的能量差△Ei,如式(2)所示,即:

式(2)中:△Ei為音頻幀能量的變化信息。
由于計(jì)算了幀與幀之間,而非點(diǎn)與點(diǎn)之間的能量差信息,△Ei其實(shí)已經(jīng)過(guò)濾了一些原始音頻信號(hào)中的微小能量起伏,對(duì)計(jì)算整體音頻信息的能量變化起到了平滑的作用。此外,由于采用了差分運(yùn)算,相鄰兩幀的能量差值△Ei比每一幀能量Ei更易用于音符起始點(diǎn)的判斷,超過(guò)某一門(mén)限的△Ei的正峰值位置對(duì)應(yīng)初始音符預(yù)測(cè)點(diǎn)。
鋼琴曲《波爾卡舞曲》的樂(lè)譜片段和對(duì)應(yīng)音頻如圖1所示,基于短時(shí)能量與短時(shí)能量求差值的檢測(cè)函數(shù)如圖2所示。

圖1 鋼琴曲《波爾卡舞曲》的樂(lè)譜片段和對(duì)應(yīng)音頻圖

圖2 基于短時(shí)能量與短時(shí)能量求差值的檢測(cè)函數(shù)
為了避免初始音符預(yù)測(cè)點(diǎn)中存在相鄰過(guò)近的偽預(yù)測(cè)點(diǎn),本文采用以下步驟處理初始音符起始點(diǎn):①求相鄰兩幀的能量差值△Ei的極大值,將△Ei>0的極大值點(diǎn)標(biāo)記為候選預(yù)測(cè)點(diǎn),并存于集合A中;②尋找集合A中所有候選預(yù)測(cè)點(diǎn)的最大值,并標(biāo)記此點(diǎn)為預(yù)測(cè)起始點(diǎn);③尋找所有與步驟②中標(biāo)記的預(yù)測(cè)起始點(diǎn)之間的距離小于D的候選預(yù)測(cè)點(diǎn),將這些點(diǎn)從集合A中清除;④重復(fù)步驟②和步驟③,直至集合A中沒(méi)有可以再標(biāo)記的候選預(yù)測(cè)點(diǎn)為止。
在上述步驟中,D定義為相鄰音符端點(diǎn)的最小間隔,計(jì)算公式為:

式(3)中:Sp為鋼琴演奏的拍速,單位為“拍/分”;n為樂(lè)譜最小音符為n分音符;fs為采樣頻率;b為誤差參數(shù),b的取值與樂(lè)音的拍數(shù)有關(guān),為了盡量降低預(yù)測(cè)過(guò)程的漏檢率,b的取值通常在20~40之間。

圖3 基于檢測(cè)函數(shù)極值點(diǎn)進(jìn)行切分
圖3是圖1基于檢測(cè)函數(shù)極值點(diǎn)進(jìn)行音頻切分所得圖像,在沒(méi)有進(jìn)行極值點(diǎn)過(guò)濾時(shí)存在很多冗余點(diǎn),經(jīng)過(guò)上述步驟的處理,得出圖4所切分圖像,在保留所有可能的音符端點(diǎn)的前提下,過(guò)濾冗余點(diǎn),但要保持音頻處于過(guò)切分狀態(tài)。

圖4 過(guò)濾之后所得的極值點(diǎn)
基于音頻幀能量突變信息的端點(diǎn)預(yù)檢測(cè)可以保證在低漏檢率下,提取出音頻中的初始端點(diǎn)位置。但是,由于算法中的門(mén)限尺度較為寬松,這些預(yù)測(cè)的端點(diǎn)中仍有部分音符偽端點(diǎn),需要進(jìn)行二次濾除。本文基于音頻鍵號(hào)頻譜信息對(duì)初始音符端點(diǎn)進(jìn)行過(guò)濾。鋼琴琴鍵對(duì)應(yīng)基頻如圖5所示。

圖5 鋼琴琴鍵分布圖
由圖5可知,每上升12個(gè)音高,基音頻率將會(huì)加倍,即鋼琴符合12平均率。每個(gè)琴鍵對(duì)應(yīng)1個(gè)基頻,第i個(gè)琴鍵的基頻為fi,其公式為:

式(4)中:fi為第i號(hào)琴鍵的基頻,1≤i≤88;f0=440 Hz,是一個(gè)常數(shù)。
鋼琴音頻的諧波頻率如式(5)所示,在基頻為f的琴鍵音頻中,第k次諧波頻率fk的計(jì)算公式為:式(5)中:B為鋼琴的不諧和系數(shù),由琴弦的材料、長(zhǎng)度等因素決定,一般介于50×10-6~1 000×10-6之間。

對(duì)相鄰的2個(gè)初始音符端點(diǎn)之間的音頻段進(jìn)行傅里葉變換,得到其頻譜A(f)。將音頻段頻譜A(f)按照鋼琴基頻規(guī)律歸并為琴鍵鍵號(hào)對(duì)應(yīng)的譜值A(chǔ)(i)。對(duì)應(yīng)關(guān)系如式(6)所示:

然后,計(jì)算兩相鄰音頻段的頻譜特征相似度,即:

式(7)中:Aj和Aj+1為相鄰的2個(gè)音頻段的鍵號(hào)譜值,均為 1×88 的一維向量;Aj+1T代表Aj+1進(jìn)行轉(zhuǎn)置。
當(dāng)C(Aj,Aj+1)為 1 時(shí),說(shuō)明Aj和Aj+1兩段音頻譜特征完全相似;當(dāng)C(Aj,Aj+1)為 0 時(shí),說(shuō)明Aj和Aj+1兩段音頻譜特征不相似。
新音符產(chǎn)生時(shí),單個(gè)或部分音符頻段的能量將會(huì)大幅上升,即頻率特征中的部分元素將會(huì)發(fā)生突變,相似度值將會(huì)比較小,由此可以辨別兩段音頻是否有不同的音符頻譜信息。鋼琴音頻在不改變觸鍵音符時(shí),會(huì)隨著時(shí)間延長(zhǎng)出現(xiàn)部分諧音甚至基頻頻譜成分衰減的情況,而在時(shí)域中又體現(xiàn)出一個(gè)能量的偽峰,極易造成音符端點(diǎn)錯(cuò)誤切分。如圖4中第一個(gè)音符被切分的情況,通過(guò)基于音頻幀能量突變信息的端點(diǎn)預(yù)檢測(cè)后,出現(xiàn)了第二根冗余的音符端點(diǎn)分割線(xiàn)。但是,由于琴鍵觸鍵時(shí)間較長(zhǎng)引起頻譜成分衰減,第一段和第二段的鍵號(hào)頻譜相似度也不大,仍然無(wú)法去除第二個(gè)冗余端點(diǎn)。
為了解決此問(wèn)題,本文采用能量補(bǔ)償?shù)姆椒ㄟM(jìn)行修正,即將前一個(gè)音頻段的鍵號(hào)頻譜減去后一個(gè)音頻段的鍵號(hào)頻譜,如果某一鍵號(hào)譜值的差值為正,將此差值補(bǔ)償?shù)胶笠欢我纛l的對(duì)應(yīng)的鍵號(hào)譜值中;如果某一鍵號(hào)譜值的差值為負(fù),則不予補(bǔ)償。計(jì)算補(bǔ)償后的相鄰音頻段的鍵號(hào)頻譜相似度,并以此相似度的值判斷后一段音頻端點(diǎn)是否為偽端點(diǎn)。如圖6所示,通過(guò)鍵號(hào)譜值補(bǔ)償,前后2個(gè)音頻段的相似度極高,即可判定為2個(gè)音符的觸鍵鍵號(hào)是一致的。


圖6 切分了同一個(gè)音符段相鄰音頻的補(bǔ)償前后的頻譜特征
當(dāng)連續(xù)2個(gè)相同的按鍵出現(xiàn)時(shí),余弦相似度的計(jì)算就會(huì)過(guò)濾掉正確的音符起始點(diǎn),如圖7所示,鋼琴曲《小星星》的前2個(gè)音符是一樣的,連續(xù)敲擊相同琴鍵,所得兩段音頻的頻譜特征一定是相似的。為了避免誤刪除相鄰音符觸鍵相同的音頻端點(diǎn),本文采用基于相鄰音頻鍵號(hào)頻譜的曼哈頓距離的音頻端點(diǎn)修正算法。

圖7 《小星星》部分樂(lè)譜以及前2個(gè)音符的音頻時(shí)域圖
無(wú)法用相似度區(qū)分的相鄰音頻段能量分布如圖8所示。

圖8 無(wú)法用相似度區(qū)分的相鄰音頻段能量分布
相鄰音頻鍵號(hào)頻譜的曼哈頓距離為:

本文取相似度門(mén)限為Si,曼哈頓距離門(mén)限為Di。當(dāng)相鄰音頻的鍵號(hào)頻譜相似度大于Si時(shí),再進(jìn)行曼哈頓距離的驗(yàn)證。如果曼哈頓距離小于Di,說(shuō)明能量衰減程度比較低,有新的音符按下,則不刪除該音符端點(diǎn);反之,如果曼哈頓距離大于Di,則判定能量衰減了,兩段音頻為同一個(gè)音符段,刪除該冗余端點(diǎn)。經(jīng)過(guò)多次實(shí)驗(yàn)發(fā)現(xiàn),Si取0.94~0.96,Di取0.04~0.08為宜。

圖12 不同節(jié)奏下鋼琴曲《波爾卡舞曲》的評(píng)價(jià)參數(shù)
圖9和圖10是經(jīng)過(guò)余弦相似度和曼哈頓距離篩選之后的切分音頻圖,圖4是篩選之前的切分音頻圖,對(duì)應(yīng)圖1和圖7中的樂(lè)譜,可以確定在經(jīng)過(guò)音符端點(diǎn)的篩選之后,有效濾除錯(cuò)誤的音符端點(diǎn)。

圖10 經(jīng)過(guò)篩選后的《小星星》選段切分圖
本文采用準(zhǔn)確率P(Precision)、召回率R(Recall)和F度量(F-Measure)等指標(biāo)評(píng)價(jià)音符端點(diǎn)的識(shí)別效果。其中,F(xiàn)度量是結(jié)合準(zhǔn)確率與召回率的一個(gè)綜合性評(píng)價(jià)指標(biāo)。準(zhǔn)確率P、召回率R和F度量3個(gè)指標(biāo)公式為[8]:

式(9)(10)(11)中:Ncorrect為檢測(cè)出的正確音符個(gè)數(shù);Nmiss為在檢測(cè)過(guò)程中遺漏的未被檢測(cè)出來(lái)的音符個(gè)數(shù)。
圖11和圖12為采用本文算法對(duì)不同節(jié)拍樂(lè)曲進(jìn)行識(shí)別的效果評(píng)價(jià)。從圖11和圖12中可以看出,本文算法對(duì)鋼琴曲《波爾卡舞曲》和《小星星》識(shí)別的F度量參數(shù)在95%以上,在不同節(jié)奏的端點(diǎn)檢測(cè)中有較好的準(zhǔn)確率和召回率。對(duì)比圖11和圖12,《小星星》的端點(diǎn)檢測(cè)效果不如《波爾卡舞曲》,原因在于本文基于余弦相似度進(jìn)行篩選,小星星樂(lè)譜中出現(xiàn)過(guò)多的重復(fù)音符,在一定程度上影響了識(shí)別效果。圖10是138拍每分鐘的一段《小星星》音頻切分圖,對(duì)照?qǐng)D7中的樂(lè)譜圖,第9個(gè)音符被切分成兩段,在快節(jié)奏按壓琴鍵時(shí),音符衰減不明顯,曼哈頓距離判斷衰減的難度比較大。識(shí)別樂(lè)曲中有較多重復(fù)音符會(huì)影響識(shí)別準(zhǔn)確率,對(duì)于一般音頻可以保證較高的準(zhǔn)確率。在重復(fù)音符的影響下,對(duì)音頻進(jìn)行端點(diǎn)檢測(cè)的準(zhǔn)確率和召回率仍能保證在95%以上。

圖11 不同節(jié)奏的鋼琴曲《小星星》的評(píng)價(jià)參數(shù)
本文算法融合時(shí)頻信息,基于時(shí)域能量進(jìn)行端點(diǎn)預(yù)檢測(cè),找出能量差值突變的點(diǎn)作為預(yù)檢測(cè)的端點(diǎn),通過(guò)頻域分析篩除過(guò)切分的音符端點(diǎn)。運(yùn)用本文算法進(jìn)行端點(diǎn)檢測(cè),在不遺漏音符端點(diǎn)的基礎(chǔ)上能夠有效減少識(shí)別錯(cuò)誤的音符端點(diǎn)。實(shí)驗(yàn)表明,對(duì)不同節(jié)奏的音頻進(jìn)行端點(diǎn)檢測(cè),本文算法能夠保證有較好的檢測(cè)效果。
[1]卞毓偉,郭玲.基于權(quán)值分配的音符識(shí)別研究[J].計(jì)算機(jī)與現(xiàn)代化,2017(3):122-126.
[2]Rodet X,Jaillet F.Detection and Modeling of Fast Attack Transients[J].Proceedings of the Icmc01 La Habana,2001(12).
[3]Bello J P,Sandler M.Phase-based note onset detection for music signals[C]//IEEE International Conference on Acoustics,Speech,and Signal Processing.Proceedings,IEEE,2003:441-444.
[4]Masri P.Computer Modeling of Sound for Transformation and Synthesis of Musical Signals[D].Bristol:University of Bristol,1996.
[5]卞毓偉.鋼琴?gòu)椬鄻?lè)曲識(shí)別算法研究及其APP設(shè)計(jì)與實(shí)現(xiàn)[D]南京:南京理工大學(xué),2017.
[6]萬(wàn)玉龍,王憲亮,周若華,等.基于非負(fù)矩陣分解的鋼琴多音符估計(jì)[J].網(wǎng)絡(luò)新媒體技術(shù),2014,3(5):23-27.
[7]張秀,李念祖,李曉強(qiáng),等.基于Chroma-based BOW特征的多版本音樂(lè)識(shí)別[J].小型微型計(jì)算機(jī)系統(tǒng),2015,36(2):397-400.
[8]陳雪梅.樂(lè)音信號(hào)的多基頻估計(jì)[D].濟(jì)南:山東大學(xué),2014.