梁桓菡
摘要:基于音頻指紋技術(shù)對(duì)音頻進(jìn)行檢索識(shí)別和分析。音頻指紋技術(shù)(Audio fingerprinting technology)是一種通用音頻處理技術(shù)。它能根據(jù)旋律準(zhǔn)確識(shí)別歌名、歌手、專(zhuān)輯名等信息。對(duì)識(shí)別后的歌曲進(jìn)行顯示正確信息。應(yīng)用這項(xiàng)技術(shù)可以為每一首歌曲編制特征碼,從而實(shí)現(xiàn)歌曲的精確匹配和識(shí)別,該技術(shù)結(jié)合專(zhuān)門(mén)的索引算法建立了一套音頻指紋數(shù)據(jù)庫(kù)系統(tǒng)(簡(jiǎn)稱(chēng)音頻指紋庫(kù)),提供音樂(lè)識(shí)別服務(wù)。
關(guān)鍵詞:音頻指紋;echoprint;音頻匹配;音頻數(shù)據(jù)庫(kù)
中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2016)05-0157-03
1 概述
大家都有遇到過(guò)這么一種情況,有時(shí)候我們聽(tīng)到一首歌有點(diǎn)熟悉或是感覺(jué)好聽(tīng),但我們不知道這首歌叫什么名字,因而沒(méi)辦法查找到這首歌的相關(guān)的信息。所以為了解決上述這個(gè)問(wèn)題,我們開(kāi)發(fā)了一個(gè)音樂(lè)旋律識(shí)別及分析系統(tǒng)。通過(guò)錄取外界音響設(shè)備播放的音樂(lè),并提取該音頻里的指紋信息作為唯一標(biāo)示符,建立原唱歌曲音頻指紋數(shù)據(jù)庫(kù),提供檢索服務(wù)。將錄取音頻的指紋信息和原唱音頻指紋數(shù)據(jù)庫(kù)進(jìn)行匹配,返回歌曲的相似度和歌曲信息。
2 實(shí)現(xiàn)原理
2.1開(kāi)發(fā)環(huán)境和平臺(tái),使用語(yǔ)言
開(kāi)發(fā)環(huán)境:LINUX;
開(kāi)發(fā)工具:visual studio 2011,JDK, Python 3.3 ;
開(kāi)發(fā)語(yǔ)言:c,c++,java,python;
服務(wù)器:linux+VMware虛擬機(jī)。
2.2引用的技術(shù)
2.2.1 Echoprint開(kāi)源項(xiàng)目
Echoprint 系統(tǒng)由三部分組成。 Codegen指紋生成器將音頻文件(或者音頻樣本)作為輸入,基于Echo Nest Musical Fingerprint (ENMFP)算法產(chǎn)生聲紋。Echoprint服務(wù)器維護(hù)一個(gè)聲紋和音軌信息的索引數(shù)據(jù)庫(kù),并且支持遠(yuǎn)程訪問(wèn)和添加新的聲紋及音軌。 Echoprint數(shù)據(jù)庫(kù)本身維護(hù)對(duì)外公開(kāi)的音軌和聲紋信息。數(shù)據(jù)庫(kù)里有整段音軌的聲紋代碼,但是同大多數(shù)聲紋識(shí)別技術(shù)類(lèi)似,有部分片段即可進(jìn)行比對(duì)。Echoprint可以提供至少20s時(shí)長(zhǎng)片段的聲紋精確匹配。Echoprint總體框架圖
2.2.2 taglib
格式的音頻文件中讀取音頻數(shù)據(jù)。TagLib庫(kù)為閱讀和編輯元數(shù)據(jù)幾個(gè)流行的音頻格式。目前它支持雙方ID3v1和ID3v2 MP3文件,Ogg Vorbis評(píng)論和ID3標(biāo)簽和Vorbis評(píng)論在FLAC,MPC,Speex,WavPack TrueAudio,WAV,AIFF、MP4和ASF文件。
2.2.3 zlib
提供數(shù)據(jù)壓縮用的函式庫(kù),由Jean-loupGailly與Mark Adler所開(kāi)發(fā)。zlib使用DEFLATE算法,最初是為libpng函式庫(kù)所寫(xiě)的,后來(lái)普遍為許多軟件所使用,此函式庫(kù)為自由軟件,使用zlib授權(quán)。
2.2.4 boost
Boost庫(kù)是為C++語(yǔ)言標(biāo)準(zhǔn)庫(kù)提供擴(kuò)展的一些C++程序庫(kù)的總稱(chēng)。Boost庫(kù)由Boost社區(qū)組織開(kāi)發(fā)、維護(hù)。其目的是為C++程序員提供免費(fèi)、同行審查的、可移植的程序庫(kù)。Boost庫(kù)可以與C++標(biāo)準(zhǔn)庫(kù)完美共同工作,并且為其提供擴(kuò)展功能。大部分boost庫(kù)功能的使用只需包括相應(yīng)頭文件即可,少數(shù)(如正則表達(dá)式庫(kù),文件系統(tǒng)庫(kù)等)需要鏈接庫(kù)。里面有許多具有工業(yè)強(qiáng)度的庫(kù).
2.2.5 FFmpeg
FFmpeg是一套可以用來(lái)記錄、轉(zhuǎn)換數(shù)字音頻、視頻,并能將其轉(zhuǎn)化為流的開(kāi)源計(jì)算機(jī)程序。它包括了目前領(lǐng)先的音/視頻編碼庫(kù)libavcodec。 FFmpeg是在Linux下開(kāi)發(fā)出來(lái)的,但它可以在包括Windows在內(nèi)的大多數(shù)操作系統(tǒng)中編譯。這個(gè)項(xiàng)目是由Fabrice Bellard發(fā)起的,現(xiàn)在由Michael Niedermayer主持??梢暂p易地實(shí)現(xiàn)多種視頻格式之間的相互轉(zhuǎn)換,例如可以將攝錄下的視頻avi等轉(zhuǎn)成現(xiàn)在視頻網(wǎng)站所采用的flv格式。
2.3開(kāi)發(fā)框架
2.3.1 音頻指紋采集模塊
5 總結(jié)
通過(guò)努力,以提取音頻音頻指紋為核心,匹配算法為輔,完成了對(duì)整個(gè)系統(tǒng)的開(kāi)發(fā)。通過(guò)提取的指紋來(lái)匹配歌曲,獲得該歌曲的相似度,然后對(duì)其進(jìn)行智能識(shí)別。經(jīng)過(guò)多次的測(cè)試獲得不錯(cuò)的效果。
參考文獻(xiàn):
[1] 呂國(guó)英.算法設(shè)計(jì)與分析 [M].清華大學(xué)出版社,2012.
[2] 朱戰(zhàn)立.數(shù)據(jù)結(jié)構(gòu)-使用C語(yǔ)言 [M].電子工業(yè)出版社,2013.