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