版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
目錄緒論在本章節(jié)中,主要依據(jù)當(dāng)前哼唱檢索中存在的兩個主要問題,說明本課題研究的意義所在。通過深入分析國內(nèi)外哼唱檢索的發(fā)展概況,給出論文的主要研究工作以及論文的組織結(jié)構(gòu)。1.1研究的背景及意義音樂是人類的共通頻率密碼,它已經(jīng)與人類緊緊綁定。但隨著智能化浪潮和大數(shù)據(jù)洪流的到來,音樂信息的數(shù)據(jù)量急劇增多,大量的信息資源涌入人們的生活中。盡管這股浪潮卷席著的數(shù)據(jù)信息如此龐大,但是卻難以充分有效地利用這些數(shù)據(jù)信息。人們知道在偌大的數(shù)據(jù)信息海洋中包含著自己所需要的音樂數(shù)據(jù),但卻已經(jīng)深陷埋葬著數(shù)據(jù)的沼澤地中。因此,能夠準(zhǔn)確快速地檢索到對自己有用的信息,對于信息資源利用具有很大的價值。傳統(tǒng)的音樂檢索是基于文本信息的多媒體信息檢索,但對于一些高級特征,如和弦、音色等,它有著無法克服的缺陷,很難利用文本進行表達。所以基于內(nèi)容的音樂檢索就應(yīng)運而生,而哼唱檢索系統(tǒng)就是這樣一種能夠幫助人們在盡量短的時間內(nèi)檢索到對自己最有用信息的系統(tǒng)。用戶將在連接到計算機或移動端的麥克風(fēng)中哼唱一段旋律,計算機將檢索一個旋律符號數(shù)據(jù)庫,來找到與之最為相似的旋律。目前哼唱檢索中存在的兩個主要問題:首先是提取音頻旋律特征時,沒有高精度的音符檢測方法;其次是在采用DTW算法進行匹配時效率較低。針對上述問題,本文提出了基于雙閾值函數(shù)的音符檢測方法,并且根據(jù)時間序列對初始音符時間序列進行存儲優(yōu)化,提出單音符存儲和雙音符存儲兩種方式,經(jīng)過試驗證明,單音符時間序列的時間效率更高。1.2國內(nèi)外發(fā)展概況哼唱檢索正在逐漸成為人們最自然的音樂檢索方式,同時由于其所具有的價值與意義,已經(jīng)被很多企業(yè)納入到自己的未來發(fā)展道路中,并正在進行深入地研究。1995年,Ghias[1]等研究者提出了一種基于哼唱的音樂檢索系統(tǒng),該系統(tǒng)可以通過旋律特征來檢索音樂。在旋律特征的表示方法上,他們提出了一種基于字母序列的方法,使用字母U、D、S來表示音符的升降和音高變化情況,其中U表示后一個音符的音高高于前一個音符,D表示后一個音符的音高低于前一個音符,S表示當(dāng)前音符與前一個音符相比音高相同。通過這種方式,旋律可以被表示為一個字母序列,從而實現(xiàn)了旋律的數(shù)字化。在旋律檢索的方法上,Ghias使用了字符串匹配算法,通過計算字符串相似度來評估旋律相似度。此外,在論文中還詳細對比了多種旋律提取技術(shù),并提出了一個基于哼唱的音樂檢索系統(tǒng),該系統(tǒng)可以識別和搜索哼唱或演唱的旋律,從而為音樂愛好者提供了一種全新的音樂檢索方式。McNab[2]等研究者通過使用Gold-Rabiner算法,成功地提取了哼唱音頻的基頻序列。該算法利用波形中峰值的周期性來獲得基音的周期,然后通過音高和聲音幅度兩種方式來切割音符。與此同時,研究者還沿用了Ghias的旋律表示方法,使用(U,D,S)字母序列來表示哼唱旋律。在匹配時,研究者采用了動態(tài)規(guī)劃算法,計算序列的編輯長度來評估旋律匹配的相似度。這種算法能夠有效地計算旋律之間的相似度,進而實現(xiàn)哼唱音頻的檢索。此外,研究者還對算法進行了實驗驗證,證明了該算法在哼唱音頻處理方面具有較高的準(zhǔn)確性和可靠性,為哼唱音頻的識別和檢索提供了一種有效的方法。2001年,Lu[3]提出了一種新的旋律表示方法,包括從(U,D,S)序列中去除“S”成分,并添加頻率和時值差異。頻率差定義為兩個連續(xù)音符頻率之差,音長定義為一個音符的長度。除了新的旋律表示方法,Lu還提出了一種層次化的匹配方法,該方法首先使用動態(tài)規(guī)劃計算編輯距離和音符匹配路徑,從而過濾出編輯距離較大的候選旋律。然后利用音符匹配路徑獲取對齊的音符,并根據(jù)對齊音符之間的頻率和時值差異計算旋律相似度。Lu的方法是對以往旋律表示方法的一種改進,分層匹配方法通過有效過濾不相關(guān)的候選旋律來提高旋律檢索的準(zhǔn)確性。此外,在旋律表示中加入頻率和時值差異,提供了更多關(guān)于旋律的信息,提高了匹配算法的準(zhǔn)確性。綜上所述,Lu提出的方法在旋律檢索領(lǐng)域有顯著貢獻,并被廣泛應(yīng)用于音樂信息檢索系統(tǒng)中。Zhu[4]在2003年首次將動態(tài)時間規(guī)整(DTW)應(yīng)用在哼唱檢索算法中,并將音頻視為時間序列數(shù)據(jù)。在實驗中他們比較了輪廓線法和時間序列法的性能,結(jié)果是時間序列方法的效果較好,檢索準(zhǔn)確率在80%左右。臺灣清華大學(xué)的張智星[5-6]等研究者在哼唱檢索系統(tǒng)中采用DTW和線性伸縮(Linear-Scaling,LS)算法,但由于之間使用基音曲線進行匹配,系統(tǒng)的檢索速度較慢。上海交大的李揚[7]等研究者提出線性對齊匹配算法,根據(jù)相近旋律的音高輪廓在幾何上的相似性進行匹配,提升了哼唱檢索系統(tǒng)的精度。西北大學(xué)的王小鳳[8]等研究者在2008年提出了一種綜合音高特征和節(jié)奏特征的音樂旋律特征提取算法,該算法首先使用基音提取算法,再對基音特征序列進行分段、野點剔除與合并、之后計算節(jié)奏特征。由于在剔除和合并過程中,使用的閾值并不能適用于所有情況,所以對復(fù)雜情況的旋律魯棒性較差。隨著深度學(xué)習(xí)技術(shù)的不斷進步,許多研究人員轉(zhuǎn)向這些方法進行哼唱檢索。呂安超和來自北京郵電大學(xué)的研究團隊[9-10]利用深度學(xué)習(xí)中的自動編碼器從旋律片段中提取特征向量,證明了將傳統(tǒng)特征與自動編碼器提取的特征相結(jié)合可以產(chǎn)生更好的結(jié)果。類似地,來自浙江大學(xué)的馮雅中和他的同事們[11]用哼唱特征作為輸入,用哼唱和歌曲旋律之間的相似度作為輸出,為數(shù)據(jù)庫中的每首歌曲訓(xùn)練了循環(huán)神經(jīng)網(wǎng)絡(luò)。這些方法代表了旋律檢索領(lǐng)域令人振奮的進展,并在提高音樂信息檢索系統(tǒng)的準(zhǔn)確性方面顯示出良好的效果。蘇州大學(xué)的孔晨晨[12]在2017年提出一種基于雙閾值端點檢測和基頻曲線波動測度的兩級音符分割方法,然后在分割后提取旋律,構(gòu)建了具有改進的動態(tài)時間規(guī)整算法的哼唱檢索系統(tǒng)。MIREX(MusicInformationRetrievalEvaluationeXchange)[13]是一個權(quán)威的音樂信息檢索系統(tǒng)評估和交流平臺。它包括語音端點檢測、歌詞對齊、旋律提取以及通過唱歌/哼唱(QBSH)進行查詢等各種任務(wù)。在哼唱檢索任務(wù)中,用戶以WAV格式哼唱一首歌曲,系統(tǒng)返回10首MIDI歌曲的名稱。采用平均倒數(shù)排名(MeanReciprocalRank,MRR)評價系統(tǒng)性能。在MIREX2006中,中國科學(xué)院聲學(xué)研究所的吳曉[14]等研究人員通過使用多層過濾器縮小候選歌曲列表,達到了最高的準(zhǔn)確率,MRR達到92.6%。吳曉還提出了遞歸對齊(RecursiveAlignment,RA)算法,這是一種基于LS算法的自頂向下的匹配算法。RA算法能夠處理局部序列縮放,并且具有比DTW算法更低的時間復(fù)雜度。在MIREX2015中,深圳騰訊在IOACAS數(shù)據(jù)集上取得了最好的表現(xiàn),MRR達到了82.2%。匹配過程包括使用EMD(EarthMover’sDistance)計算音符序列的距離,并篩選候選音符序列;其次,利用DTW算法計算基音序列的精確距離;最后,通過加權(quán)得到歌曲的總得分。1.3課題的主要研究工作本文主要針對哼唱檢索系統(tǒng)中哼唱旋律提取進行研究,主要工作如下:(1)本文提出了一種基于雙閾值函數(shù)音符檢測的旋律時間序列化方法,該方法通過設(shè)置基頻和采樣點個數(shù)兩個動態(tài)閾值對旋律時間序列中的音符進行檢測。同時基于PYIN算法與優(yōu)化過后的DTW算法設(shè)計哼唱檢索系統(tǒng),并利用子序列對齊查找最佳匹配位置,計算兩個時間序列之間的距離檢索相似度最高的旋律時間序列。(2)在前一個工作的基礎(chǔ)上,實現(xiàn)了一個B/S架構(gòu)的哼唱檢索系統(tǒng),服務(wù)端使用Python的Flask框架開發(fā)。并且通過IOACAS數(shù)據(jù)集加上1000首MIDI歌曲組成的測試數(shù)據(jù)集對系統(tǒng)整體性能進行測試,通過實驗檢驗,該音符檢測方法降低了哼唱檢索的時間消耗,同時在檢索準(zhǔn)確率方面也并不遜色于其他音符檢測方法。1.4論文的組織結(jié)構(gòu)本文主要分為六個章節(jié),現(xiàn)對每個章節(jié)介紹如下:第1章:緒論。在本章節(jié)中,主要依據(jù)當(dāng)前哼唱檢索中存在的兩個主要問題,說明本課題研究的意義所在。通過深入分析國內(nèi)外哼唱檢索的發(fā)展概況,給出論文的主要研究工作以及論文的組織結(jié)構(gòu)。第2章:基本概念及準(zhǔn)備工作。在本章節(jié)中,主要介紹音樂特征、樂理基礎(chǔ)、音頻文件格式、哼唱檢索系統(tǒng)的相關(guān)概念,并為雙閾值函數(shù)音符檢測算法的實現(xiàn)做準(zhǔn)備工作,包括MIDI旋律提取、WAV旋律提取、時間序列匹配等模塊。第3章:WAV文件旋律提取研究。在本章節(jié)中,首先深入研究音頻預(yù)處理,然后結(jié)合理論基礎(chǔ),借助基頻提取中的PYIN算法,進行雙閾值函數(shù)音符檢測,實現(xiàn)基于音符的檢測算法,并制定檢測標(biāo)準(zhǔn)。第4章:旋律匹配研究。在本章節(jié)中,首先深入研究DTW算法原理,然后提出兩種音符存儲方法:單音符存儲和雙音符存儲,以及如何實現(xiàn)將音符序列存儲進數(shù)據(jù)庫的問題,提出解決方案。最后,制定評價標(biāo)準(zhǔn),對算法進行評價。第5章:系統(tǒng)實現(xiàn)與性能分析。在本章節(jié)中,主要介紹系統(tǒng)的設(shè)計與實現(xiàn),其中包括系統(tǒng)結(jié)構(gòu)以及可行性分析。最后對算法進行試驗和結(jié)果分析,通過檢索準(zhǔn)確度和時間復(fù)雜度兩個評價標(biāo)準(zhǔn)進行分析。第6章:總結(jié)與展望。首先對整個課題研究進行總結(jié),然后提出本課題的一些不足,以及對未來的展望。第2章基本概念及準(zhǔn)備工作2基本概念及準(zhǔn)備工作在本章節(jié)中,主要介紹音樂特征、樂理基礎(chǔ)、音頻文件格式、哼唱檢索系統(tǒng)的相關(guān)概念,并為雙閾值函數(shù)音符檢測算法的實現(xiàn)做準(zhǔn)備工作,包括MIDI旋律提取、WAV旋律提取、時間序列匹配等模塊。2.1音樂特征概述聲音是由物體的連續(xù)振動產(chǎn)生的,物體作為聲源。聲音信號由基音和泛音組成,其中基音是信號中最低頻率的聲波。泛音是基音整數(shù)倍的頻率,存在于基音之外。聲音根據(jù)其波動可分為不規(guī)則噪聲和規(guī)則聲音信號。規(guī)則音頻信號指的是,帶有語音、音樂和音效的有規(guī)律的音頻信號。如語音,它是語言的載體,有豐富的語言內(nèi)涵。又比如音樂,它是一種規(guī)范的符號化的聲音。再比如音效,它是自然界中各種聲音效果,如掌聲和雷聲等,以及照相機的咔擦聲等。不規(guī)則音頻信號指的是,不包含任何信息的聲音,如噪聲。聲音有三個特征:音高、音色和音強。音高是指聲音的高度,與頻率有關(guān),Hz是聲音頻率的單位。音色與泛音有關(guān),可以用來識別不同的聲源,因為泛音的組成通常是唯一的每個來源。而聲強則是指聲音的強度與其振幅成正比,常用分貝作為聲強的單位。音頻是指人類聽覺范圍內(nèi)的聲音信號,通常在20Hz和20kHz之間。頻率低于20Hz的聲音稱為次聲波,而頻率高于20kHz的聲音稱為超聲波。2.2樂理基礎(chǔ)介紹除了音樂的基本元素外,還有一些常見的音樂形式元素是理解樂理所必需的。這些包括旋律、和聲、節(jié)奏和神韻。旋律是一個音高的線性序列,創(chuàng)造一個音樂短語,而和聲是指多個音高的組合,創(chuàng)造和弦和和弦進行。節(jié)奏是音樂作品中時值的形式,而神韻是指不同的聲音和旋律結(jié)合起來形成更大的音樂結(jié)構(gòu)。此外,了解樂理不僅對音樂創(chuàng)作重要,對音樂欣賞也重要。它可以讓聽眾分析和理解不同音樂作品背后的結(jié)構(gòu)和意義,提高他們對藝術(shù)形式的整體享受和欣賞。樂理中還有一些重要的術(shù)語,包括音高(pitch)和拍子(beat)。音高是指一段音樂中使用的音高集合,拍子通過指定一個小節(jié)中的拍數(shù)和接收一拍的音符類型來表示音樂的節(jié)奏。在音樂上,把相差一倍的兩個基頻的差距稱為一個八度(octave);把一個八度12等分,每一份稱為一個半音(semitone);把一個半音再100等分,每一份稱為一個音分(cent)。音樂中常常用semitone來表示音高,它與基頻的關(guān)系為:(2-1)強度(power)指的是音樂的音量,而發(fā)音,如斷奏和連奏,指的是音符的演奏或演唱方式。音長(duration)是指\t"/item/%E9%9F%B3%E9%95%BF/_blank"聲音的長短,它決定于發(fā)音體振動時間的久暫。發(fā)音體振動持續(xù)久,聲音就長,反之則短。音符(note)是旋律的基本單位。音長、音高、音量和音色共同構(gòu)成音樂的四要素。總的來說,了解音樂的基本和常見的形式元素,以及音樂理論中的關(guān)鍵術(shù)語,對于任何希望獲得更深入的欣賞和理解這一豐富而復(fù)雜的藝術(shù)形式的人來說都是至關(guān)重要的。2.3音頻文件格式目前常用的音頻文件格式不少于10種,包括常見的MP3、CD、WMA和MIDI等。在本文所研究的音樂檢索系統(tǒng)中,數(shù)據(jù)庫中的音樂文件采用的是MIDI格式,而用戶哼唱的音頻文件則采用WAV格式。因此在本小節(jié)中,將對WAV和MIDI格式進行簡要介紹。2.3.1WAV格式WAV是最常見的聲音文件格式之一,是微軟公司專門為Windows開發(fā)的一種標(biāo)準(zhǔn)數(shù)字音頻文件,該文件能記錄各種單聲道或立體聲的聲音信息,并能保證聲音不失真。但WAV文件有一個致命的缺點,就是它所占用的磁盤空間太大(每分鐘的音樂大約需要12兆磁盤空間)。它符合資源互換文件格式(RIFF)規(guī)范,用于保存Windows平臺的音頻信息資源,被Windows平臺及其應(yīng)用程序所廣泛支持。Wave格式支持MSADPCM、CCITTA律、CCITTμ律和其他壓縮算法,支持多種音頻位數(shù)、采樣頻率和聲道,是PC機上最為流行的聲音文件格式;但其文件尺寸較大,多用于存儲簡短的聲音片段。WAV文件的影響因素有以下幾種:第一種是采樣頻率,即每秒鐘采集音頻數(shù)據(jù)的次數(shù)。采樣頻率越高,音頻保真度越高。第二種是采樣位數(shù)(振幅采樣精度),即采樣值或取樣值,是用來衡量聲音波動變化的一個參數(shù),也是聲卡的分辨率。它的數(shù)值越大,分辨率也就越高,發(fā)出聲音的能力越強。第三種是聲道數(shù),有單聲道和立體聲之分,單聲道的聲音只能使用一個喇叭發(fā)聲,立體聲的WAV可以使兩個喇叭都發(fā)聲(一般左右聲道有分工),這樣更能感受到音頻信息的空間效果。顯然,雙聲道數(shù)據(jù)還原特性更接近人們的聽力習(xí)慣,但采集得到的數(shù)據(jù)量會增加1倍。2.3.2MIDI格式MIDI文件屬于二進制文件,這種文件一般都有如下基本結(jié)構(gòu):文件頭+數(shù)據(jù)描述。文件頭一般包括文件的類型,因為MIDI文件僅以mid為擴展名的就有0類和1類兩種,而大家熟悉的位圖文件的格式就更多了,所以才會出現(xiàn)文件頭這種東西。與波形文件不同,MIDI文件不對音樂進行抽樣,而是對音樂的每個音符記錄為一個數(shù)字,所以與波形文件相比文件要小得多,可以滿足長時間音樂的需要。MIDI標(biāo)準(zhǔn)規(guī)定了各種音調(diào)的混合及發(fā)音,通過輸出裝置可以將這些數(shù)字重新合成為音樂。MIDI音樂的主要限制是它缺乏重現(xiàn)真實自然聲音的能力,因此不能用在需要語音的場合。此外,MIDI只能記錄標(biāo)準(zhǔn)所規(guī)定的有限種樂器的組合,而且回放質(zhì)量受到聲音卡的合成芯片的限制。近年來,國外流行的聲音卡普遍采用波表法進行音樂合成,使MIDI的音樂質(zhì)量大大提高。MIDI文件有幾個變通格式,如RMI和CIF等。其中CMF文件(creativemusicformat)是隨聲霸卡一起使用的音樂文件。RMI文件是Windows使用的RIFF(resourceinterchangefileformat)文件的一種子格式,稱為RMID,即包含MIDI文件的格式。2.4哼唱檢索系統(tǒng)基礎(chǔ)哼唱檢索系統(tǒng)是通過用戶哼唱的音頻來檢索歌曲,通常會自動提取用戶通過麥克風(fēng)哼唱的某段歌曲的旋律信息,以便從數(shù)據(jù)庫中進行檢索。哼唱檢索系統(tǒng)包含幾個部分,其中包括旋律表示、MIDI文件旋律提取、WAV文件旋律提取、基頻提取方法和旋律匹配四個部分。2.4.1旋律表示旋律表示包括基頻序列和音符序列兩種方式,基頻序列中僅包含旋律的基頻,而音符序列中包含旋律中每個音符的所對應(yīng)的頻率和所對應(yīng)的持續(xù)時間,即音高和音長。音符序列可以更好地表示旋律的信息。本文將基頻序列記為,其中pi表示第i個基頻值,將音符序列表示記為,其中(pi,ti)分別表示第i個音符的音高與音長。如果沒有特別指出,本文音高使用半音表示,音長的單位為秒。2.4.2MIDI文件旋律提取Mido庫是一個提供MIDI文件解析和操作功能的Python包。它允許輕松讀取和寫入MIDI文件,并提供了一個簡單和直觀的接口來訪問MIDI數(shù)據(jù)。在Mido庫的幫助下,可以輕松提取MIDI文件中所有“note_on”和“note_off”事件的音高與前一個事件的相對時間。使用單音軌MIDI文件在旋律提取中有幾個優(yōu)點。首先,單音軌MIDI文件只包含一個音軌,便于提取模板音符序列,無需分離合并多個音軌;其次,在音樂制作軟件中經(jīng)常使用單軌MIDI文件,這意味著單軌MIDI文件易于獲取和廣泛使用,更容易找到合適的模板進行旋律匹配。MIDI文件旋律提取的步驟如下:第一步使用Python的Mido庫讀取MIDI文件中所有“note_on”和“note_off”事件的音高與前一個事件的相對時間。第二步獲得模板音符序列。相鄰的“note_on”和“note_off”事件構(gòu)成一個音符,音符的音高為“note_on”事件的音高,音長為“note_off”事件的相對時間。下面是MIDI文件旋律提取模塊的核心代碼。defsend_msg(filename):
note=[]
time=[]
mid=mido.MidiFile(filename)
tempo=mido.bpm2tempo(114)
fori,trackinenumerate(mid.tracks):
passed_time=0
formsgintrack:
ab_time=mido.tick2second(msg.time,mid.ticks_per_beat,tempo)
real_time=ab_time/2+passed_time
passed_time+=ab_time
ifmsg.type=="note_on":
note.append(msg.note)
time.append(real_time)
returnnote,time2.4.3WAV文件旋律提取從WAV文件中提取旋律包括提取音符序列和基頻序列。文中將WAV文件中所包含的哼唱旋律稱為查詢旋律,將WAV文件中提取的基頻序列和音符序列分別稱為查詢基頻序列和查詢音符序列。然而,由于哼唱速度可能不一致,需要通過對原始查詢基頻和音符序列進行縮放來獲得不同的查詢旋律,從而導(dǎo)致查詢基頻和音符序列存在多個。從WAV文件中提取旋律的過程包括幾個步驟。第一步是預(yù)處理,包括音頻信號降噪和預(yù)強調(diào)等操作。第二步是基頻提取,通常包括將音頻信號劃分為幀,然后計算每幀的基頻,得到基頻序列。第三步是通過識別基頻序列的語音部分得到原始基頻序列,然后使用特定的公式對其進行轉(zhuǎn)換。第四步是音符識別,包括從原始基頻序列中識別音符。然后,在第五步中,對原始基頻和音符序列進行不同比例的縮放,得到多個查詢基頻和音符序列;每個縮放序列對應(yīng)不同的查詢旋律。最后,在第六步中,利用查詢基頻序列得到查詢基頻片段。記錄包含查詢基頻段的查詢旋律以及查詢旋律中查詢基頻段中心位置的時間。獲取查詢基頻段最常用的方法是滑動窗口法。第三章將詳細討論預(yù)處理、基頻序列提取和音符識別。需要注意的是,旋律提取過程的準(zhǔn)確性直接影響到整個旋律匹配與檢索系統(tǒng)的準(zhǔn)確性。因此,研究人員開發(fā)了各種方法來提高旋律提取的準(zhǔn)確性。這些方法包括機器學(xué)習(xí)算法、深度神經(jīng)網(wǎng)絡(luò)和其他信號處理技術(shù)。通過不斷提高旋律提取的準(zhǔn)確性,可以提升整個系統(tǒng)的性能,為用戶提供更好的搜索結(jié)果。2.4.4基頻提取基礎(chǔ)基頻,也稱為基音頻率,是語音處理中的一個重要特征,廣泛應(yīng)用于聲紋識別、語音編碼等語音相關(guān)領(lǐng)域。在這些應(yīng)用中,基音頻率是常用的基本特征,因此基音頻率的提取成為系統(tǒng)的重要組成部分。隨著技術(shù)的進步,許多研究者開始研究基音頻率的提取問題,出現(xiàn)了各種方法來估計短時音頻甚至整個音頻序列的基音頻率。對于整個音頻的基音頻率估計,采用短時分析將音頻劃分為短音頻幀,并估計每幀的基音頻率。基頻提取方法通常分為頻域和時域兩類。頻域法是通過計算音頻信號的傅里葉變換得到不同頻率的能量值,然后按照一定的規(guī)則從這些頻率中選擇一個概率最大的頻率作為基頻。另一方面,時域方法涉及計算自相關(guān)函數(shù)、短時平均幅度差函數(shù)和其他類似的技術(shù)。基頻提取方法的選擇取決于應(yīng)用需求和被處理音頻信號的類型。例如,在語音編碼中,基頻估計的快速性和準(zhǔn)確性將直接影響編碼語音信號的質(zhì)量。相比之下,在聲紋識別中,基音頻率估計的準(zhǔn)確性尤為關(guān)鍵,因為它直接影響識別系統(tǒng)的性能。由于應(yīng)用的多樣性,沒有放之四海而皆準(zhǔn)的基頻提取方法。在各種語音處理應(yīng)用中,研究人員不斷探索和開發(fā)新的方法來提高基音頻率估計的精度和效率。2.4.5旋律匹配哼唱檢索系統(tǒng)利用音高段索引得到對齊位置后,再通過旋律匹配得到檢索結(jié)果。旋律匹配過程包括獲取每個對齊位置的候選旋律,并計算查詢旋律與候選旋律之間的旋律相似度。旋律匹配算法的準(zhǔn)確性直接影響到檢索系統(tǒng)的準(zhǔn)確性。因此,它一直是哼唱檢索領(lǐng)域的研究熱點。許多研究者對旋律匹配算法進行了廣泛的研究。當(dāng)前的旋律匹配算法根據(jù)旋律的表示方法可分為3類。第一類是音高和音高匹配算法,它使用音高序列來表示旋律。第二類是音高和音符匹配算法,用音高序列表示查詢旋律,用音符序列表示候選旋律。第三類是音符和音符匹配算法,它使用一個音符序列來表示一個旋律。為了判斷查詢旋律與候選旋律的相似性,可以提取并比較旋律的音高、時長、強度等多種特征。此外,不同的算法使用不同的距離度量,如歐氏距離、曼哈頓距離、余弦相似度來計算旋律相似度。在得到每首歌曲的旋律相似度后,哼唱檢索系統(tǒng)根據(jù)相似度對歌曲進行排序,并將排名前N的歌曲作為檢索結(jié)果呈現(xiàn)出來。隨著旋律匹配算法的不斷發(fā)展,未來哼唱檢索系統(tǒng)的準(zhǔn)確率和效率有望進一步提高。2.5本章小結(jié)在本章節(jié)中,主要介紹音樂特征、樂理基礎(chǔ)、音頻文件格式、哼唱檢索系統(tǒng)的相關(guān)概念,并為雙閾值函數(shù)音符檢測算法的實現(xiàn)做準(zhǔn)備工作,包括MIDI旋律提取、WAV旋律提取、時間序列匹配等模塊。第2章基本概念及準(zhǔn)備工作3WAV文件旋律提取研究本章是本文的重點內(nèi)容,即闡述如何將旋律提取為音符序列。主要包括以下幾個內(nèi)容:音頻預(yù)處理、基頻提取以及雙閾值函數(shù)音符檢測算法。3.1音頻預(yù)處理為了更方便地提取音頻中的旋律,需要對音頻信號進行預(yù)處理。本小節(jié)介紹的預(yù)處理方法僅包含音頻降噪。在錄制音頻時,噪聲源可能來自周圍環(huán)境、錄音設(shè)備,或者是用戶本身。因為噪聲的種類繁多,不同種類的噪聲需要采用不同的降噪方法。在過去的研究中,研究者們提出了多種語音降噪的方法[15-16]。本文采用PYIN算法進行基頻提取,因為大部分純噪聲沒有穩(wěn)定的周期性,因此PYIN算法無法提取其基頻,所以便忽略純噪聲對于基頻提取的影響。但與此同時,因為幅度較大的低頻噪聲和高頻噪聲有穩(wěn)定的周期性,因此其會影響基頻提取的準(zhǔn)確性。綜上所述,音頻預(yù)處理階段僅對音頻進行濾波。由于用戶哼唱的語音頻率在100Hz到1000Hz之間,所以使用一個上下限分別為100Hz和1000Hz的帶通濾波器對音頻進行濾波。圖3.1是音頻預(yù)處理過后的前后對比圖,位于上方的波形圖是原音頻,下方的波形圖是預(yù)處理之后的波形圖。圖3.1音頻波形圖預(yù)處理前后對比3.2基頻提取基頻提取(pitchestimation,pitchtracking)在聲音處理中有廣泛的應(yīng)用。其最直接的應(yīng)用,是用來識別音樂的旋律。它也可以用于語音處理,比如輔助帶聲調(diào)語言(如漢語)的語音識別,以及識別語音中的情感。由于聲音的基頻往往隨時間而變化,所以基頻提取通常會先把信號分幀(幀長通常為幾十毫秒),再逐幀提取基頻。提取一幀聲音基頻的方法,大致可以分為時域法和頻域法。時域法以聲音的波形為輸入,其基本原理是尋找波形的最小正周期。當(dāng)然,實際信號的周期性只能是近似的。頻域法則會先對信號做傅里葉變換,得到頻譜(僅取幅度譜,舍棄相位譜)。頻譜上在基頻的整數(shù)倍處會有尖峰,頻域法的基本原理就是要求出這些尖峰頻率的最大公約數(shù)。從上世紀(jì)末到現(xiàn)在,基頻提取方法一共出現(xiàn)了幾十乃至上百種。本文只是挑選其中有代表性的一種方法(YIN)及其優(yōu)化方法(PYIN)來綜述一下。本節(jié)將主要介紹YIN算法和PYIN算法的原理和提取基頻序列的步驟。3.2.1YIN算法周期信號的基頻估計(fundamentalfrequencyestimation)在許多應(yīng)用中都起著重要的作用,例如:在漢語語音識別中,由于不同的聲調(diào)對應(yīng)不同的字詞,所以音高是非常重要的特征,另外在識別說話人情感的時候,說話的語調(diào)也含有顯著的情緒傾向;還有在數(shù)字音樂應(yīng)用中,包括樂譜轉(zhuǎn)錄、哼唱識別、K歌軟件等中都有用武之地。音高識別算法非常之多,包括在近些年發(fā)展起來的深度學(xué)習(xí)領(lǐng)域中也出現(xiàn)了音高估計模型的身影,下面介紹一下比較通用的YIN算法[17]。1.自相關(guān)函數(shù)和差函數(shù)若信號有周期,則將信號在時間軸上平移一個周期將與自身重合。因而自相關(guān)函數(shù)(見下式)(autocorrelationfunction)將在周期的整倍數(shù)時刻取最大值,因而自相關(guān)函數(shù)顯然可以用來做基頻估計。自相關(guān)函數(shù)用來估計基頻的方法是,窮舉一定范圍內(nèi)所有的τ值,并且挑選最高的非零τ作為基本周期。換言之,自相關(guān)方法傾向于挑選較大的周期,即傾向于較小的基頻。當(dāng)τ的取值上限較大時,很容易發(fā)生低估基頻的錯誤。(3-1)2.累計均值規(guī)范化差函數(shù)直接使用差函數(shù)會出現(xiàn)兩個問題:(1)和自相關(guān)函數(shù)類似,由于差函數(shù)仍然在為0的時候給出最小值0,并且由于實際音頻數(shù)據(jù)不是完美周期性,導(dǎo)致差函數(shù)在真實的基本周期處的取值仍然小于在0處的取值,我們可以通過設(shè)置一個基本周期的取值下限還改善該問題。(2)當(dāng)在第一共振峰(firstformant)處出現(xiàn)一個較強的共振,仍然會在2倍基頻處(即1/2倍基本周期處)出現(xiàn)一些次級的低洼,這些次級低洼可能比基本周期對應(yīng)的低洼還要更低;而對于這第二個問題,并不能通過增加一個取值下限來改善,因為基本周期和第一共振峰的取值范圍是重合的。所以作者進一步提出了“累計均值規(guī)范化差函數(shù)”(cumulativemeannormaliseddifferencefunction),如下式所示。(3-2)直接設(shè)置差函數(shù)在0處取1,并且用直到τ時刻的差函數(shù)相應(yīng)取值的均值(累積均值)來規(guī)范化;可以想象,當(dāng)信號原始的差函數(shù)在低于基本周期的地方出現(xiàn)更深的次級低洼時,累積均值同樣也會很小,因而除以很小的數(shù)相當(dāng)于放大原始的差函數(shù)的值,因而更好地降低次級共振峰引起的錯誤率。并且直到τ達到真正的基本周期處出現(xiàn)很深的低洼。見圖3.2,圖a是原始的差函數(shù)形狀,圖b是均值規(guī)范化后的。新的差函數(shù)顯然可以抑制低估周期(高估基頻)的現(xiàn)象,并且新的差函數(shù)并不需要設(shè)置顯式的基頻上限。圖3.2(a)語音信號計算差分函數(shù)(b)累積均值歸一化差分函數(shù)3.絕對閾值如果極小值出現(xiàn)的時間點比周期對應(yīng)的時間點要長,會出現(xiàn)周期變長的情況。為了解決這類問題,可以設(shè)置一個絕對的閾值(比如0.1),找到低于這個閾值的每一段的極小值,這些極小值中的第一個極小值對應(yīng)τ作為周期(第三步是使用這些極小值的中的最小值對應(yīng)的τ作為周期)。如果沒有低于閾值的點,那么選擇全局最小值作為周期。4.拋物線型插值前面的步驟有一個假設(shè),即信號的周期是采樣周期的倍數(shù)。如果不滿足的話,會引起錯誤。為了解決這個問題,每個d′(τ)的局部最小值以及相鄰的點,可以使用二次函數(shù)拋物線進行擬合。后續(xù)周期計算的時候使用每個局部最小值對應(yīng)的擬合值。找到的最小值對應(yīng)的時間即為周期。使用這種方法有可能存在誤差,可以用d(τ)來避免這個問題。5.最佳局部估計在找到的周期值附近,在時間窗口[t?Tmax/2,t+Tmax/2]尋找極小值對應(yīng)的時間作為周期,Tmax是最大期望周期值。總體上,YIN算法使用d′(τ)進行周期估計,同時設(shè)置一個絕對閾值,在找得到周期值附近重新進行搜索獲得最優(yōu)值。3.2.2PYIN算法在上一節(jié)中介紹了YIN方法,主要存在的問題在于,對于每一幀信號,它只給出一個基音周期的估計值,如果估計時產(chǎn)生了半頻錯誤,那么就很難恢復(fù)出正確的值,而PYIN算法[18]的改進地方在于:(1)對于每一幀,它會挑選出多個峰谷值作為備選點??梢杂行П苊忮e誤估計的問題。(2)通過HMM對模型來基音軌跡更加平滑。至此與YIN算法一樣,而不一樣的地方在于閾值的處理方式:YIN固定了閾值而PYIN中的閾值是服從Beta分布的。好處在于YIN預(yù)設(shè)的閾值可能會小于所有的谷值,此時仍然會出現(xiàn)半頻誤差。而PYIN的閾值取值取決于它所服從的概率分布,一定程度上能夠避免閾值都小于谷值。(3-3)論文中將55Hz到880Hz的基頻劃分為480個塊,然后在上一步驟計算得到的基頻會劃分到就近的塊中,這樣這480個塊,值非0的塊就會有其對應(yīng)的概率值,可以看成HMM中的一個狀態(tài)。論文中定義了兩個狀態(tài),清音(unvoiced)和濁音(voiced)的觀測概率為(3-4)從圖3.3中可以看到,PYIN的基頻估計與Audition中看到的基頻曲線基本吻合。在PYIN第二個步驟,利用HMM做的是單音(音樂上的一個概念)的基頻追蹤音頻。圖3.3PYIN基頻提取圖第3章WAV文件旋律提取研究3.3雙閾值函數(shù)音符檢測經(jīng)過旋律提取后所產(chǎn)生的按時間次序排列的變量序列,其中為時刻的基頻,這樣的序列稱為基頻時間序列。Step1從時刻開始遍歷時間序列,且不斷維護一個均值(3-5)其中為時刻其頻率的均值,k為該均值所對應(yīng)子序列的起始索引,m為該子序列中元素的個數(shù)。Step2音符檢測由于需要對基頻時間序列進行優(yōu)化,則需要對現(xiàn)有的基頻時間序列進行序列合并處理,即對判斷當(dāng)前子序列是否為一個完整的音符。因此給出基于時間序列的音符判定法則:對于基頻時間序列的子序列,其中,在時刻,其頻率均值為,若對于,使得成立,其中為固定常數(shù),則認為子序列為一個音符。圖3.4絕對閾值誤判此時會出現(xiàn)一個誤判問題,因為為絕對閾值,若絕對閾值定義為音高最低兩個相鄰音符的頻率之差,即,其中為琴鍵上的最低音,為次低音,則當(dāng)和滿足,這樣得到的閾值就會對圖3.4中的紅點形成誤判,會造成高音區(qū)音符的混亂。其實無論依靠哪一個音區(qū)設(shè)置絕對閾值,都會造成其他音區(qū)的音符混亂。此時引入一個閾值函數(shù),它的作用是根據(jù)當(dāng)前音符序列的頻率均值的具體數(shù)值去動態(tài)調(diào)整閾值,從而判斷是否應(yīng)該加入到當(dāng)前子序列中。在十二平均律中,每相鄰的兩個鋼琴琴鍵之間相差一個半音的距離,其比值恒為21/12,記為r,即滿足fk+1/fk=r。通過(3)式可將頻率轉(zhuǎn)換成以半音(semitone)為單位的音符編碼。semitone=69+12×log2(freq/440)(3-6)這種音高表示方法與MIDI中一致,使得哼唱檢索系統(tǒng)中MIDI文件旋律提取與哼唱旋律提取的音符序列保持一致。記s為semitone,由(2)式可推出freq關(guān)于s的函數(shù)freq=440×2(semitone-69)/12.至此,可以給出閾值函數(shù)的計算方法:對于當(dāng)前子序列給定的,此時前向閾值為與前一個基頻之差,后向閾值為與后一個基頻之差,故閾值函數(shù)為(3-7)因此,由(3)式可以給出優(yōu)化過后的音符判定法則:若當(dāng)前基頻時間序列的子序列滿足,其中,則認為子序列為一個音符。Step3野點剔除Step2音符檢測的目的是為了將目標(biāo)音符周圍的野點歸類到目標(biāo)音符中,但這樣只適用于前后音符對應(yīng)頻率相鄰的情況。如圖3.5中的紅點所示,若前后音符對應(yīng)頻率相差較大,則野點會游離于前后兩個音符之間,Step2音符判定會仍然認為這些野點序列是一個新的音符,從而形成音符誤判,對最后的音符時間序列產(chǎn)生干擾。圖3.5野點序列誤判成音符所以需要對這些野點序列進行剔除。在此之前給出一些符號的定義:若子序列為一個音符,其中,則稱m為該音符的采樣點個數(shù),記為count,稱為該音符的采樣點時間間隔。接下來將給出判定野點序列的方法:設(shè)定一個閾值函數(shù)η(count),若當(dāng)前子序列采樣點個數(shù)不超過該閾值函數(shù),則認為當(dāng)前子序列為野點序列;反之則認為當(dāng)前子序列為音符序列。首先考慮對音符時間序列進行節(jié)拍跟蹤。這個部分使用了EllisDPW[19]的方法,通過起始能量包絡(luò)和全局拍速估計對音符時間序列進行節(jié)拍跟蹤。在第二步全局拍速估計中,利用自相關(guān)函數(shù)得出最終的能量包絡(luò)函數(shù)周期,最終得到音符時間序列的拍速tempo。接下來考慮計算一個音符的最短持續(xù)時間tmin。根據(jù)樂理,拍速為每分鐘拍子的個數(shù),而一拍代表幾分音符是由拍號決定。此處規(guī)定十六分音符為常見歌曲中時值最小的音符,而在常見拍號中,四分音符為一拍的音符時值最小,因此一個音符的最短持續(xù)時間為tm=7.5/tempo.最后,由于為該音符的采樣點時間間隔,所以一個音符內(nèi)的最小采樣點個數(shù)為countm=tm/w。由上述可知,閾值函數(shù)為(3-8)因此,接下來可以給出的野點剔除法則:若子序列滿足,其中,且對于子序列的采樣點個數(shù),滿足,則認為子序列為野點序列,則將該子序列剔除。Step4若滿足Step2和Step3,則將子序列頻率均值加入目標(biāo)時間序列S中。并將和清零,轉(zhuǎn)Step1。圖3.6是雙閾值函數(shù)算法的流程圖,第一步是不斷維護一個基頻序列的均值,第二步和第三步判斷當(dāng)前均值是否符合兩個閾值函數(shù),分別是基頻閾值函數(shù)和采樣點個數(shù)閾值函數(shù),如果當(dāng)前均值超過基頻閾值函數(shù)并且超過采樣點個數(shù)閾值函數(shù),則識別當(dāng)前序列為一個音符,否則繼續(xù)回到第一步維護均值。上述過程僅僅只為識別一個音符的過程,對于整個基頻序列應(yīng)用此算法可獲得一個完整的音符序列。圖3.6雙閾值函數(shù)算法流程圖至此,該方法敘述完成。為明確起見,下面給出該方法的主要偽代碼。Algorithm雙閾值函數(shù)音符時間序列優(yōu)化Procedure[p]=optimizeTimeSeries(P)1234567891011121314151617sum←0average←0count←0fori∈[0,|P|)doifpi==0docontinuelambda←λ(pi)eta←η(tempo)iffabs(pi-average)>lambdaandcount≥etadosum←0count←0[p]←averagecount←count+1sum←sum+piaverage←sum/countend[p]←average圖3.7雙閾值函數(shù)算法偽代碼3.4本章小結(jié)在本章節(jié)中,首先深入研究音頻預(yù)處理,然后結(jié)合理論基礎(chǔ),借助基頻提取中的PYIN算法,進行雙閾值函數(shù)音符檢測,實現(xiàn)基于音符的檢測算法,并制定檢測標(biāo)準(zhǔn)。第4章旋律匹配研究4旋律匹配研究本章將對旋律匹配方面進行說明,主要內(nèi)容分別是介紹DTW算法以及音符存儲方法,主要解決了如何計算兩個時間序列的相似度(即距離)和如何將音符存入數(shù)據(jù)庫的問題。4.1DTW算法首先給出時間序列和歐氏距離的定義。按時間次序排列的隨機變量序列稱為時間序列,這里的N為觀測樣本的個數(shù)。為了表達方便,用表示上述時間序列。對于時間序列和的歐氏距離被定義為(4-1)其次介紹動態(tài)時間規(guī)整算法[20](DynamicTimeWrapping,簡稱DTW)。兩個時間序列分別為和,長度分別為和。為了使得兩個時間序列能夠在對應(yīng)的點上計算歐氏距離,需要構(gòu)造一個的矩陣D,其中矩陣D中的元素表示和兩個點的歐氏距離。一個規(guī)整路徑P是一組連續(xù)的矩陣元素,可以使得時間序列和中所有點之間的存在正確的映射,從而得到最短的歐氏距離。即,其中。定義兩個時間序列之間對齊的規(guī)整路徑P需要滿足如下約束條件:規(guī)整路徑必須在矩陣對角線的角元素上開始和結(jié)束;規(guī)整路徑中的下一個元素必須是矩陣的相鄰元素;規(guī)整路徑中的點必須是隨時間單調(diào)增加的。即規(guī)整路徑P必須從開始,到結(jié)束,并且需要滿足,其中.最后得到的規(guī)整路徑是歐氏距離最短的一個規(guī)整路徑,下面給出完整定義:(4-2)最后求得的規(guī)整路徑距離為。同時,在兩個時間序列中查找重復(fù)出現(xiàn)的方法被用來識別一個時間序列是否是另一個時間序列的子序列。MeinardMüllert[21]提到一種利用損失函數(shù)找到損失值最小匹配對的方法,即使得(a*,b*)=argmin(DTW(X,Y(a:b))),其中1≤a≤b≤M。DTW子序列查找可視化如圖4.1所示。圖4.1左側(cè)的時間序列為子序列,上側(cè)的時間序列為原序列,中間即為上述所構(gòu)造的矩陣D,其中紅色的折線便為規(guī)整路徑??梢园l(fā)現(xiàn)紅色路徑所覆蓋的矩陣元素顏色更深,意味著其元素的值更小。圖4.1DTW子序列查找可視化4.2音符存儲方法圖4.2單音符存儲與雙音符存儲如圖4.2所示,目標(biāo)時間序列S有兩種存儲方法。①單音符存儲:對于識別完成的子序列的進行存儲,對于時間維度,同樣采用其子序列時間軸中的均值,即插入。②雙音符存儲:對于識別完成的子序列的進行存儲,對于時間維度,取該子序列的初始與結(jié)束時間作為時間,即插入。而對于數(shù)據(jù)庫存儲音符序列,本文將采用數(shù)據(jù)庫中的Text類型,通過分隔符的形式來對音符序列進行存儲。音符序列處理程序如下:#/midi/add
@bp.route("/add")
defmidi_add():
rootdir="./static/midifile1000/"
list=os.listdir(rootdir)
foriinrange(len(list)):
midinote,miditime=send_msg(rootdir+str(list[i]))
midi_name=str(list[i])
note=','.join(str(i)foriinmidinote)
miditime_reg=[]
foriinrange(len(miditime)):
miditime_reg.append(round(miditime[i],2))
real_time=','.join(str(i)foriinmiditime_reg)
midi_file=MidiModel(midi_name=midi_name,note=note,real_time=real_time)
return"addsuccess!"對于數(shù)據(jù)庫設(shè)計,本文對于連續(xù)的整型序列和浮點型序列將其用逗號分隔并轉(zhuǎn)成字符串類型存儲在數(shù)據(jù)庫內(nèi)部。優(yōu)點在于減少每次檢索都要重新將MIDI文件數(shù)據(jù)庫重新提取旋律的時間,缺點在于將字符串類型的數(shù)據(jù)重新處理為整型序列也需要花費時間。數(shù)據(jù)庫表的屬性為ID(主鍵,作唯一識別用)、MIDI文件名、音符序列(用semitone表示)、音符所對應(yīng)的時間(浮點數(shù)并保留后兩位小數(shù)),具體表的設(shè)計如表4.1所示。表4.1MIDI文件信息表序號字段名數(shù)據(jù)類型主鍵非空描述1idINT(20)是是MIDI文件ID,自增2midi_nameVARCHAR(20)否是MIDI文件名,唯一3noteTEXT否是音符序列4real_timeTEXT否是音符所對應(yīng)的時間4.3本章小結(jié)在本章節(jié)中,首先深入研究DTW算法原理,然后提出兩種音符存儲方法:單音符存儲和雙音符存儲,以及如何實現(xiàn)將音符序列存儲進數(shù)據(jù)庫的問題,提出解決方案。第2章基本概念及準(zhǔn)備工作5系統(tǒng)實現(xiàn)與性能分析本章的目的是為了能更好地對本文所實現(xiàn)的算法進行展現(xiàn)和驗證。本章將進行系統(tǒng)的開發(fā)工作,設(shè)計并實現(xiàn)一個具有哼唱檢索功能的web網(wǎng)站,來驗證本文實現(xiàn)的算法具有很好的實用性和良好的用戶體驗。5.1系統(tǒng)設(shè)計與實現(xiàn)本文已經(jīng)在第二章介紹了檢索系統(tǒng)的基礎(chǔ),在第三章和第四章分別對WAV文件旋律提取和旋律匹配進行了研究。接下來,本章將在第三章和第四章的基礎(chǔ)上設(shè)計并實現(xiàn)一個哼唱檢索系統(tǒng),最后對系統(tǒng)的性能進行測試與分析。5.1.1系統(tǒng)結(jié)構(gòu)圖5.1是系統(tǒng)的結(jié)構(gòu)圖,系統(tǒng)采用B/S架構(gòu),服務(wù)端使用Python的Flask框架開發(fā)。系統(tǒng)分為客戶端和服務(wù)端兩個部分,其中客戶端部分用于采集哼唱音頻和展示結(jié)果,包括錄音模塊、音頻上傳模塊、結(jié)果展示模塊。服務(wù)端部分用于接收哼唱檢索請求并返回檢索結(jié)果,包括音頻接收模塊、WAV文件旋律提取模塊、旋律匹配模塊、MIDI文件旋律提取模塊。服務(wù)端的工作流程又分為離線處理和在線處理,離線處理為服務(wù)端開始接收哼唱檢索請求前就需要完成的流程,在線處理為接收哼唱檢索請求時才開始的流程。圖5.1系統(tǒng)結(jié)構(gòu)圖系統(tǒng)的交互流程為:用戶使用瀏覽器訪問系統(tǒng)頁面,通過錄音模塊錄入哼唱音頻,音頻上傳模塊通過HTTP協(xié)議的POST請求將音頻上傳至服務(wù)端,其中音頻的格式為WAV。服務(wù)端的音頻接收模塊接收音頻,WAV文件旋律提取模塊提取音頻中的查詢旋律,旋律匹配模塊通過查詢旋律獲得檢索結(jié)果,將檢索結(jié)果作為請求的響應(yīng)返回給瀏覽器。瀏覽器獲得響應(yīng)后,結(jié)果展示模塊將檢索結(jié)果顯示給用戶。5.1.2可行性分析本文對于Python中的一些音頻處理庫進行了使用,主要包括librosa、mido、dtaidistance、Scipy庫。這些Python庫很大程度上對本系統(tǒng)的代碼編寫進行了優(yōu)化。下面對其進行可行性分析。librosa庫是一個用于音樂和音頻分析的Python庫,它為創(chuàng)建音樂信息檢索系統(tǒng)提供了必要的構(gòu)建塊。librosa庫主要是用來對WAV文件進行基音提取工作,形成本文所提到的基音時間序列。mido庫是一個用于創(chuàng)建、編寫、分析MIDI文件的python庫,而MIDI文件是一組代表音樂參數(shù)的標(biāo)準(zhǔn)化代碼所組成的文件,其中包括音高、節(jié)奏、音色等等。mido庫主要是用來對MIDI文件進行旋律提取,從而形成本文的音頻數(shù)據(jù)庫,可用來進行音頻檢索工作。dtaidistance庫是DTAI研究組使用的時間序列距離(例如動態(tài)時間扭曲DynamicTimeWarping)庫。該庫提供了一個純Python實現(xiàn),它兼容Numpy和Pandas,并實現(xiàn)了避免不必要的數(shù)據(jù)復(fù)制操作。dtaidistance庫主要用來進行兩個音符時間序列的比較工作。Scipy庫是基于Numpy的科學(xué)計算庫,用于數(shù)學(xué)、科學(xué)、工程學(xué)等領(lǐng)域,很多有一些高階抽象和物理模型需要使用Scipy。SciPy包含的模塊有最優(yōu)化、線性代數(shù)、積分、插值、特殊函數(shù)、快速傅里葉變換、信號處理和圖像處理、常微分方程求解和其他科學(xué)與工程中常用的計算。Scipy庫的作用主要是在WAV文件的預(yù)處理上,對音頻文件進行預(yù)濾波,采用的是帶通濾波器,將一些高于或低于人聲的音高剔除。本項目采用python進行開發(fā),\t"/weixin_49769519/article/details/_blank"Flask是一個免費的開放源代碼微型Web框架,使用Python編程語言編寫,可輕松實現(xiàn)可伸縮的Web應(yīng)用程序。這里的“微型”并不意味著該框架缺少功能,而是意味著該核心是非復(fù)雜且可擴展的。Flask不包含一些內(nèi)容,例如上載處理,ORM(對象關(guān)系映射器),數(shù)據(jù)庫抽象層,身份驗證,表單驗證等,但是可以使用預(yù)先存在的外部庫來集成這些功能。微框架基于Werkzeug(這是WSGI的工具包,即Web服務(wù)器網(wǎng)關(guān)接口)和Jinja(即Python的模板引擎)的基礎(chǔ)。使用Flask的一些知名組織是Reddit,Netflix,Lyft,Airbnb,Uber等。5.1.3系統(tǒng)詳細設(shè)計首先介紹本系統(tǒng)的檢索模塊,也是本系統(tǒng)最為核心的模塊之一。由于本系統(tǒng)所錄制的音頻都會被存儲在項目目錄中的upload_files文件夾中,所以利用os庫中的listdir函數(shù)去取到其文件下的所有文件名,并且利用librosa庫中的load函數(shù)來對其最新上傳的音頻文件進行解析,所得到的y是音頻時間序列,sr為采樣率。具體代碼如下所示:@bp.route("/retrieval",methods=['GET','POST'])
defretrieval():
rootdir="./upload_files/"
list=os.listdir(rootdir)
y,sr=librosa.load(rootdir+list[0])接著對其進行預(yù)處理,先使用scipy庫中的signal.butter函數(shù)構(gòu)造帶通濾波器,得到的b和a分別為濾波器的分子(b)和分母(a)多項式系數(shù)向量。再利用構(gòu)造好的帶通濾波器對上述的音頻時間序列y進行帶通濾波,用到的是signal.filtfilt函數(shù)。具體代碼如下:b,a=signal.butter(8,[0.02,0.8],'bandpass')y=signal.filtfilt(b,a,y,padlen=150)然后對其進行基頻提取,使用的是librosa庫中的pyin函數(shù),并設(shè)置人聲所能達到的最高音符和最低音符所對應(yīng)的頻率,得到的f0即為音頻所對應(yīng)的基頻。再利用librosa庫中的beat.beat_track函數(shù)得到音頻所對應(yīng)的拍號,且利用times_like函數(shù)得到基頻所對應(yīng)的時間序列times。最后將以上f0,times,tempo三個參數(shù)送入已經(jīng)寫好的雙閾值函數(shù)中,就得到了音符序列以及與其對應(yīng)的時間。具體代碼如下:f0,a,b=librosa.pyin(y,fmin=librosa.note_to_hz('C2'),fmax=librosa.note_to_hz('C6'),sr=sr)
tempo,beats=librosa.beat.beat_track(y=y,sr=sr)
times=librosa.times_like(f0)
audionote,audiotime=DualThreshold(f0,times,tempo)接下來利用Flask框架下的Model.query.all()函數(shù)去從數(shù)據(jù)庫表中檢索所有的記錄,并存放在midis變量下。并將其進行數(shù)據(jù)處理,將每個MIDI文件的文件名、音符序列分別存放在midi_name_list和midi_note_list中以便后續(xù)使用。具體代碼如下:midis=MidiModel.query.all()
formidiinmidis:
midi_name_list.append(midi.midi_name)
midi_note_str=midi.note.split(',')
midi_note_int=[]
foriinmidi_note_str:
midi_note_int.append(int(i))
midi_note_list.append(midi_note_int)然后將當(dāng)前識別音符過后的序列與數(shù)據(jù)庫中的數(shù)據(jù)進行匹配,數(shù)據(jù)庫當(dāng)中的每條記錄與目標(biāo)序列進行匹配時會得到一個距離d,并將其保存在midi_distance_list中,用來得到與之最匹配的前10個MIDI文件。具體代碼如下:formidi_noteinmidi_note_list:
d=DTW(midi_note,audionote)
midi_distance_list.append(d)最后將MIDI文件名及其對應(yīng)的最短距離進行綜合排序,并且將所得到的序列作為參數(shù)傳給客戶端。具體代碼如下:lis=[(midi_name_list[i],midi_distance_list[i])foriinrange(len(midi_name_list))]
lis_sorted=sorted(lis,key=lambdax:x[1])
returnrender_template("index1.html",lis_sorted=lis_sorted)其次介紹上述使用到的雙閾值函數(shù)DualThreshold()。首先先對基頻序列中的NaN值進行處理,接著根據(jù)當(dāng)前的基頻計算出當(dāng)前所對應(yīng)的lamda值,ita值為當(dāng)前音頻的tampo值所對應(yīng)的。計算出兩個動態(tài)閾值之后,將其與基頻均值avg比較,如果符合要求就將avg作為一個音符,存放到audio列表中。具體代碼如下:defDualThreshold(f0,times,tempo):#此處省略對于參數(shù)的處理和一些變量的預(yù)定義foriinrange(len(fl)):
ifnp.isnan(fl[i]):
continue
lamdap=semi2freq(freq2semi(fl[i])+1)
lamdab=semi2freq(freq2semi(fl[i])-1)
lamda=(lamdap-lamdab)/2
ita=(45/(tempo*w))
ifmath.fabs(fl[i]-avg)>lamdaandflag:
ifcnt>=ita:
sum=0
sumtime=0
audio.append(avg)
audiotime.append(avgtime)
cnt=0
flag=True
cnt+=1
sum+=fl[i]
sumtime+=fltime[i]
avg=sum/cnt
avgtime=sumtime/cnt
audio.append(avg)
audiotime.append(avgtime)5.1.4系統(tǒng)演示啟動服務(wù)端后,通過瀏覽器訪問系統(tǒng)首頁界面,如圖5.2所示;點擊“開始錄制”按鈕,系統(tǒng)會開始錄制;期間可以點擊“暫停錄制”按鈕,系統(tǒng)會暫停錄制。圖5.2系統(tǒng)初始界面圖5.3是系統(tǒng)正在錄制音頻的界面,目前“開始錄制”按鈕變?yōu)椴豢牲c擊的狀態(tài),“暫停錄制”按鈕和“結(jié)束錄制”按鈕變?yōu)榭梢渣c擊的狀態(tài)。圖5.3系統(tǒng)錄制界面哼唱完成后,點擊“結(jié)束錄制”按鈕,系統(tǒng)會將錄制好的WAV文件傳入服務(wù)端;點擊“開始檢索”按鈕,系統(tǒng)會對哼唱WAV文件進行哼唱檢索,最后給出數(shù)據(jù)庫中前10個最匹配的MIDI文件。如圖5.4所示。圖5.4系統(tǒng)展示界面5.2實驗和結(jié)果分析本文的實驗主要分別測試單、雙音符存儲與雙閾值函數(shù)、過渡區(qū)域分割音符檢測[22]的檢索時間和檢索準(zhǔn)確度。5.2.1實驗數(shù)據(jù)和實驗平臺本文的實驗主要基于哼唱檢索系統(tǒng),對于旋律匹配中的DTW算法,以往論文中已經(jīng)存在過非常多的優(yōu)化方法,例如設(shè)置上下界修剪序列、通過剪枝提前放棄不相似的序列等等。本文僅使用設(shè)置歐幾里得上限進行修剪部分路徑,并使用子序列對齊查找最佳匹配位置。實驗使用MIREX[13]評測使用的IOACAS數(shù)據(jù)集,其中包含404個WAV格式哼唱音頻,192首目標(biāo)MIDI歌曲,再加上960首MIDI歌曲組成的測試數(shù)據(jù)集。程序的開發(fā)語言是Python,運行程序的計算機的CPU型號為Intel(R)Core(TM)i5-9300HCPU@2.40GHz2.40GHz。第5章系統(tǒng)實現(xiàn)與性能分析5.2.2系統(tǒng)性能評價標(biāo)準(zhǔn)(1)檢索準(zhǔn)確度系統(tǒng)的檢索準(zhǔn)確度用于衡量哼唱檢索系統(tǒng)檢索出正確結(jié)果的能力。本文使用下面兩種方式計算系統(tǒng)的檢索準(zhǔn)確度:第一種是命中率(Top-N),當(dāng)正確結(jié)果在檢索結(jié)果列表的前N首歌中表示命中,命中次數(shù)與檢索次數(shù)的比例就為命中率。常見的N的取值為1,5,10,20。第二種是排序倒數(shù)平均數(shù)(MeanReciprocalRank,MRR),MRR指標(biāo)經(jīng)常用于對檢索系統(tǒng)評分,MIREX的QBSH任務(wù)就是使用MRR作為評分標(biāo)準(zhǔn)。每次檢索的得分總和與檢索次數(shù)的比例為MRR。每次檢索的MRR得分計算公式為:(5-1)(2)時間復(fù)雜度系統(tǒng)的時間復(fù)雜度用于衡量哼唱檢索系統(tǒng)檢索的速度。由于哼唱檢索系統(tǒng)是實時系統(tǒng),所以時間復(fù)雜度是一個重要指標(biāo)。本文使用平均檢索時間衡量系統(tǒng)的時間復(fù)雜度,平均檢索時間計算公式為:(5-2)5.2.3實驗與結(jié)果分析(1)時間復(fù)雜度表5.1音符存儲和音符檢測的檢索時間實驗101005001000單音符存儲0.0930.70211.0015.72雙音符存儲0.2963.32967.8290.06雙閾值函數(shù)0.0930.70211.0015.72過渡區(qū)域切割0.7810.82715.8521.41表5.1中時間為不同存儲方法進行一次檢索所消耗的最少時間,并依據(jù)于不同數(shù)量級的數(shù)據(jù)庫進行測試。從實驗結(jié)果來看,兩種存儲方法在面對極小量級的數(shù)據(jù)時的檢索時間近乎相同,在面對稍大一些數(shù)量級的數(shù)據(jù)時,雙音符存儲方法在檢索速度方面存在不足。這是由于在相同的初始哼唱音頻中,雙音符時間序列長度是單音符時間序列長度的兩倍,盡管雙音符時間序列更能夠表達音符時間長度,但在檢索過程中,序列長度將會帶來較長的檢索時間。表5.1中時間為不同旋律提取方法進行一次檢索所消耗的最少時間,并依據(jù)不同數(shù)量級的數(shù)據(jù)庫進行測試。從實驗結(jié)果來看,兩種對音符的提取方法在極小數(shù)量級數(shù)據(jù)的檢索時間同樣類似,但在稍大類型的數(shù)據(jù)庫中有較小的差距,過渡區(qū)域切割音符檢測在檢索速度方面仍存在不足。(2)檢索準(zhǔn)確度系統(tǒng)的檢索準(zhǔn)確度用于衡量哼唱檢索系統(tǒng)檢索出正確結(jié)果的能力。本文使用兩種方法分別衡量系統(tǒng)的檢索準(zhǔn)確度。第一種方法是通過返回目標(biāo)歌曲在前十個的命中率來計算系統(tǒng)的檢索準(zhǔn)確度。命中率(TopN)的含義為,當(dāng)正確結(jié)果在檢索結(jié)果列表的前N首歌中表示命中,命中次數(shù)與檢索次數(shù)的比例就為命中率。常見的N的取值為1,3,5,10。表5.2音符存儲和音符檢測的檢索準(zhǔn)確度實驗Top1Top3Top7Top10單音符存儲23.1%30.8%53.8%61.5%雙音符存儲25.5%35.6%50.3%60.5%雙閾值函數(shù)23.1%30.8%53.8%61.5%過渡區(qū)域切割23.1%36.5%50.9%53.8%表5.2主要比較了不同的音符存儲方法對于哼唱檢索系統(tǒng)檢索準(zhǔn)確度的影響。對于不同的TopN指標(biāo),兩種音符存儲方法基本都能給出相近的前N位歌曲列表。兩種存儲方法給出的前10名歌曲的命中率都在60%左右,較為符合預(yù)期,但對于Top-1和Top-3指標(biāo)的命中率與以往論文中的數(shù)據(jù)相比較低。原因有以下幾點,第一,以往論文中都對哼唱系統(tǒng)中的旋律提取、旋律匹配等環(huán)節(jié)都進行過優(yōu)化,而本文只針對旋律提取這一個環(huán)節(jié),并且實驗過程都采用相同的旋律預(yù)提取和旋律匹配算法,保證實驗的說服力和可信度。表5.2主要比較了不同音符檢測方法對于哼唱檢索系統(tǒng)檢索準(zhǔn)確度的影響。對于Top-1指標(biāo),兩種方法都給出一樣的候選列表,表明兩種算法對于此類哼唱音頻都有較高的命中率。對于Top-5、Top-7、Top-10三種指標(biāo),雙閾值函數(shù)音符檢測方法給出的候選列表命中率要稍高于過渡區(qū)域切割音符檢測方法,表明對于前10名歌曲的候選列表,雙閾值函數(shù)音符檢測方法擁有較高的準(zhǔn)確度。第二種方法是利用MIREX會議中QBSH任務(wù)所使用的排序倒數(shù)平均數(shù)(MeanReciprocalRank,MRR)作為評分標(biāo)準(zhǔn)。MRR指標(biāo)經(jīng)常用于對檢索系統(tǒng)評分,MIREX的QBSH任務(wù)就是使用MRR作為評分標(biāo)準(zhǔn)。每次檢索的得分總和與檢索次數(shù)的比例為MRR。所以一組檢索的MRR得分計算公式為:(5-3)其中ranki表示第i個查詢語句的第一個正確答案的排名。通過計算,雙閾值函數(shù)音符檢測方法的MRR為0.3487179,過渡區(qū)域分割音符檢測方法的MRR為0.3315018。從MRR指標(biāo)來看,兩種方法對于系統(tǒng)檢索準(zhǔn)確度并無較大的差距。5.3本章小結(jié)在本章節(jié)中,主要介紹系統(tǒng)的設(shè)計與實現(xiàn),其中包括系統(tǒng)結(jié)構(gòu)以及可行性分析。最后對算法進行試驗和結(jié)果分析,通過檢索準(zhǔn)確度和時間復(fù)雜度兩個評價標(biāo)準(zhǔn)進行分析。第6章總結(jié)與展望6總結(jié)與展望本文提出了基于雙閾值函數(shù)音符檢測的旋律時間序列化方法。該方法通過一個基于DTW算法的哼唱檢索系統(tǒng),能夠有效地表達哼唱音頻的旋律,并且能夠依托系統(tǒng)給出對應(yīng)的候選歌曲名單。實驗結(jié)果表明,該音符檢測方法具有一定的高效性,降低了哼唱檢索的時間消耗,同時在檢索準(zhǔn)確率方面也并不遜色于其他音符檢測方法。在對音符存儲方式的實驗中,驗證了兩種音符存儲方式在檢索準(zhǔn)確度上并無差別,但在檢索速度上單音符存儲方式的效率更高。在對于哼唱檢索系統(tǒng)的設(shè)計上,還需要精度更高的旋律預(yù)提取算法,并且對于實驗的可擴展性,即在面對海量數(shù)量級的數(shù)據(jù)庫時,單一的DTW匹配可能會花費更多的時間,因此系統(tǒng)需要進一步進行優(yōu)化。參考文獻參考文獻[1]GhiasA.LoganJ,ChamberinD,etalQuerybyhummingmusicalinformationretrievalinanaudiodatabase[C]//ProceedingsofthethirdACMintematio-nalconferenceonMutimedia.1995:231-23.[2]McNabRJ,SmithLA,WittenIH,etal.Towardsthedigitalmusiclibrary:Tuneretrievalfromacousticinput[C]//ProceedingsofthefirstACMinternationalconferenceonDigitallibraries.1996:11-18.[3]YouH,LuL,ZhangHJ.ANEWAPPROACHTOQUERYBYHUMMINGINMUSICRETRIEVAL[C]//IEEEInternationalConferenceonMultimediaandExpo,2001.ICME2001.2001:152-152.[4]ZhuY,ShashaD.WarpingIndexeswithEnvelopeTransformsforQuerybyHumming.2003.[5]JangJsR,GaoMYAquery-by-singingsystembasedondynamicprogramming[C]/Proceedingsofinternationalworkshoponintelligentsystemresolutions(8thbellmancontinum),Hsinchu2000:85-89.[6]JangJSR,LeeHR,KaoMY.Content-basedmusicretrievalusinglinearscalingandbranch-and-boundtreesearch[C//IEEEIntemationalConferenceonMultimediaandExpo,2001.ICME2001.2001:74-74[7]李揚,吳亞棟,劉寶龍.一種新的近似旋律匹配方法及其在哼唱檢索系統(tǒng)中的應(yīng)用[J].計算機研究與發(fā)展,2003,40(11):7.[8]王小鳳.基于內(nèi)容的音樂檢索關(guān)鍵技術(shù)研究[D].西北大學(xué),2008.[9]呂安超.基于旋律信息不變形的哼唱檢索技術(shù)研究[D].北京郵電大學(xué),2018.[10]LvA,LiuG.AnEffectiveDesignforFastQuery-by-HummingSystemwithMelodySegmentationandFeatureExtraction[C]//2017InternationalConferenceonComputerSystems,ElectronicsandControl(ICCSEC).IEEE,2017:752-757.[11]馮雅中,莊越挺,潘云鶴.一種啟發(fā)式的用哼唱檢索音樂的層次化方法[J].計算機研究與發(fā)展,2004,41(2):333-229.[12]KongC,YuY.Musicalnotesegmentationbasedonthedouble-thresholdendpointdetectionandfundamentalfrequencycurvefluctuationmeasure[C]//20174thInternationalConferenceonSystemsandInformatics(ICSAI).2017.[13]MIREXHOME./mirex/wiki/MIREX_HOME.[14]WuX,LiM,LiuJ,etal.Atop-downapproachtomelodymatchinpitchcontourforquerybyhumming[C]//Proceedingsof5thinternationalsymposiumonChinesespokenlanguageprocessing,Singapore.2006.[15]陳家紅.哼唱檢索中哼唱信息處理方法的研究[D].南京大學(xué),2008.[16]王京輝.語音信號處理技術(shù)研究[D].山東大學(xué),2013.[17]Cheveigne?AD,KawaharaH.YIN,afundamentalfrequencyestimatorforspeechandmusic[J].JournaloftheAcousticalSocietyofAmerica,2002,111(4):1917-30.[18]MauchM,DixonS.PYIN:Afundamentalfrequencyestimatorusingprobabilisticthresholddistributions[C]//2014.[19]EllisDPW.BeatTrackingbyDynamicProgramming[J].JournalofNewMusicResearch,2007,36(1):51-60.[20]RakthanmanonT,CampanaB,MueenA,BatistaG,WestoverB,ZhuQ,ZakariaJ
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年煙臺市檢察機關(guān)公開招聘聘用制書記員的備考題庫(24人)完整參考答案詳解
- 2025年中國移動通信集團山東有限公司曲阜分公司招聘備考題庫附答案詳解
- 2026年醫(yī)療醫(yī)院品管圈推廣合同
- 2026年工程分段付款合同
- 2026年企業(yè)技術(shù)交流合同
- 2026年人工智能產(chǎn)品責(zé)任保險合同中
- 2025年北京海淀區(qū)高二(上)期末歷史試題和答案
- 2025年蚌埠市固鎮(zhèn)縣司法局選聘專職人民調(diào)解員16人備考題庫及完整答案詳解1套
- 2025年中國光大銀行光大理財社會招聘備考題庫完整答案詳解
- 2025年寧武輔警招聘真題及答案
- 國家開放大學(xué)國開電大《商務(wù)英語4》綜合測試標(biāo)準(zhǔn)答案
- 糧油保管員(高級)職業(yè)技能鑒定參考試題(附答案)
- 等腰三角形復(fù)習(xí)課教案
- 2025年中國大唐集團有限公司校園招聘筆試參考題庫附帶答案詳解
- 常用統(tǒng)計軟件應(yīng)用知到智慧樹章節(jié)測試課后答案2024年秋揚州大學(xué)
- 江西省吉安市泰和縣2024-2025學(xué)年數(shù)學(xué)六年級第一學(xué)期期末統(tǒng)考試題含解析
- 《光伏發(fā)電工程安全驗收評價規(guī)程》(NB-T 32038-2017)
- 水質(zhì)分析儀安裝調(diào)試報告
- GB/T 2881-2023工業(yè)硅
- 教科版四年級上冊科學(xué)期末測試卷(含答案)
- 醫(yī)院診斷證明書word模板
評論
0/150
提交評論