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