Audio-Fingerprinting音樂識(shí)別系統(tǒng)
Audio-Fingerprinting 是一個(gè)音樂指紋識(shí)別系統(tǒng),使用的語言為 JAVA,同時(shí)需要用到 MySQL 數(shù)據(jù)庫(kù)(雖然不是必須的,但這個(gè)系統(tǒng)采用他保存指紋和音樂信息)。他包含了指紋生成,數(shù)據(jù)庫(kù)存儲(chǔ),和簡(jiǎn)易的服務(wù)器和客戶端。
他通過生成和記錄音樂指紋,能夠識(shí)別來自麥克風(fēng)、文件等各個(gè)來源的音樂,并且有很高的抗噪性,同時(shí)他對(duì)文件屬性和音樂質(zhì)量不敏感。你可以使用服務(wù)器給手機(jī)或者其他程序提供音樂識(shí)別服務(wù)。
你可以根據(jù)需求調(diào)節(jié)里面的參數(shù),當(dāng)前參數(shù)是為了在較短時(shí)間識(shí)別來自極大噪聲和失真的音源,1500個(gè)左右的文件將產(chǎn)生接近24000000個(gè)指紋數(shù) 據(jù)。如果你只用于識(shí)別文件并且沒有嚴(yán)重的噪聲與失真,你可以修改參數(shù),1個(gè)文件只需要少量指紋就可以識(shí)別,對(duì)于噪聲較低的音源10s 200個(gè)指紋已經(jīng)滿足大多需求。
簡(jiǎn)易使用方法
-
需要安裝MySQL,并執(zhí)行Fingerprint. sql, 同時(shí)你可能需要修改max_allowed_packet參數(shù),因?yàn)樘砑痈枨枰l(fā)送較大的包,我采用的參數(shù)是32M。
-
修改MysqlDB中的數(shù)據(jù)庫(kù)信息為你的數(shù)據(jù)庫(kù)信息,如:
private final String url = "jdbc:mysql://127.0.0.1:3306/musiclibary?user=yecheng"; private final String user = "yecheng"; private final String password = "yecheng";
-
添加文件的方法:
Ps:你可以重寫添加的方法或者制作腳本或者直接使用其他軟件實(shí)現(xiàn)轉(zhuǎn)碼功能,目前他能夠從%title%}}%album%}}%artist%的文件名中獲得信息。
-
將文件轉(zhuǎn)碼為WAV,采樣率為8000。
-
調(diào)用Insert,參數(shù)為文件名或者文件夾。
-
-
搜索音樂
-
你可以調(diào)用Search+文件名搜索。
-
在數(shù)據(jù)庫(kù)較大的情況推薦采用運(yùn)行Server,使用Client+文件名搜索。
-
主要參數(shù)介紹
Fingerprint:
NPeaks:一個(gè)周期中每個(gè)子帶的峰值點(diǎn)的個(gè)數(shù) fftSize:FFT的窗口大小 overlap:FFT的窗口重疊大小 C:一個(gè)周期包含多少個(gè)窗口 peakRange:取峰值點(diǎn)時(shí)與多大范圍的鄰居比較 range_time:取點(diǎn)對(duì)的時(shí)候的時(shí)間范圍,單位為秒 range_freq:取點(diǎn)對(duì)的時(shí)候的頻率范圍,單位為頻率 Band:分成的子帶,值對(duì)應(yīng)FFT產(chǎn)生的數(shù)組索引 minFreq:最小頻率 maxFreq:最大頻率 minPower:最小能量
修改的建議:
-
提高識(shí)別率:
-
減小minPower, 增加Band、NPeaks、range_time
-
-
降低數(shù)據(jù)量:
-
增大minPower,減小Band、NPeaks、rang_time
-
其中建議先修改Band和minPower。
Server:
port:服務(wù)器的端口
Client:
ip:服務(wù)器的ip port:服務(wù)器的端口
性能與效果
數(shù)據(jù)量:音樂庫(kù)為1500首歌,指紋數(shù)量為24000000個(gè)左右,服務(wù)器穩(wěn)定后占用內(nèi)存約340M。
速度:處理器i7-3632QM,添加1500首歌用時(shí)約1919秒,一首歌約用時(shí)1.3秒。使用服務(wù)器查找10s的歌曲用時(shí)約0.2秒(不考慮客戶端讀取文件的時(shí)間)。
準(zhǔn)確度:對(duì)噪聲較低的音頻有很高的識(shí)別率,對(duì)噪聲較高的也有接近商用的準(zhǔn)確率,但是相對(duì)來說如果對(duì)于未出現(xiàn)在曲庫(kù)的歌曲,也有一定的誤報(bào)率。
抗噪性:能夠抵抗較強(qiáng)的失真和噪聲,可以參考我給的測(cè)試音頻。
工作原理
參考文檔:
本算法實(shí)現(xiàn)類似Shazam,首先我計(jì)算出音頻的頻譜圖,將頻譜根據(jù)頻率分成若干子帶,對(duì)每個(gè)子帶查找若干個(gè)峰值點(diǎn),本算法子帶劃分基于Mel頻率。
將獲得的峰值點(diǎn)根據(jù)頻率、時(shí)間范圍組成點(diǎn)對(duì)。
本算法的取點(diǎn)對(duì)頻率范圍為在子帶內(nèi),其目的在于減少點(diǎn)對(duì)的數(shù)目并且提高分布式能力。取點(diǎn)對(duì)的時(shí)間范圍為1s-4s。你可以根據(jù)需要修改這些參數(shù)。
