肖艷+王虎
【摘要】 本文對(duì)基于哼唱的小規(guī)模MIDI音樂(lè)檢索系統(tǒng)的各個(gè)模塊進(jìn)行了詳細(xì)的闡述,匹配模塊中以相對(duì)音高序列作為音樂(lè)旋律的特征進(jìn)行匹配,并通過(guò)實(shí)驗(yàn)驗(yàn)證系統(tǒng)的性能。實(shí)驗(yàn)表明,該檢索系統(tǒng)能取得較滿(mǎn)意的結(jié)果。
【關(guān)鍵字】 MIDI音樂(lè) 相對(duì)音高序列 哼唱檢索
Abstract: This paper elaborated different modules of small MIDI music retrieval system based on the humming. In the matching module, it used relative pitch sequence as characteristics of the music melody. It also verified the performance of the system through the experiment. And experiments showed that the system can obtain satisfactory results.
Key words: The MIDI music; Relative pitch sequence; Hum to retrieve
引言
哼唱檢索(QBH)是在歌曲數(shù)據(jù)庫(kù)中檢索到用戶(hù)哼唱旋律并將結(jié)果反饋給用戶(hù)的系統(tǒng)。在一個(gè)標(biāo)準(zhǔn)的哼唱檢索查詢(xún)中,用戶(hù)要從一個(gè)大型的音樂(lè)錄音數(shù)據(jù)庫(kù)中找到一首歌曲。如果用戶(hù)不記得歌手或歌曲的名稱(chēng)來(lái)進(jìn)行元數(shù)據(jù)查詢(xún),自然選擇對(duì)麥克風(fēng)哼唱,來(lái)表現(xiàn)歌曲旋律的一部分,然后使用哼唱檢索系統(tǒng)檢索歌曲。
MIDI文件記錄的是音樂(lè)演奏的指令序列,向演奏者標(biāo)注出演奏時(shí)間、樂(lè)器、音符和方式。midi作為數(shù)字音樂(lè)文件,本身只有樂(lè)器旋律而沒(méi)有人聲,所以使用midi主旋律就可以表示歌曲旋律,比從WAV中提取的主旋律更準(zhǔn)確。WAV格式在本文中只是作為用戶(hù)哼唱音頻的輸入格式。
相對(duì)音高序列是指序列的后一個(gè)音高同前一個(gè)音高進(jìn)行比較,它能反映音符的音高特征。用相對(duì)音高序列作為旋律的特征在中小型音樂(lè)檢索效果方面很不錯(cuò)。
一、基于哼唱的小規(guī)模MIDI音樂(lè)檢索系統(tǒng)框架
本文基于哼唱的小規(guī)模MIDI音樂(lè)檢索系統(tǒng)主要分為四部分:第一部分是MIDI歌曲數(shù)據(jù)庫(kù)的建立,即用戶(hù)哼唱的旋律在檢索時(shí)所逐一進(jìn)行匹配的MIDI歌曲數(shù)據(jù)庫(kù);第二部是旋律特征提取,這里的特征提取既包含MIDI歌曲庫(kù)中的歌曲特征提取又包含用戶(hù)哼唱時(shí)的旋律特征提?。坏谌糠质翘卣髌ヅ?,是將用戶(hù)哼唱的旋律特征與MIDI歌曲庫(kù)中的MIDI歌曲特征進(jìn)行比較;第四部分是將MIDI歌曲庫(kù)中和哼唱旋律相似的音樂(lè)名稱(chēng)輸出。
1.1歌曲庫(kù)建立
首先在網(wǎng)絡(luò)上收集10首MIDI格式的音樂(lè)構(gòu)成MIDI歌曲庫(kù)。當(dāng)然,對(duì)于整個(gè)基于哼唱的音樂(lè)檢索系統(tǒng)來(lái)說(shuō),10首歌曲是遠(yuǎn)遠(yuǎn)不夠的,這主要是因?yàn)樵谙到y(tǒng)搜索階段,系統(tǒng)搜索的復(fù)雜度和準(zhǔn)確度與歌曲數(shù)目呈負(fù)相關(guān),但是因?yàn)楸菊撐闹饕懻摰氖腔诤叱腗IDI音樂(lè)檢索的整體過(guò)程,為部分此方面學(xué)習(xí)人員提供一個(gè)思路,因此10首歌曲和1000或10000首并不會(huì)有太大差別。
1.2旋律特征提取
這里的旋律特征提取包含兩個(gè)方面,分別是MIDI歌曲庫(kù)中MIDI音樂(lè)的特征提取、用戶(hù)哼唱的旋律特征提取。由于MIDI歌曲庫(kù)中的歌曲是MIDI格式的,用戶(hù)哼唱的旋律是wav格式的,所以下面將分開(kāi)介紹兩者的特征提取步驟。由于相對(duì)音高序列能夠反映音符的音高特征,所以將旋律特征提取轉(zhuǎn)換成求旋律的相對(duì)音高序列即可。
用戶(hù)哼唱的旋律其相對(duì)音高序列是通過(guò)比較相鄰音符的過(guò)零率得到的。用戶(hù) 哼唱的旋律其相對(duì)音高序列提取步驟:
1)可調(diào)參數(shù)。設(shè)定計(jì)算過(guò)零率前加入的白噪聲的信噪比、對(duì)有毛刺的過(guò)零率結(jié)果進(jìn)行的低通濾波器的截止頻率、上述低通濾波器的開(kāi)關(guān)、對(duì)過(guò)零率結(jié)果進(jìn)行門(mén)限判決的門(mén)限設(shè)定。
2)過(guò)零率計(jì)算。音頻頻率越高,過(guò)零也越高。
3)濁音區(qū)間端點(diǎn)檢測(cè)。首先判斷第一個(gè)點(diǎn)是高過(guò)零點(diǎn)還是低過(guò)零點(diǎn)。當(dāng)?shù)谝粋€(gè)點(diǎn)是高過(guò)零點(diǎn)時(shí),第一個(gè)點(diǎn)被舍棄。始點(diǎn)從第二點(diǎn)開(kāi)始,終點(diǎn)從第三點(diǎn)開(kāi)始。認(rèn)為第一個(gè)端點(diǎn)應(yīng)該是清音或者靜音的開(kāi)始,后面的端點(diǎn)是清音與濁音交替;當(dāng)?shù)谝粋€(gè)點(diǎn)是低過(guò)零點(diǎn)時(shí),始點(diǎn)從第一點(diǎn)開(kāi)始,終點(diǎn)從第三點(diǎn)開(kāi)始。認(rèn)為第一個(gè)端點(diǎn)應(yīng)該是濁音段的開(kāi)始,后面的端點(diǎn)是清音與濁音交替。
4)除野點(diǎn)。將持續(xù)時(shí)間小于100ms的濁音段認(rèn)為是野點(diǎn),忽略掉。
5)求取tempo以及在每個(gè)tempo內(nèi)求一個(gè)平均絕對(duì)音高(Hz)。
6)轉(zhuǎn)換成相對(duì)音高(音階)。
MIDI歌曲庫(kù)中MIDI音樂(lè)的相對(duì)音高序列的提取過(guò)程:
(1) 驗(yàn)證文件格式。驗(yàn)證MIDI歌曲庫(kù)中的MIDI音樂(lè)是否是單聲道的midi format0,然后讀取所有音符(包括靜音段)的音高、通道、持續(xù)時(shí)間(即deltatime的值,時(shí)鐘個(gè)數(shù)),讀取所有的 Note On和Note Off消息。事件的deltatime作為上一個(gè)事件的持續(xù)時(shí)間,我們默認(rèn)時(shí)間都是Note On和Note Off交替進(jìn)行。如果有幾個(gè)音符同時(shí)發(fā)聲的情況,第二個(gè)音符開(kāi)始發(fā)聲時(shí)認(rèn)為前一個(gè)音符結(jié)束,再遇到它的note off消息時(shí)我們將會(huì)忽略。note on時(shí)間的deltatime表示如果不為0,認(rèn)為是前面有靜音的地方。
2)提取所有音符。
3)統(tǒng)計(jì)音符中1/16、1/8、1/4等各種音符的個(gè)數(shù)。
4)對(duì)音符量化。將0音符的音高認(rèn)為是前一個(gè)音符的音高。
5)轉(zhuǎn)為相對(duì)音高序列。
6)把文件名和相對(duì)音高序列存入庫(kù)中。
1.3旋律匹配
首先依次讀取MIDI歌曲庫(kù)中的10首歌曲的MIDI音符序列,通過(guò)旋律特征提取得到相對(duì)音高序列,然后在歌曲中尋找與用戶(hù)哼唱旋律最小距離的片段即最相似的片段,然后再尋找最相似的片段起始位置并計(jì)算錯(cuò)誤字符數(shù)。
旋律匹配的具體步驟是:
1)依次讀取MIDI歌曲庫(kù)中midi音符序列的相對(duì)音高序列。
2)遍歷尋找出10首歌曲中與用戶(hù)哼唱旋律的相對(duì)音高序列最低差錯(cuò)的序列。
3)尋找最相似的片段起始位置,并計(jì)算錯(cuò)誤字符數(shù)。
4)顯示歌曲名和錯(cuò)誤音符數(shù)。
二、系統(tǒng)實(shí)驗(yàn)驗(yàn)證
在實(shí)驗(yàn)中,我們輸入哼唱的一小段“北京歡迎你”旋律,導(dǎo)進(jìn)檢索系統(tǒng)過(guò)后,系統(tǒng)將檢索用戶(hù)哼唱的歌曲和MIDI數(shù)據(jù)庫(kù)中的歌曲進(jìn)行對(duì)比,再按照相似度的大小進(jìn)行排序 ,把相似度最高的前5首的歌曲名列表返回給檢索用戶(hù)。實(shí)驗(yàn)結(jié)果是基于Matlab2012b 仿真平臺(tái)進(jìn)行的,如下圖所示。
三、總結(jié)
通過(guò)實(shí)驗(yàn)結(jié)果可以看到,當(dāng)用戶(hù)哼唱歌曲“北京歡迎你”的一段旋律時(shí),檢索系統(tǒng)將MIDI歌曲庫(kù)中的“北京歡迎你”等前5首歌曲的名稱(chēng)反饋給用戶(hù),并且“北京歡迎你”歌曲名稱(chēng)排列在第一位。此結(jié)果表明該系統(tǒng)在小規(guī)模數(shù)據(jù)庫(kù)中的應(yīng)用識(shí)別率較高。
參 考 文 獻(xiàn)
[1]魯帆.基于哼唱的音樂(lè)檢索系統(tǒng)[D].西安:西安建筑科技大學(xué),2011.
[2]郭洪波.音樂(lè)哼唱檢索關(guān)鍵技術(shù)研究[D].西安:西北大學(xué),2004
[3]孫潔.基于哼唱的MIDI音樂(lè)檢索系統(tǒng)的研究[D].西安:西安建筑科技大學(xué),2013.
[4]曹亮.海量音樂(lè)的哼唱檢索研究[D].北京:北京郵電大學(xué),2015.
[5]徐霽,袁旭海.一個(gè)音樂(lè)檢索系統(tǒng)的研究與實(shí)現(xiàn)[J].寧波大學(xué)學(xué)報(bào)(理工版),2007,20(3):293-296.