版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、基于余弦距離的哼唱音樂檢索算法的設(shè)計(jì)與實(shí)現(xiàn)學(xué) 院計(jì)算機(jī)學(xué)院專 業(yè)計(jì)算機(jī)科學(xué)與技術(shù)班 級(jí)學(xué) 號(hào)姓 名指導(dǎo)教師負(fù)責(zé)教師2010年6月摘 要隨著多媒體技術(shù)的發(fā)展,網(wǎng)絡(luò)音樂日益增多。現(xiàn)在人們己經(jīng)不滿足于通過歌曲名、歌曲的演唱者等一些文本信息來檢索。特別是對(duì)于那些種類繁多的音樂數(shù)據(jù),人們也許只記得一個(gè)調(diào)子,也許只記得一個(gè)片斷,如何快速有效的通過旋律來檢索相關(guān)音樂就成為一個(gè)突出問題。本文對(duì)基于哼唱的音樂檢索進(jìn)行了相關(guān)的研究和實(shí)現(xiàn)。本文采用了microsoft visual c+編程技術(shù)和mysql server數(shù)據(jù)庫,做了如下工作:(1) 通過對(duì)音樂信號(hào)基本理論的研究,提出了利用音高差和音長來描述音樂旋律
2、特征的方法,有效地避免哼唱過程走調(diào)問題,因此提高了準(zhǔn)確性。(2) 對(duì)于哼唱音樂片段,通過信號(hào)預(yù)處理、基音提取、特征提取、特征后處理,實(shí)現(xiàn)了從wav文件中提取音符音高差和音長特征,采用n_gram方法對(duì)音高序列進(jìn)行切分,擴(kuò)充查詢集合以提高查詢準(zhǔn)確度。(3) 確定wav格式作為數(shù)據(jù)庫音樂的文件存儲(chǔ)格式,并建立歌曲的音高差和音長特征庫。(4) 為提高查詢速度,建立整數(shù)編碼的哈希索引。(5) 采用余弦距離旋律匹配算法,從音高差和音長兩方面進(jìn)行旋律匹配,返回查詢結(jié)果,并計(jì)算響應(yīng)時(shí)間。關(guān)鍵詞:哼唱檢索;特征提取;余弦距離匹配;音高差usd和音長旋律特征design and implement of hum
3、med melody retrieval based on consine distanceabstractwith rapid development of multimedia technology, a large number of online music can be obtained from the internet. now, people are no longer satisfied with searching music based on text information such as music name and singer. especially, with
4、various kinds of music data, people might only remember the tune of a song, or perhaps fragment of it. how to quickly and effectively retrieve music data by melody information has become a prominent problem. in this dissertation, the music retrieval based on hummed melody is studied .in this dissert
5、ation, the hummed melody retrieval based on consine distance is implemented with microsoft visual c+ and mysql server, and the concrete work is as follows:firstly, through the study of music signal, proposing that pitch interval and duracion as the music melody feature, which is effective to avoid t
6、he pitch changing as well as improving the music retrieval accuracy. secondly, for the hummed melody, extracting the feature of music melody from wav musics format through signal preprocessing, keynote extraction, feature extraction, feature extraction postprocessing. using n_gram to syncopate the p
7、itch interval in order to improve the accuracy. thirdly, making sure that wav as the musics format and set up pitch interval and duracion database. forthly, in order to improve the speed of retrieval, the dissertation uses hash index. finally, using cosine distance matching algorithm, the pitch inte
8、rval and duracion as the vector to match then return the result, in the end calculating the retrieval time.keywords: hummed retrieval; feature extraction; cosine distance matching; usd pitch interval and duracion 目 錄1 緒論11.1 課題背景及其意義11.1.1 音樂哼唱檢索技術(shù)的發(fā)展11.1.2 音樂哼唱檢索系統(tǒng)的意義11.2 課題目標(biāo)21.2.1 課題研究的主要內(nèi)容21.2.2
9、 課題研究的價(jià)值32 系統(tǒng)需求分析42.1 需求分析42.2 可行性研究52.2.1 技術(shù)可行性52.2.2 經(jīng)濟(jì)可行性62.2.3 操作可行性62.3 目前可選擇的技術(shù)62.4 技術(shù)開發(fā)工具概述62.4.1 c+開發(fā)語言概述62.4.2 mysqlserver數(shù)據(jù)庫73 系統(tǒng)概要設(shè)計(jì)93.1 系統(tǒng)總體設(shè)計(jì)思想93.2 系統(tǒng)用例圖103.3 數(shù)據(jù)庫邏輯設(shè)計(jì)123.3.1 數(shù)據(jù)庫設(shè)計(jì)方法簡述123.3.2 概念模型設(shè)計(jì)123.3.3 數(shù)據(jù)庫的關(guān)系模型設(shè)計(jì)134 系統(tǒng)詳細(xì)設(shè)計(jì)及實(shí)現(xiàn)164.1 系統(tǒng)數(shù)據(jù)庫詳細(xì)設(shè)計(jì)164.1.1 用戶哼唱片段信息表164.1.2 wav特征庫設(shè)計(jì)164.1.3 索引表
10、174.1.4 檢索結(jié)果集184.2 系統(tǒng)功能詳細(xì)設(shè)計(jì)194.2.1 wav特征提取194.2.2 哼唱音樂的記錄和特征提取234.2.3 查詢擴(kuò)展234.2.4 哈希索引244.2.5 余弦匹配算法254.2.6 系統(tǒng)響應(yīng)時(shí)間的計(jì)算275 系統(tǒng)的調(diào)試與測(cè)試285.1 系統(tǒng)的調(diào)試285.2 系統(tǒng)功能測(cè)試295.2.1 wav音樂文件特征提取測(cè)試295.2.2 用戶哼唱片段特征提取305.2.3 n_gram算法測(cè)試315.2.4 哈希索引表測(cè)試315.2.5 系統(tǒng)檢索匹配測(cè)試325.2.6 分析原因32結(jié)束語34參考文獻(xiàn)35致 謝371 緒論1.1 課題背景及其意義1.1.1 音樂哼唱檢索技術(shù)
11、的發(fā)展基于哼唱的音頻信息檢索技術(shù)的研究工作是從上世紀(jì)九十年代中后期開始的。近年來,它已經(jīng)成為國內(nèi)外研究的熱點(diǎn)問題之一,引起了眾多研究機(jī)構(gòu)和學(xué)者的重視。具體來說,早期的研究以ghias和r.j.mcnab等為代表,他們的共同特點(diǎn)是采用時(shí)域上的自相關(guān)法提取音高值,根據(jù)音高值的變化把旋律表示成由字母“u”、“d”、“r”組成的符號(hào)串。其中,“u”表示后一個(gè)音符的音高比前一個(gè)高;“d”表示后一個(gè)音符的音高比前一個(gè)低;“r”表示前后音符的音高值相同。匹配引擎采用近似字符串模糊匹配算法。后來,一些學(xué)者在旋律特征表達(dá)方面和匹配檢索方面進(jìn)行了更多的探索。zhu等人使用了一種基于時(shí)間序列的方法。在該方法中,歌曲
12、中的每個(gè)音符都被拆分成由若干時(shí)間片組成的時(shí)間序列,從而將整首歌曲中音符的組合轉(zhuǎn)化為時(shí)間序列的組合。然后再計(jì)算時(shí)間序列間的距離,并將結(jié)果作為衡量歌曲間相似度的標(biāo)準(zhǔn)。該方法有利于使用dtw方法進(jìn)行匹配,但是需要進(jìn)行音符序列的平移和時(shí)間彎曲,還需要對(duì)每個(gè)時(shí)間序列進(jìn)行匹配,時(shí)間復(fù)雜度非常高。大多數(shù)系統(tǒng)都使用近似字符串的匹配算法比較旋律,但近年來,基于隱馬爾可夫模型(hmm)的匹配算法被越來越多的學(xué)者重視和研究。 wiiliamrand等提出使用馬爾可夫統(tǒng)計(jì)模型比較旋律的相似性。該方法對(duì)音高誤差比較敏感,但能較好地容忍遺漏音符和節(jié)奏上的哼唱誤差。1.1.2 音樂哼唱檢索系統(tǒng)的意義隨著互聯(lián)網(wǎng)技術(shù)和多媒體技
13、術(shù)的迅速發(fā)展,網(wǎng)絡(luò)音樂的下載己經(jīng)占據(jù)了整個(gè)網(wǎng)絡(luò)信息流量的很大份額。人們面臨的問題不再是缺少音樂內(nèi)容,而是如何在浩如煙海的多媒體世界中快速、準(zhǔn)確、高效的查詢音樂信息。常規(guī)的信息檢索技術(shù)主要是基于文本的,目前已經(jīng)發(fā)展得非常成熟。例如google、yahoo和百度等搜索引擎采用的就是這種技術(shù)。它是通過查詢關(guān)鍵字的匹配來發(fā)現(xiàn)需要檢索的文檔。如果一個(gè)文檔包含較多的查詢項(xiàng),就認(rèn)為該文檔比其它包含較少查詢項(xiàng)的文檔更“相關(guān)”。最后,將文檔按照“相關(guān)”度排序并顯示給用戶作為檢索結(jié)果。雖然最初對(duì)音頻信息的檢索也采用了文本檢索技術(shù),但卻是通過人工方式生成音頻信息的文本標(biāo)注,如文件名、歌曲的演唱者等,然后采用文本檢索
14、技術(shù)實(shí)現(xiàn)對(duì)音頻信息的檢索。在實(shí)際應(yīng)用中,這種基于文本的音頻信息檢索方式有其固有的無法克服的缺陷。首先,當(dāng)音頻數(shù)據(jù)量越來越多時(shí),人工的注釋強(qiáng)度加大;其次,人對(duì)音頻的感知,例如音樂的旋律、音調(diào)、音質(zhì)等,難以用文字注釋表達(dá)清楚。最后,當(dāng)聽到熟悉卻又陌生的旋律,但是想不起來它的作者或者表演者時(shí),在現(xiàn)有的搜索引擎上,想要找到這樣的樂曲是不可能的。而這正是基于內(nèi)容的音頻檢索技術(shù)所要研究和解決的問題??梢韵胂螅叱獧z索音樂具有極其廣泛的應(yīng)用前景,普通用戶即使只記得音樂的某個(gè)片段也可以方便的從網(wǎng)上找到自己喜歡的音樂;在ktv人們只需要哼唱就可以點(diǎn)歌而不需要歌本;音樂創(chuàng)造者可以知道自己的創(chuàng)作是否與眾不同;版權(quán)管
15、理部門可以查出一首歌曲是否盜版侵權(quán);利用手機(jī)哼唱點(diǎn)歌也將成為一種新的潮流。因此,對(duì)于哼唱音樂檢索的研究具有重要的實(shí)用價(jià)值,也是富有挑戰(zhàn)性的研究領(lǐng)域。本文的工作為音樂哼唱檢索打下了一定的基礎(chǔ),對(duì)進(jìn)一步的深入研究具有推動(dòng)和借鑒意義。1.2 課題目標(biāo)本次設(shè)計(jì)的目標(biāo)是通過對(duì)用戶哼唱的旋律片段的分析,在大型曲庫中利用余弦距離匹配算法,檢索出與用戶的輸入旋律在聽覺上相近的歌曲。另外,在設(shè)計(jì)中,對(duì)音樂旋律的刻畫考慮音高差和音長,盡可能提高音樂特征描述的準(zhǔn)確度。采用整數(shù)哈希索引方法,提高了哼唱檢索的速度。本設(shè)計(jì)實(shí)現(xiàn)了哼唱檢索系統(tǒng)的基本功能,具有較強(qiáng)的實(shí)用性。1.2.1 課題研究的主要內(nèi)容傳統(tǒng)的歌曲搜索都是基于
16、關(guān)鍵詞的檢索,在有些情況下很不實(shí)用。本文以基于內(nèi)容的音樂哼唱檢索為背景,系統(tǒng)的研究了記錄哼唱音樂片段,哼唱音樂片段特征提取、建立音樂特征庫、建立整數(shù)哈希索引、余弦距離匹配算法、計(jì)算檢索響應(yīng)時(shí)間。研究目標(biāo)為用戶不需要哼唱固定符號(hào),更不用加入輔助手段,直接哼一段音樂或唱一段歌譜,將得到檢索結(jié)果。本文的研究的主要內(nèi)容如下:記錄用戶哼唱的音樂片段,存儲(chǔ)格式采用wav。在記錄過程中,要對(duì)錄入的聲音進(jìn)行信號(hào)預(yù)處理、基音提取、特征提取、特征后處理。音樂旋律主要由音高和音長兩大部分組成,音高描述該音節(jié)的頻率高低(相對(duì)值),音長描述該音節(jié)的持續(xù)長短(相對(duì)值)。相同音高序列配以不同的音長表示,或者相同的音長賦予不
17、同的音高,其實(shí)際聽覺感受差異是十分明顯的。因此,采用音高差和音長來刻畫旋律特征。音高差采用usd、音長采用lrs描述方式。采用n_gram方法對(duì)音高差序列進(jìn)行切分,產(chǎn)生擴(kuò)充的usd查詢集合,以查詢集合中的每個(gè)元素為查找項(xiàng),查找哈希索引后,再進(jìn)行余弦距離匹配,這樣使系統(tǒng)具有良好的容錯(cuò)性。為提高查詢效率,本文對(duì)旋律輪廓按照n_gram進(jìn)行切分后,建立了順序的哈希索引。具有相同的哈希碼值的記錄放在相同的塊中,因此在哈希記錄中只有樂曲的編碼和片段中第一個(gè)音符在歌曲中的位置,提高了檢索的效率。采用余弦距離旋律匹配算法,從音高差和音長兩方面進(jìn)行旋律匹配,返回查詢結(jié)果,并計(jì)算響應(yīng)時(shí)間。1.2.2 課題研究的
18、價(jià)值哼唱音樂檢索實(shí)現(xiàn)了所唱即所得的音樂檢索方式。檢索方式直接且方便,彌補(bǔ)了人們常用的基于文本音樂檢索方法中文本信息完整的描述音樂豐富多變的內(nèi)容難以及手工生成文本索引費(fèi)時(shí)費(fèi)力的不足。哼唱音樂檢索技術(shù)在internet上音樂查找、音樂數(shù)據(jù)庫的管理、以及人們的生活?yuàn)蕵返确矫娑季哂袕V泛的應(yīng)用前景。2 系統(tǒng)需求分析2.1 需求分析目前幾乎所有音樂網(wǎng)站在為用戶提供音樂文件搜索服務(wù)時(shí)均使用字符檢索方式(以標(biāo)題/作者/歌詞作為關(guān)鍵字)。對(duì)于音樂而言,這種方式事實(shí)上與人的生理與心理特征相違背。人對(duì)音樂最敏感的永遠(yuǎn)是旋律,人們即使忘記了一首歌的歌詞,依然能夠輕松的哼唱出它的主旋律,就是一個(gè)很好的證明。這種最容易讓
19、人產(chǎn)生共鳴的音樂旋律信息理應(yīng)作為另一種檢索條件被服務(wù)器接受并加以利用,無需借助基于標(biāo)題、作者或歌詞關(guān)鍵字而進(jìn)行的檢索,通過旋律一樣可以找出用戶所要求的音樂文件,而且這種方式更直觀,更貼近音樂的本質(zhì)。因此一種基于哼唱的音樂檢索系統(tǒng)成為人們迫切的需要。該系統(tǒng)的主要功能如下:(1) 采用用戶哼唱的內(nèi)容作為關(guān)鍵信息檢索只要使用者通過音頻輸入設(shè)備(如麥克風(fēng))哼唱一段音樂的旋律,計(jì)算機(jī)會(huì)自動(dòng)處理輸入的音樂片段,提取音樂特征后,利用這些特征,使用哈希索引方法,在海量的音樂庫中尋找出用戶需要的目標(biāo)音樂。這種檢索方式的好處顯而易見,它十分符合人們的交互習(xí)慣、拉近了計(jì)算機(jī)與人之間的距離。(2) 無須人工干預(yù)的對(duì)音
20、樂文件進(jìn)行特征提取音樂的特征是用來區(qū)分不同音樂的屬性。例如每一曲音樂的樂譜跟其他音樂的樂譜都不一樣,樂譜就是其音樂特征之一。另外還包括其他類型的特征,如音樂節(jié)奏、音樂的風(fēng)格等等。提取音樂的這些特征是為了與查詢者哼唱的片段進(jìn)行比較,以便將相近、相似的音樂提供給查詢者。因此特征提取是該系統(tǒng)中重要的一環(huán)。本文使用音高差和音長來刻畫旋律特征,該方法既形象又準(zhǔn)確,并且便于進(jìn)行旋律匹配。另外,intemet上的音樂資源十分巨大,由人工來完成這些音樂特征的提取工作量十分巨大,并且不太現(xiàn)實(shí)。而且這些音樂資源的數(shù)量還再快速的增長。因此我們需要計(jì)算機(jī)能代替人工,實(shí)現(xiàn)對(duì)音樂特征的提取。(3) 檢索系統(tǒng)的魯棒性人的哼
21、唱往往帶有很多錯(cuò)誤。首先是人們?cè)诤叱倪^程中音高與歌曲的標(biāo)準(zhǔn)音高常常不一致,一般都會(huì)低于標(biāo)準(zhǔn)音高。其次由于一些人對(duì)音樂的旋律不太熟悉,哼唱的旋律中多了一些原本沒有的音符或是少了一些原本樂曲中包含的音符。另外,也有人對(duì)節(jié)奏把握的不是很好,哼唱的速度高于或者低于樂曲的標(biāo)準(zhǔn)節(jié)奏。這些哼唱中產(chǎn)生的錯(cuò)誤將嚴(yán)重影響系統(tǒng)查詢效率。另外在麥克風(fēng)輸入的過程中也可能存在背景噪音等等干擾。為了減少上述情況對(duì)查詢的影響,系統(tǒng)的各個(gè)環(huán)節(jié)中必須做好相應(yīng)工作,以保證查詢的效率。例如,在麥克風(fēng)信號(hào)采集后,對(duì)音樂信號(hào)進(jìn)行預(yù)處理和基音提取降低輸入環(huán)節(jié)上的干擾。在特征提取中,使用usd形式的音高差,這樣可以有效地避免在哼唱過程的走
22、調(diào)現(xiàn)象。在檢索過程中,建立了哈希索引,匹配過程中采用余弦距離匹配算法。這樣在檢索匹配過程中通過適合的算法來降低查詢者在哼唱中所產(chǎn)生的錯(cuò)誤。因此在系統(tǒng)的各個(gè)部分都要考慮的查詢的魯棒性。(4) 檢索系統(tǒng)的高效性音樂檢索系統(tǒng)的音樂庫是十分龐大的。如果檢索時(shí)匹配時(shí)間比較長則會(huì)讓查詢者感到不適應(yīng)。因此需要檢索速度必須較快。另外還需要有較高的準(zhǔn)確性。絕大部分查詢者通常只愿意瀏覽查詢結(jié)果列表的前幾項(xiàng),如果在前幾項(xiàng)中查不到用戶想要的音樂,使用者將沒有耐性繼續(xù)查下去。因此系統(tǒng)必須考慮的查詢的準(zhǔn)確性。本文對(duì)用戶哼唱的音高差序列按照n_gram算法進(jìn)行切分,產(chǎn)生擴(kuò)充的查詢集合,再以查詢集合中的每個(gè)元素為查找項(xiàng),這樣
23、能夠更準(zhǔn)確的查找與輸入片段相似的歌曲。此外,建立了順序的哈希索引。使具有相同的哈希碼值的記錄放在相同的塊中,因此在哈希記錄中只有樂曲的編碼和片段中第一個(gè)音符在歌曲中的位置,這樣提高了檢索的效率。2.2 可行性研究2.2.1 技術(shù)可行性本系統(tǒng)采用c+為開發(fā)語言、mysqlserver數(shù)據(jù)庫和microsoft visual studio vc+ 6.0運(yùn)行環(huán)境。c+語言具有面向?qū)ο?、與平臺(tái)無關(guān)、安全、穩(wěn)定等優(yōu)良特性,是目前軟件設(shè)計(jì)中極為健壯的編程語言。microsoft visual studio vc+ 6.0支持如:c或c+語言編程,可運(yùn)行在windows操作系統(tǒng)上,性能穩(wěn)定,使用方便,并且
24、提供可視化工具和向?qū)?。系統(tǒng)后臺(tái)數(shù)據(jù)庫采用mysql server 5.0,mysql是一個(gè)多用戶、多線程的sql數(shù)據(jù)庫,是一個(gè)客戶機(jī)/服務(wù)器結(jié)構(gòu)的應(yīng)用,它由一個(gè)服務(wù)器守護(hù)程序mysql和很多不同的客戶程序和庫組成。mysql支持標(biāo)準(zhǔn)的ansi sql語句,支持多種平臺(tái),在unix系統(tǒng)上該軟件支持多線程運(yùn)行方式,從而能獲得相當(dāng)好的性能。對(duì)于windows用戶,它可以在windows nt及xp系統(tǒng)上以系統(tǒng)服務(wù)方式運(yùn)行,或者在windows 95/98系統(tǒng)上以普通進(jìn)程方式運(yùn)行。綜上所述,系統(tǒng)的開發(fā)平臺(tái)已成熟可行。2.2.2 經(jīng)濟(jì)可行性軟件開發(fā)周期一般為23個(gè)月,開發(fā)所需硬件軟件設(shè)施目前大多數(shù)pc機(jī)
25、系統(tǒng)能夠承擔(dān),開發(fā)費(fèi)用不高。目前,大多數(shù)單位都擁有高性能微機(jī)和局域網(wǎng),該軟件系統(tǒng)的安裝、部署、運(yùn)行和維護(hù),都不會(huì)給單位增加太高的費(fèi)用。2.2.3 操作可行性目前,大多數(shù)pc機(jī)和局域網(wǎng)能夠運(yùn)行該系統(tǒng),該系統(tǒng)的安裝、調(diào)試、運(yùn)行不會(huì)改變?cè)?jì)算機(jī)系統(tǒng)的設(shè)置和網(wǎng)絡(luò)的布局,并且大多數(shù)用戶幾乎不用做任何培訓(xùn)都能夠方便操作的軟件。2.3 目前可選擇的技術(shù)目前有許多軟件開發(fā)人員都開發(fā)了類似的系統(tǒng),所選擇的技術(shù)都各有不同。數(shù)據(jù)庫技術(shù)方面:可以采用mysqlserver、access、db2、oracle等;應(yīng)用模式方面:可以采用b/s模式、c/s模式、b/s+c/s混合模式;開發(fā)工具方面:可以采用c語言、c+、c
26、#、java等。這些技術(shù)都有這各自的優(yōu)點(diǎn)和缺點(diǎn),通過不同的技術(shù)的選擇搭配,所開發(fā)出來的系統(tǒng)的效果也不同。但是根據(jù)該系統(tǒng)的經(jīng)濟(jì)可行性和操作可行性,本文選擇了使用c+開發(fā)語言和mysqlserver數(shù)據(jù)庫。2.4 技術(shù)開發(fā)工具概述2.4.1 c+開發(fā)語言概述c+語言是一種應(yīng)用較廣的面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,使用它可以實(shí)現(xiàn)面向?qū)ο蟮某绦蛟O(shè)計(jì)。面向?qū)ο蟮脑O(shè)計(jì)與面向過程的設(shè)計(jì)是有很大區(qū)別的,面向?qū)ο蟮某绦蛟O(shè)計(jì)是在面向過程的程序設(shè)計(jì)的基礎(chǔ)上一個(gè)質(zhì)的飛躍。下面簡單的介紹一下c+對(duì)面向?qū)ο蟪绦蛟O(shè)計(jì)方法的支持和實(shí)現(xiàn)。 支持?jǐn)?shù)據(jù)封裝就是支持?jǐn)?shù)據(jù)抽象。在c+中,類是支持?jǐn)?shù)據(jù)封裝的工具,對(duì)象則是數(shù)據(jù)封裝的實(shí)現(xiàn)。面向過程
27、的程序設(shè)計(jì)方法與面向?qū)ο蟮某绦蛟O(shè)計(jì)方法在對(duì)待數(shù)據(jù)和函數(shù)關(guān)系上是不同的,在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,將數(shù)據(jù)和對(duì)該數(shù)據(jù)進(jìn)行合法操作的函數(shù)封裝在一起作為一個(gè)類的定義,數(shù)據(jù)將被隱藏在封裝體中,該封裝體通過操作接口與外界交換信息。對(duì)象被說明具有一個(gè)給定類的變量,類類似于c語言中的結(jié)構(gòu),在c語言中可以定義結(jié)構(gòu),但這種結(jié)構(gòu)中包含數(shù)據(jù),而不包含函數(shù)。c+中的類是數(shù)據(jù)和函數(shù)的封裝體。在c+中,結(jié)構(gòu)可作為一種非凡的類,它雖然可以包含函數(shù),但是它沒有私有或保護(hù)的成員。類中的私有成員一般是不答應(yīng)該類外面的任何函數(shù)訪問的,但是友元函數(shù)便可打破這條禁令,它可以訪問該類的私有成員(包含數(shù)據(jù)成員和成員函數(shù))。友元可以是在類外定義
28、的函數(shù),也可以是在類外定義的整個(gè)類,前者稱友元函數(shù),后者稱為友元類。友元打破了類的封裝性,它是c+另一個(gè)面向?qū)ο蟮闹匾浴?c+支持多態(tài)性,c+答應(yīng)一個(gè)相同的標(biāo)識(shí)符或運(yùn)算符代表多個(gè)不同實(shí)現(xiàn)的函數(shù),這就稱標(biāo)識(shí)符或運(yùn)算符的重載,用戶可以根據(jù)需要定義標(biāo)識(shí)符重載或運(yùn)算符重載。 c+中可以答應(yīng)單繼續(xù)和多繼續(xù)。一個(gè)類可以根據(jù)需要生成派生類。派生類繼承了基類的所有方法,另外派生類自身還可以定義所需要的不包含在父類中的新方法。一個(gè)子類的每個(gè)對(duì)象包含有從父類那里繼承來的數(shù)據(jù)成員以及自己所特有的數(shù)據(jù)成員。c+中可以定義虛函數(shù),通過定義虛函數(shù)來支持動(dòng)態(tài)聯(lián)編。 綜上所述,c+特點(diǎn)為封裝性,繼承性,多態(tài)性。封裝是把數(shù)據(jù)
29、與操作結(jié)合成一體,使程序結(jié)構(gòu)更加緊湊,同時(shí)避免了數(shù)據(jù)紊亂帶來的調(diào)試與維護(hù)困難;繼承增強(qiáng)了軟件的可擴(kuò)充性 ,并為代碼重用提供了強(qiáng)有力的手段;多態(tài)性使程序員在設(shè)計(jì)程序時(shí),對(duì)問題進(jìn)行更好的抽象,以設(shè)計(jì)出重用性和維護(hù)性具佳期的程序。因此,本次設(shè)計(jì)選擇c+為開發(fā)語言。2.4.2 mysqlserver數(shù)據(jù)庫mysql是一個(gè)小型關(guān)系型數(shù)據(jù)庫管理系統(tǒng),開發(fā)者為瑞典mysql ab公司。在2008年1月16號(hào)被sun公司收購。目前mysql被廣泛地應(yīng)用在internet上的中小型網(wǎng)站中。由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點(diǎn),許多中小型網(wǎng)站為了降低網(wǎng)站總體擁有成本而選擇了mysql作為網(wǎng)
30、站數(shù)據(jù)庫。mysqlserver的特性:(1) 支持aix、freebsd、hp-ux、linux、mac os、novell netware、openbsd、os/2 wrap、solaris、windows等多種操作系統(tǒng); (2) 為多種編程語言提供了api。這些編程語言包括c、c+、eiffel、java、perl、php、python、ruby和tcl等; (3) 支持多線程,充分利用cpu資源;(4) 優(yōu)化的sql查詢算法,有效地提高查詢速度;(5) 既能夠作為一個(gè)單獨(dú)的應(yīng)用程序應(yīng)用在客戶端服務(wù)器網(wǎng)絡(luò)環(huán)境中,也能夠作為一個(gè)庫而嵌入到其他的軟件中提供多語言支持,常見的編碼如中文的gb
31、2312、big5,日文的shift_jis等都可以用作數(shù)據(jù)表名和數(shù)據(jù)列名;(6) 提供tcp/ip、odbc和jdbc等多種數(shù)據(jù)庫連接途徑;(7) 提供用于管理、檢查、優(yōu)化數(shù)據(jù)庫操作的管理工具;(8) 可以處理擁有上千萬條記錄的大型數(shù)據(jù)庫;(9) 使用c和c+編寫,并使用了多種編譯器進(jìn)行測(cè)試,保證源代碼的可移植性。3 系統(tǒng)概要設(shè)計(jì)3.1 系統(tǒng)總體設(shè)計(jì)思想根據(jù)需求分析的要求,總體設(shè)計(jì)是建立wav音樂特征庫、根據(jù)哈希算法建立哈希索引表、記錄用戶哼唱的音樂片段、對(duì)輸入的音樂片段進(jìn)行特征提取、按照n_gram算法擴(kuò)充查詢集合、利用余弦距離匹配算法進(jìn)行匹配、計(jì)算檢索時(shí)間和將檢索結(jié)果反饋給用戶。(1)
32、wav音樂特征庫該模塊首先對(duì)wav音樂文件格式進(jìn)行分析。其次,根據(jù)wav格式特征,從音高差和音長兩方面提取音樂旋律特征。最后,將提取的音樂特征存儲(chǔ)到數(shù)據(jù)庫中。(2) 建立哈希索引表為了提高系統(tǒng)檢索速度,對(duì)wav音樂特征庫中的歌曲建立整數(shù)哈希索引。對(duì)每首歌曲的音高差usd序列和音長lrs都按照哈希算法,將歌曲的id號(hào)和該片段的起始位置保存到哈希索引表中,便于用戶檢索。(3) 哼唱音樂的記錄和特征提取在該模塊中包括音樂信號(hào)預(yù)處理、音樂信號(hào)基音提取、基音提取后處理、音符切分、特征參數(shù)計(jì)算,并將處理后的數(shù)據(jù)存入數(shù)據(jù)中待檢索時(shí)調(diào)用。(4) n_gram算法對(duì)用戶哼唱的片段進(jìn)行特征提取之后,要對(duì)音高差序列
33、再進(jìn)行切分,本文中采用的滑動(dòng)窗口的大小是3,切分后得到的新查詢集合中將有m-n+1個(gè)usd片段,其中m為原usd片段的長度,這樣擴(kuò)大查詢集合,即所有可能的片段都進(jìn)行檢索和匹配,提高了系統(tǒng)的準(zhǔn)確性。(5) 余弦匹配算法最后采用余弦距離的匹配算法,從音高差和音長兩方面進(jìn)行匹配,得到的余弦值是在0到1之間的小數(shù),余弦值越接近于1,就說明匹配度越高。匹配后,將余弦值最大的三首歌曲的相關(guān)信息反饋給用戶。音樂哼唱檢索的主要框架設(shè)計(jì)如圖3.1所示:圖3.1 音樂哼唱檢索總體功能圖3.2 系統(tǒng)用例圖用例圖從用戶的角度描述系統(tǒng)功能,并指出各個(gè)功能的角色。本次設(shè)計(jì)中可以分為兩大模塊,一個(gè)是用戶哼唱處理功能模塊,另
34、一個(gè)是wav特征數(shù)據(jù)庫建立模塊。用戶哼唱處理功能模塊中,包括音樂文件記錄、音樂片段特征提取、n_gram算法擴(kuò)充查詢集合、哈希索引等幾部分功能。用戶哼唱處理模塊頂層的用例圖如圖3.2所示。圖3.2 用戶哼唱處理用例圖在提取音樂片段特征中,又包括音樂信號(hào)預(yù)處理、音樂信號(hào)基音提取、基音提取后處理、音符切分、特征參數(shù)計(jì)算等功能。音樂片段特征提取的用例圖如圖3.2所示。圖3.3 音樂片段特征提取的用例圖wav特征數(shù)據(jù)庫建立模塊中包括wav音樂特征庫。該模塊首先對(duì)wav音樂文件格式進(jìn)行分析。其次,根據(jù)wav格式特征,從音高差和音長兩方面提取音樂旋律特征。最后,將提取的音樂特征存儲(chǔ)到數(shù)據(jù)庫中。wav特征數(shù)
35、據(jù)庫用例圖如圖3.3所示。圖3.4 wav特征數(shù)據(jù)庫的用例圖為了進(jìn)一步闡述執(zhí)行者與用例的關(guān)系,還應(yīng)畫出相應(yīng)的執(zhí)行者描述模板及用例描述模板。角色描述模板如圖3.5所示。圖3.5 角色描述模板3.3 數(shù)據(jù)庫邏輯設(shè)計(jì)對(duì)于音樂哼唱檢索系統(tǒng)而言,數(shù)據(jù)庫的設(shè)計(jì)很重要,數(shù)據(jù)庫的選擇上尤為重要,因?yàn)樵撓到y(tǒng)要面對(duì)海量的音樂信息,選擇良好的數(shù)據(jù)庫以及設(shè)計(jì)方法,對(duì)于音樂檢索和系統(tǒng)實(shí)現(xiàn)都有積極地作用。3.3.1 數(shù)據(jù)庫設(shè)計(jì)方法簡述十余年來,人們努力探索,提出了各種數(shù)據(jù)庫設(shè)計(jì)方法,這些方法運(yùn)用軟件工程的思想和方法,提出了各種設(shè)計(jì)準(zhǔn)則和規(guī)程,都屬于規(guī)范設(shè)計(jì)方法。規(guī)范設(shè)計(jì)方法中比較著名的有新奧爾良方法。它將數(shù)據(jù)庫設(shè)計(jì)分為四
36、個(gè)階段:需求分析(分析用戶要求)、概念設(shè)計(jì)(信息分析和定義)、邏輯設(shè)計(jì)(設(shè)計(jì)實(shí)現(xiàn))和物理設(shè)計(jì)(物理數(shù)據(jù)庫設(shè)計(jì))?;趀-r模型的數(shù)據(jù)庫設(shè)計(jì)方法,基于3nf(第三范式)的設(shè)計(jì)方法,基于抽象語法規(guī)范的設(shè)計(jì)方法等,是在數(shù)據(jù)庫設(shè)計(jì)的不同階段上支持實(shí)現(xiàn)的具體技術(shù)和方法。規(guī)范設(shè)計(jì)法從本質(zhì)上看仍然是手工設(shè)計(jì)方法,其基本思想是過程迭代和逐步求精。3.3.2 概念模型設(shè)計(jì)e-r圖主要作用顯示各個(gè)實(shí)體的屬性以及實(shí)體之間關(guān)系。本系統(tǒng)中主要的實(shí)體有用戶哼唱音樂片段,音高差庫,音長庫,歌曲庫,音高差檢索結(jié)果集,音長檢索結(jié)果集,音長索引表,音高差索引表,索引結(jié)果集。圖3.6 系統(tǒng)主要e-r圖3.3.3 數(shù)據(jù)庫的關(guān)系模型設(shè)
37、計(jì)本系統(tǒng)中主要的關(guān)系模型設(shè)計(jì)及屬性如下:(1) 用戶哼唱音樂片段(自增id,音高差,音長);圖3.7 用戶哼唱音樂片段及其屬性圖(2) 音高差庫(歌曲id號(hào),音高差,音高差序列長度);圖3.8 音高差庫及其屬性圖(3) 音長庫(歌曲id號(hào),音長);圖3.9 音長庫及其屬性圖(4) 歌曲庫(歌曲id號(hào),歌曲名稱,歌手,專輯);圖3.10 歌曲庫及其屬性圖(5) 音高差檢索結(jié)果集(歌曲id號(hào),歌曲名稱,歌手,專輯,檢索時(shí)間)圖3.11 音高差檢索結(jié)果集及其屬性圖(6) 音高差索引表(關(guān)鍵字,歌曲id,音高差片段位置)圖3.12 音高差索引表及其屬性圖4 系統(tǒng)詳細(xì)設(shè)計(jì)及實(shí)現(xiàn)4.1 系統(tǒng)數(shù)據(jù)庫詳細(xì)設(shè)計(jì)
38、數(shù)據(jù)庫的設(shè)計(jì)是系統(tǒng)進(jìn)行詳細(xì)設(shè)計(jì)的開始,它是系統(tǒng)的后臺(tái)設(shè)計(jì)部分,用來存儲(chǔ)信息以供前臺(tái)調(diào)用和輸出。數(shù)據(jù)庫設(shè)計(jì)的是否合理將直接影響到系統(tǒng)的穩(wěn)定性、安全性及可維護(hù)性,同時(shí)也會(huì)給后期的編碼工作帶來諸多不便。在進(jìn)行了需求分析和概要設(shè)計(jì)后,接下來將詳細(xì)介紹系統(tǒng)中各部分信息的存儲(chǔ)方式。本系統(tǒng)設(shè)db為數(shù)據(jù)庫名。4.1.1 用戶哼唱片段信息表用戶哼唱的音樂片段是以wav格式存儲(chǔ)的,在對(duì)輸入的音樂信號(hào)進(jìn)行處理后,要提取音樂特征,分別為音高差和音長序列,因此為方便以后的數(shù)據(jù)處理,用戶哼唱片段信息表的設(shè)計(jì)入表4-1。表4.1 用戶哼唱音樂片段表 one_resouce字段名數(shù)據(jù)類型長度描述idint10自增idaltu
39、ratext音高差序列l(wèi)engthint10音高差序列長度duraciontext音長序列l(wèi)ength2int10音長序列長度4.1.2 wav特征庫設(shè)計(jì)wav文件作為多媒體中使用的聲波文件格式之一,它是以riff格式為標(biāo)準(zhǔn)的,只要了解了文件的格式,就可以方便的將所需要的旋律特征提取出來。從編程的角度來看,其處理過程并不復(fù)雜,處理的速度更快,占用系統(tǒng)的資源也更少,是最方便、最容易實(shí)現(xiàn)的。因此在wav特征庫中設(shè)計(jì)了音高差表、音長表、歌曲表。(1) 音高差表altura用來存放從音樂文件中提取出來的音高差序列。表4.2 音高差表 altura字段名數(shù)據(jù)類型長度描述idint10歌曲id號(hào)conte
40、xttext音高差序列l(wèi)engthint10音高差序列的長度(2) 音長表duracion用來存儲(chǔ)從音樂文件中提取出來的音長序列。表4.3 音長表 duracion字段名數(shù)據(jù)類型長度描述idint10歌曲id號(hào)timetext音長序列rightansint4正確答案(3) 歌曲表中記錄了所有歌曲的信息,為音樂檢索提供海量的數(shù)據(jù)。表4.4 歌曲表songs字段名數(shù)據(jù)類型長度描述idint10歌曲id號(hào)namevarchar45歌曲名稱singervarchar45歌手姓名albumvarchar45歌曲所在專輯4.1.3 索引表由于本次設(shè)計(jì)中的數(shù)據(jù)量較大,因此在設(shè)計(jì)哈希表時(shí)如果采用定義數(shù)據(jù)結(jié)構(gòu)來
41、存儲(chǔ)哈希值,那么會(huì)占用大量的內(nèi)存空間,影響程序的運(yùn)行速度,因此在數(shù)據(jù)庫中設(shè)計(jì)了音高差和音長索引表,這樣有效地節(jié)省了內(nèi)存空間和提高了系統(tǒng)運(yùn)行效率。另外哈希表的長度選擇29,因?yàn)閡sd三個(gè)字符的所有組合有27種可能,選擇29方便線性處理沖突。表4.5 音高差索引表 alturaindex字段名數(shù)據(jù)類型長度描述keyint10關(guān)鍵字大?。?-29)songidtext當(dāng)前音高差片段所在歌曲的id號(hào)positiontext當(dāng)前音高差片段在整首歌曲的音高差片段中的位置表4.6 音高長索引表 duracionindex字段名數(shù)據(jù)類型長度描述keyint10關(guān)鍵字大?。?-29)songidtext當(dāng)前音長
42、片段所在歌曲的id號(hào)positiontext當(dāng)前音長片段在整首歌曲的音長片段中的位置4.1.4 檢索結(jié)果集本次設(shè)計(jì)中要求根據(jù)音高差檢索時(shí),要將相似度最高的前三首歌的信息反饋給用戶,當(dāng)根據(jù)音長檢索時(shí),要將匹配度最高的前十首歌曲的信息反饋給用戶,因此檢索結(jié)果集中分為音高差檢索結(jié)果表和音長檢索結(jié)果表。(1) 音高差檢索結(jié)果表:表4.7 音高差檢索結(jié)果表 resultaltura字段名數(shù)據(jù)類型長度描述idint10歌曲id號(hào)namevarchar45歌曲名稱singervarchar45歌手姓名albumvarchar45歌曲所在專輯timefloat檢索時(shí)間(2) 音長檢索結(jié)果表表4.8 音長檢索結(jié)
43、果表 resultduracion字段名數(shù)據(jù)類型長度描述idint10歌曲id號(hào)namevarchar45歌曲名稱singervarchar45歌手姓名albumvarchar45歌曲所在專輯timefloat檢索時(shí)間4.2 系統(tǒng)功能詳細(xì)設(shè)計(jì)在上一章中對(duì)哼唱檢索系統(tǒng)的各個(gè)功能模塊的設(shè)計(jì)進(jìn)行了初步的介紹,接下來這一節(jié)將要對(duì)各個(gè)功能模塊的具體實(shí)現(xiàn)和設(shè)計(jì)過程中所采用的處理方法及所使用的各種相關(guān)技術(shù)展開詳細(xì)的介紹。4.2.1 wav特征提取(1) 細(xì)化音樂旋律輪廓特征旋律的變化是指相鄰音符的音高和音長變化。研究指出,人們很難準(zhǔn)確的把握每個(gè)音符的音高和持續(xù)時(shí)間,但是對(duì)音高和音長的變化卻能準(zhǔn)確的哼唱出來。
44、然而許多研究中將相鄰音符音高和音長的變化分為u、s、d三種情況,u代表后一個(gè)音比前一個(gè)音高,s代表后一個(gè)音與前一個(gè)音高相同,d代表后一個(gè)音比前一個(gè)音低,音長的描述和音高差相類似。通過對(duì)midi音樂進(jìn)行統(tǒng)計(jì),相鄰音符的音階差大多在2,21之間,音長比大約在 0.8ms,1.2ms之間。3級(jí)輪廓圖既能夠清楚的區(qū)分旋律的變化又避免了返回過多的檢索結(jié)果,取得了比較理想的效果。(2) 采用“音符起點(diǎn)一音符終點(diǎn)”的音長計(jì)算方式“音符起點(diǎn)一音符終點(diǎn)”是指從一個(gè)音符的起始時(shí)刻到音符的結(jié)束時(shí)刻之間的間隔。實(shí)驗(yàn)中發(fā)現(xiàn):人們?cè)诤叱臅r(shí)候,對(duì)于每個(gè)音符的開始時(shí)間把握的很好。而且,當(dāng)節(jié)奏比較慢或者某些音符比較長時(shí),哼唱
45、者并沒有耐心去唱完整個(gè)音符,經(jīng)常會(huì)提前結(jié)束。首先對(duì)旋律文件進(jìn)行分幀處理,每幀時(shí)間長度去20ms,當(dāng)一個(gè)幀的平均能量超過輸入音頻信號(hào)幀平均平方根能量的50%時(shí),認(rèn)為該幀是一個(gè)音符的起點(diǎn),當(dāng)一個(gè)幀的能量低于輸入音頻信號(hào)幀平均平方根能量的30%時(shí),并持續(xù)時(shí)間超過60ms,就認(rèn)為該幀是一個(gè)音符的終點(diǎn)。因此,系統(tǒng)將“音符起點(diǎn)一音符終點(diǎn)”作為每個(gè)音符的長度,大大提高了檢索的準(zhǔn)確程度。(3) 特征提取信號(hào)預(yù)處理 對(duì)于midi等不包含真實(shí)聲音數(shù)據(jù)的音樂文件,可以將其中的內(nèi)容當(dāng)作字符串來處理。但是wav、mp3等格式的音樂文件存儲(chǔ)的是真實(shí)的聲音數(shù)據(jù),必須對(duì)其進(jìn)行音樂信號(hào)分析,進(jìn)而提取特征并進(jìn)行相應(yīng)的處理。在按幀
46、進(jìn)行音樂信號(hào)分析、提取音樂信號(hào)參數(shù)之前,有一些經(jīng)常使用的、共同的短時(shí)分析處理需要預(yù)先進(jìn)行,如音樂信號(hào)的加窗分幀、濾波去噪、預(yù)加重等處理。在實(shí)際中,加窗分幀采用連續(xù)分段和漢明窗函數(shù)時(shí)較好的方法,考慮到在基音周期提取時(shí),窗長應(yīng)大于兩個(gè)基音周期才能正確的提取出基音,所以系統(tǒng)的幀長選擇20ms。帶通濾波器可以減少噪音,起到濾波去噪的功效。但是由于本次設(shè)計(jì)的時(shí)間局限,因此只采用了加窗分幀的預(yù)處理方法?;籼崛?自相關(guān)函數(shù)是對(duì)信號(hào)進(jìn)行短時(shí)相關(guān)分析時(shí)最常用到的特征函數(shù)。假設(shè)音樂信號(hào)經(jīng)過幀長為n的窗口截取為一段加窗信號(hào),則的自相關(guān)函數(shù)為:= (4.1)其中k=(-n+1)(n-1)。由于信號(hào)的自相關(guān)函數(shù)在基音
47、周期的整數(shù)倍位置上會(huì)出現(xiàn)峰值,因此可通過檢測(cè)峰值的位置來提取基音周期,再取倒數(shù)就得到了最終的基音。當(dāng)對(duì)音樂信號(hào)的每一幀信號(hào)提取基音后,可形成基音串,而基音串值的變化可對(duì)應(yīng)音調(diào)的變化。在此基礎(chǔ)上可提取音樂的內(nèi)容特征如音高變化和音長變化等,并進(jìn)行檢索。自相關(guān)函數(shù)如圖4.1所示。圖4.1 自相關(guān)函數(shù)流程圖 基音提取后處理當(dāng)用戶通過麥克風(fēng)或手機(jī)哼唱一段音樂旋律時(shí),所得到的聲音波形不可避免的會(huì)摻雜有各種噪聲,同時(shí)用戶的哼唱并不一定連續(xù)、流暢,所以在波形的各個(gè)部分都很有可能出現(xiàn)無聲段或噪聲段。而這些無聲段和噪聲段中提取出的基音周期顯然不是我們想要的結(jié)果,會(huì)對(duì)后面的旋律匹配產(chǎn)生很大的于擾。因此,基音提取后處
48、理的任務(wù)就是要去除無聲段和噪聲段的基音曲線。具體方法是,使用能量檢測(cè)來區(qū)分無聲段,使用過零率和基音來區(qū)分噪聲段。聲音波形的振幅大小說明了聲音的強(qiáng)度,在數(shù)字信號(hào)處理中用能量來表示。無聲時(shí)波形的振幅理論上應(yīng)該是零,但實(shí)際上受到各種內(nèi)部和外部噪聲的影響,有時(shí)會(huì)有比較小的振幅出現(xiàn),而有聲時(shí)的波形振幅就要大得多,因此可以通過聲音波形振幅的大小來判斷有聲和無聲的情況,系統(tǒng)是采用短時(shí)能量來進(jìn)行能量檢測(cè)的。首先對(duì)旋律文件進(jìn)行分幀,每幀的時(shí)間長度取20ms,求每一幀的評(píng)價(jià)能量x,計(jì)算平均平方根能量。當(dāng)一個(gè)幀的平均能量超過輸入音頻信號(hào)幀平均平方根能量的50%時(shí),認(rèn)為該幀是一個(gè)音符的開始,當(dāng)一個(gè)幀的能量低于輸入音頻
49、信號(hào)幀平均平方根能量的30%時(shí),并持續(xù)時(shí)間超過60ms,就認(rèn)為該幀是一個(gè)音符的結(jié)束。過零率是指在單位時(shí)間內(nèi)信號(hào)跨越零值的次數(shù),也就是信號(hào)符號(hào)改變的次數(shù),是對(duì)信號(hào)頻率的一種簡單度量。對(duì)于窄帶信號(hào),如單一正弦波而言,其過零率是比較精確的,為信號(hào)頻率的兩倍。對(duì)于一個(gè)聲音波形來說,如果頻率越高,那么其過零率也越高;頻率越低,則過零率也越低。對(duì)于人所發(fā)出的聲音頻率,一般合理的范圍在8731hz和784hz之間 ,在此范圍之外的波形就可以作為噪聲過濾掉。在實(shí)際使用中,系統(tǒng)采用短時(shí)過零率,即一個(gè)短時(shí)幀內(nèi)信號(hào)的過零率來去除噪聲.中值平滑濾波是一種能有效抑止聲音波形中非典型點(diǎn)的信號(hào)處理技術(shù)。由于本次設(shè)計(jì)中的處理
50、有限,因此沒有進(jìn)行此步處理。 音符切分 去除了噪聲、無聲和非典型點(diǎn)的波形文件切分為一個(gè)個(gè)usd的片段,每個(gè)片段包含一個(gè)獨(dú)立、完整的音符信息。聲音波形的切分信息在聲音波形預(yù)處理的能量檢測(cè)階段就可以得到,在判斷有聲和無聲的同時(shí),相應(yīng)的音符切分位置也就可以確定了。 特征參數(shù)計(jì)算 有了聲音波形的切分信息后,就可以從中計(jì)算出旋律特征了。音符的頻率就是音高,同一音高的長度就是音長。只要比較相鄰音符的過零率就可以獲得相對(duì)音高差序列。音長的獲得只要根據(jù)音符的切分就可以了。綜合考慮到用戶的廣泛性和不同用戶哼唱的習(xí)慣和哼唱能力,系統(tǒng)最終采用了(音高差、音長比)的二維特征。計(jì)算特征參數(shù)后,就完成了從用戶哼唱音樂片段
51、中提取旋律特征的工作。圖4.2 wav音樂文件特征提取流程圖4.2.2 哼唱音樂的記錄和特征提取將哼唱的內(nèi)容采集并存儲(chǔ)到系統(tǒng)中,可以由系統(tǒng)自帶的錄音程序完成,最終以wav格式將錄制的哼唱內(nèi)容保存到相應(yīng)的文件中。從保存的文件中提取特征與wav特征庫的提取的方法和步驟相同。4.2.3 查詢擴(kuò)展在獲取哼唱音樂特征后,如果直接進(jìn)行匹配,只能是進(jìn)行精確匹配,那么若輸入有誤的話,就會(huì)匹配失敗,因此大大降低了匹配的準(zhǔn)確度。最終,本次設(shè)計(jì)按照滑動(dòng)窗口方法進(jìn)行n_gram切分的查詢擴(kuò)展方法。本次提出的方法是將用戶查詢片段的旋律輪廓按照滑動(dòng)窗口方法,進(jìn)行n_gram切分,每次右移一個(gè)usd音符,假設(shè)一個(gè)usd序列
52、的長度為m,則查詢后所生成的分片數(shù)為m-(n-1)=m-n+1.本次設(shè)計(jì)中設(shè)n為3。設(shè)查詢目標(biāo)的usd序列為dddsududud,則進(jìn)行n-gram切分后的片段為:ddd dds dsu sud udu dud udu dud。擴(kuò)充查詢集合后,以集合中的每個(gè)查找項(xiàng)作為新的查找項(xiàng),查找哈希索引。n-gram方法的實(shí)現(xiàn)如圖4.2所示。圖4.3 n_gram算法流程圖4.2.4 哈希索引為提高查詢效率,對(duì)旋律輪廓按照n_gram方法切分后,建立了順序的哈希索引。對(duì)每一段旋律片段取其音高差和音長的旋律輪廓作為索引項(xiàng),與歌曲id號(hào)和片段中第一個(gè)音符在歌曲的位置共同組成數(shù)據(jù)記錄,建立哈希索引。系統(tǒng)中的哈希
53、表中,具有相同的哈希值的記錄放在相同的塊中,因此哈希記錄中只有歌曲的id號(hào)和片段中第一個(gè)音符在歌曲中的位置。由于哈希表是一首一首建立的,之后沒有更新操作,因此在哈希表的數(shù)據(jù)是有序的。這在索引查找后的處理時(shí),可以大大提高效率,哈希算法的實(shí)現(xiàn)如圖4.3。圖4.4 哈希索引實(shí)現(xiàn)流程圖4.2.5 余弦匹配算法余弦距離是目前被廣泛應(yīng)用的向量相關(guān)性比較的主要手段,基于“余弦距離”的旋律匹配算法在目前的旋律匹配算法中得到了廣泛的應(yīng)用,這種算法將與用戶哼唱與存儲(chǔ)在數(shù)據(jù)庫中的樂曲片段看作是兩個(gè)待比較的向量,通過“余弦距離”的計(jì)算,比較兩段旋律向量的相似程度,余弦距離越接近1,說明旋律片段更接近,具體實(shí)現(xiàn)如圖4.
54、4。若用戶輸入的片段旋律特征作為一個(gè)向量,經(jīng)過檢索后的數(shù)據(jù)向量為,則余弦距離公式為: (4.2)圖4.5 余弦匹配算法實(shí)現(xiàn)流程圖4.2.6 系統(tǒng)響應(yīng)時(shí)間的計(jì)算響應(yīng)時(shí)間的計(jì)算,可以利用windows api中的函數(shù)直接獲得系統(tǒng)當(dāng)前時(shí)間,時(shí)間可以精確到毫秒級(jí)。在用戶輸入結(jié)束后,獲得一次系統(tǒng)時(shí)間,并保存,當(dāng)檢索匹配結(jié)束后,再獲得一次系統(tǒng)時(shí)間,兩次時(shí)間差即為響應(yīng)時(shí)間。獲得系統(tǒng)時(shí)間的函數(shù)如下:#include systemtime getsystemtime( void ) systemtime sys; /定義系統(tǒng)時(shí)間對(duì)象getlocaltime( &sys ); /獲得本地時(shí)間return sys;
55、 5 系統(tǒng)的調(diào)試與測(cè)試5.1 系統(tǒng)的調(diào)試系統(tǒng)的調(diào)試與驗(yàn)證,是系統(tǒng)編碼完成之后所進(jìn)行的最后一步操作,通過本步的操作可以測(cè)試系統(tǒng)所實(shí)現(xiàn)的功能是否齊全,系統(tǒng)的運(yùn)行是否穩(wěn)定,運(yùn)行過程中是否會(huì)出現(xiàn)異常的結(jié)果。下面將系統(tǒng)設(shè)計(jì)中的主要功能測(cè)試進(jìn)行說明。在整個(gè)系統(tǒng)實(shí)現(xiàn)的過程中,遇到了很多需要解決的問題。在程序開發(fā)的初步階段,對(duì)于題目中的一些算法還不是很了解,編程環(huán)境的使用也不夠熟練,因此在初期的程序設(shè)計(jì)中,遇到了很多問題。以下是編碼調(diào)試時(shí)遇到的一些問題以及問題的解決方法: (1) 在開始設(shè)計(jì)中,對(duì)于哼唱音樂沒有進(jìn)行任何預(yù)處理,就直接進(jìn)行提取,經(jīng)過對(duì)比后發(fā)現(xiàn),特征描述不夠準(zhǔn)確,于是在提取特征之前,對(duì)音信號(hào)首先進(jìn)行了預(yù)處理,并且在輸入過程中,盡量避免不必要的噪音。(2) 設(shè)計(jì)中使用了mysql server數(shù)據(jù)庫,開始的時(shí)候,vc+環(huán)境無法與數(shù)據(jù)庫相連接,查閱資料之后,發(fā)現(xiàn)要在編程環(huán)境中使用數(shù)據(jù)庫,要設(shè)置一些環(huán)境變量并且要將mysql的頭文件放在vc+的運(yùn)行路徑下。(3) 對(duì)sql語句有一些了解,但是在vc+環(huán)境中執(zhí)行sql語句,要進(jìn)行一些變化,于是就對(duì)mysql中的類進(jìn)行了深入了解,最終得出要在c+中執(zhí)行sql語句,并對(duì)數(shù)據(jù)庫進(jìn)行跟新,一定要將sql的內(nèi)容進(jìn)行提交。(4) 起初,設(shè)計(jì)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 故宮模板課件教學(xué)課件
- 街心廣場(chǎng)課件教學(xué)課件
- 2024年度批量貨物搬運(yùn)與運(yùn)輸合同
- 2024年度某大型工程建設(shè)項(xiàng)目施工合同
- 2024年人工智能研究員全職合同
- 2024國際許可合同的格式國際許可合同的種類
- 2024年廣告牌更新改造施工合同
- 2024規(guī)范的辦公室裝修合同范本
- 2024店面租房合同范本下載
- 2024年店面租賃升級(jí)協(xié)議
- 租地種香蕉合同
- 舊市場(chǎng)提升改造方案
- 統(tǒng)編版 七年級(jí)上冊(cè)(2024修訂) 第四單元 13 紀(jì)念白求恩 課件
- 外匯兌換居間勞務(wù)協(xié)議
- 少兒趣味編程Scratch綜合實(shí)戰(zhàn)《小車巡線》教學(xué)設(shè)計(jì)
- 第4課《公民的基本權(quán)利和義務(wù)》(課件)-部編版道德與法治六年級(jí)上冊(cè)
- 國開(甘肅)2024年春《地域文化(專)》形考任務(wù)1-4終考答案
- 檔案整理及數(shù)字化服務(wù)方案(技術(shù)標(biāo) )
- 村紀(jì)檢監(jiān)督小組工作職責(zé)
- 《宏觀經(jīng)濟(jì)學(xué)乘數(shù)論》PPT課件.ppt
- 警務(wù)監(jiān)督員表態(tài)發(fā)言(共4篇)
評(píng)論
0/150
提交評(píng)論