一種構(gòu)建在線實(shí)時(shí)更新海量音頻指紋庫(kù)的方法和設(shè)備的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及音頻指紋識(shí)別技術(shù)領(lǐng)域,具體涉及一種構(gòu)建在線實(shí)時(shí)更新海量音頻指紋庫(kù)的方法和設(shè)備。
【背景技術(shù)】
[0002]音頻指紋識(shí)別(俗稱“聽(tīng)音識(shí)曲”)是一種新興的音樂(lè)搜索技術(shù),該技術(shù)通過(guò)分析音頻文件的頻譜,提取稱為“音頻指紋”的數(shù)字特征,并使用數(shù)字特征構(gòu)建“海量音頻指紋庫(kù)”,部署于網(wǎng)絡(luò)服務(wù)器上,客戶端可將錄制的未知音頻片段發(fā)送到服務(wù)器,服務(wù)器使用相同的算法提取“音頻指紋”,然后通過(guò)搜索算法在海量音頻指紋庫(kù)中查找相似特征,并根據(jù)找到的若干特征推測(cè)目標(biāo)音頻文件,將結(jié)果返回給客戶端即完成了整個(gè)識(shí)別過(guò)程。音頻指紋識(shí)別是一種兼具數(shù)據(jù)密集型和計(jì)算密集型的應(yīng)用:海量音頻指紋庫(kù)必須包含足夠多的音頻文件的特征,才能保證應(yīng)用的識(shí)別率,該規(guī)模通常為千萬(wàn)級(jí);搜索算法的計(jì)算量巨大,為了保證搜索速度,通常首先離線構(gòu)建指紋庫(kù),并進(jìn)行序列化處理生成一個(gè)文件,以使數(shù)據(jù)連續(xù)存儲(chǔ),避免過(guò)多指針跳轉(zhuǎn)操作,然后將索引文件完全加載到內(nèi)存中提供檢索服務(wù)。
[0003]現(xiàn)有技術(shù)中海量音頻指紋庫(kù)的更新方法,由于索引數(shù)據(jù)連續(xù)存儲(chǔ)在一塊內(nèi)存中,通常的解決方案很難支持在線添加、刪除音頻指紋索引數(shù)據(jù),故每次更新均需將服務(wù)器重啟。圖1所示,現(xiàn)有的解決方案一般將海量音頻指紋索引庫(kù)劃分為多個(gè)固定小的音頻指紋庫(kù)(塊1、塊2……塊η),積攢一定數(shù)量的新數(shù)據(jù)后,需要離線重建最后一個(gè)不滿的音頻指紋庫(kù)(塊η),然后重新啟動(dòng)服務(wù)(重啟服務(wù)更新塊η),將最新的音頻指紋庫(kù)替換到線上。由此可知,離線建庫(kù),重啟服務(wù)的索引數(shù)據(jù)更新方法具有操作繁瑣、更新不及時(shí)等固有缺陷,無(wú)法提供及時(shí)的新歌搜索服務(wù),因此,研發(fā)一種在線實(shí)時(shí)更新海量音頻指紋庫(kù)索引數(shù)據(jù)的方法成為一種必需。
【發(fā)明內(nèi)容】
[0004]為此,本發(fā)明提供一種構(gòu)建在線實(shí)時(shí)更新音頻指紋庫(kù)的方法和設(shè)備,解決現(xiàn)有技術(shù)中海量音頻指紋庫(kù)不方便在線實(shí)時(shí)更新的技術(shù)問(wèn)題。
[0005]為此,本發(fā)明提供一種構(gòu)建在線實(shí)時(shí)更新音頻指紋庫(kù)的方法,包括:建立具有相同key值的音頻指紋與所述key值的對(duì)應(yīng)關(guān)系;建立包含每個(gè)key值與其對(duì)應(yīng)音頻指紋的索引列表,使索引列表中的每一個(gè)key值均以指針的形式指向其對(duì)應(yīng)的音頻指紋;以及將具有相同key值的音頻指紋連續(xù)存儲(chǔ)。
[0006]根據(jù)本發(fā)明的一個(gè)實(shí)施方式,其中,建立具有相同key值的音頻指紋與所述key值的對(duì)應(yīng)關(guān)系包括:將具有相同key值的音頻指紋劃分為同一數(shù)組;并且其中,建立包含每個(gè)key值與其對(duì)應(yīng)音頻指紋的索引列表包括:使所述索引列表包括數(shù)量與key值數(shù)量相同的數(shù)組。
[0007]根據(jù)本發(fā)明的一個(gè)實(shí)施方式,其中,進(jìn)一步包括:在線添加音頻指紋,包括:將待添加音頻指紋按照其對(duì)應(yīng)key值進(jìn)行分組,每組中的所述待添加音頻指紋具有相同的對(duì)應(yīng)key值;在所述索引列表中查找與所述對(duì)應(yīng)key值相同的key值,以定位待更新音頻指紋;復(fù)制所述待更新音頻指紋;將具有相同key值的待更新音頻指紋和所述待添加音頻指紋連續(xù)存放,以獲得新音頻指紋;將所述索引列表中指向所述待更新音頻指紋的key值的指針,指向所述新音頻指紋;將所述待更新音頻指紋延遲刪除。
[0008]根據(jù)本發(fā)明的一個(gè)實(shí)施方式,其中,若所述待添加音頻指紋中的key值不包含在所述索引列表中,則將其視為新建key值;將所述新建key值連續(xù)添加至所述索引列表中后,將與所述新建key值相對(duì)應(yīng)的音頻指紋連續(xù)存放在所述待更新音頻指紋中。
[0009]根據(jù)本發(fā)明的一個(gè)實(shí)施方式,其中,進(jìn)一步包括:在線刪除音頻指紋,包括:將待刪除音頻指紋按照所述key值進(jìn)行分組,每組中的所述待刪除音頻指紋具有相同的對(duì)應(yīng)key值;在所述索引列表中查找與所述對(duì)應(yīng)key值相同的key值,以定位待消除音頻指紋;復(fù)制所述待消除音頻指紋;將復(fù)制的所述待消除音頻指紋中與位于所述分組中音頻指紋相同的音頻指紋刪除,獲得新音頻指紋;將所述索引列表中指向所述待消除音頻指紋的key值處的指針,指向所述新音頻指紋;將所述待消除音頻指紋延遲刪除。
[0010]根據(jù)本發(fā)明的一個(gè)實(shí)施方式,其中,所述延遲刪除,通過(guò)后臺(tái)線程加以實(shí)現(xiàn)。
[0011]為此,本發(fā)明提供一種構(gòu)建在線實(shí)時(shí)更新音頻指紋庫(kù)的設(shè)備,包括:用于建立具有相同key值的音頻指紋與所述key值的對(duì)應(yīng)關(guān)系的裝置;用于建立包含每個(gè)key值與其對(duì)應(yīng)音頻指紋的索引列表的裝置,所述索引列表中的每一個(gè)key值均以指針的形式指向其對(duì)應(yīng)的音頻指紋;以及用于將具有相同key值的音頻指紋連續(xù)存儲(chǔ)的裝置。
[0012]根據(jù)本發(fā)明的一個(gè)實(shí)施方式,其中,進(jìn)一步包括:用于在線添加音頻指紋的裝置,包括:用于將待添加音頻指紋按照其對(duì)應(yīng)key值進(jìn)行分組,每組中的所述待添加音頻指紋具有相同的對(duì)應(yīng)key值的裝置;用于在所述索引列表中查找與所述對(duì)應(yīng)key值相同的key值,以定位待更新音頻指紋的裝置;用于復(fù)制所述待更新音頻指紋的裝置;用于將具有相同key值的待更新音頻指紋和所述待添加音頻指紋連續(xù)存放,以獲得新音頻指紋的裝置;用于將所述索引列表中指向所述待更新音頻指紋的key值的指針,指向所述新音頻指紋的裝置;用于將所述待更新音頻指紋延遲刪除的裝置。
[0013]根據(jù)本發(fā)明的一個(gè)實(shí)施方式,其中,進(jìn)一步包括:用于在線刪除音頻指紋的裝置,包括:用于將待刪除音頻指紋按照所述key值進(jìn)行分組,每組中的所述待刪除音頻指紋具有相同的對(duì)應(yīng)key值的裝置;用于在所述索引列表中查找與所述對(duì)應(yīng)key值相同的key值,以定位待消除音頻指紋的裝置;用于復(fù)制所述待消除音頻指紋的裝置;用于將復(fù)制的所述待消除音頻指紋中與位于所述分組中音頻指紋相同的音頻指紋刪除,獲得新音頻指紋的裝置;用于將所述索引列表中指向所述待消除音頻指紋的key值處的指針,指向所述新音頻指紋的裝置;用于將所述待消除音頻指紋延遲刪除的裝置。
[0014]本發(fā)明通過(guò)提供一種構(gòu)建在線實(shí)時(shí)更新音頻指紋庫(kù)的方法,可使在線服務(wù)引擎支持實(shí)時(shí)添加、刪除歌曲指紋,可在I秒鐘之內(nèi)完成,而且不會(huì)影響搜索服務(wù),避免了離線建庫(kù)、重啟服務(wù)所帶來(lái)的繁瑣和耗時(shí)的工作,同時(shí)保證了海量音頻指紋庫(kù)的數(shù)據(jù)時(shí)效性,可隨時(shí)將最新的歌曲添加到在線服務(wù),并可將過(guò)期或出現(xiàn)問(wèn)題的歌曲從在線服務(wù)中刪除,實(shí)現(xiàn)了秒級(jí)的數(shù)據(jù)更新需求響應(yīng)能力,對(duì)于數(shù)據(jù)即服務(wù)的音頻檢索服務(wù)來(lái)說(shuō)意義重大。
[0015]進(jìn)一步的,本發(fā)明打破了嚴(yán)格數(shù)據(jù)連續(xù)性的限制條件,將海量音頻指紋庫(kù)按照鍵(key值)進(jìn)行劃分,每個(gè)鍵(key值)的音頻指紋(value)依然是連續(xù)存放的,這樣,雖帶來(lái)了少量了地址跳轉(zhuǎn)操作,但避免了多個(gè)索引塊的設(shè)計(jì),索引結(jié)構(gòu)為一個(gè)整體,搜索時(shí)無(wú)需遍歷多個(gè)索引塊,因此,整體性能有所提高。
[0016]進(jìn)一步的,本發(fā)明提出的通過(guò)更新并替換每個(gè)鍵(key值)的音頻指紋(value)的方法實(shí)現(xiàn)了在線實(shí)時(shí)添加、刪除歌曲指紋,并通過(guò)異步、延遲刪除過(guò)期數(shù)據(jù),異步持久化數(shù)據(jù)到文件中等方法,可保證在線搜索服務(wù)不受索引更新工作的影響,從而實(shí)現(xiàn)了對(duì)實(shí)時(shí)數(shù)據(jù)更新需求的響應(yīng)。
【附圖說(shuō)明】
[0017]為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0018]圖1為現(xiàn)有技術(shù)中海量音頻指紋庫(kù)更新方法示意圖;
[0019]圖2為本發(fā)明實(shí)施例1中構(gòu)建在線實(shí)時(shí)更新音頻指紋庫(kù)的方法流程圖;
[0020]圖3為本發(fā)明實(shí)施例1中具有相同key值的音頻指紋與所述key值的對(duì)應(yīng)關(guān)系示意圖;
[0021]圖4為本發(fā)明實(shí)施例2中索引列表的一個(gè)實(shí)施方式步驟示意圖;
[0022]圖5為本發(fā)明實(shí)施例2中索引列表結(jié)構(gòu)示意圖;
[0023]圖6為本發(fā)明實(shí)施例2中建立包含每個(gè)key值與其對(duì)應(yīng)音頻指紋的索引列表的具體操作流程示意圖;
[0024]圖7為本發(fā)明實(shí)施例3中構(gòu)建在線實(shí)時(shí)更新音頻指紋庫(kù)的方法流程圖;
[0025]圖8為本發(fā)明實(shí)施例3中在線添加音頻指紋操作流程圖;
[0026]圖9為本發(fā)明實(shí)施例3中延遲刪除操作流程圖;
[0027]圖10為本發(fā)明實(shí)施例3中特殊情況下在線添加音頻指紋操作流程圖;
[0028]圖11為本發(fā)明實(shí)施例4中在線添加音頻指紋操作流程圖;
[0029]圖12為本發(fā)明實(shí)施例4中在線刪除音頻指紋操作流程圖;
[0030]圖13為本發(fā)明實(shí)施例5中構(gòu)建在線實(shí)時(shí)更新音頻指紋庫(kù)的設(shè)備結(jié)構(gòu)示意圖;
[0031]圖14為本發(fā)明實(shí)施例6中構(gòu)建在線實(shí)時(shí)更新音頻指紋庫(kù)的設(shè)備結(jié)構(gòu)示意圖;
[0032]圖15為本發(fā)明實(shí)施例6中用于在線添加音頻指紋的裝置結(jié)構(gòu)示意圖;
[0033]圖16為本發(fā)明實(shí)施例7中構(gòu)建在線實(shí)時(shí)更新音頻指紋庫(kù)的設(shè)備結(jié)構(gòu)示意圖;
[0034]圖17為本發(fā)明實(shí)施例7中用于在線刪除音頻指紋的裝置結(jié)構(gòu)示意圖;
[0035]圖18為本發(fā)明支持在線實(shí)時(shí)更新的海量音頻指紋庫(kù)結(jié)構(gòu)示意圖;
[0036]圖19為本發(fā)明在線實(shí)時(shí)添加音頻指紋的方法示意圖;
[0037]圖20為本發(fā)明在線實(shí)時(shí)刪除音頻指紋的方法示意圖。
【具體實(shí)施方式】
[0038]下面結(jié)合說(shuō)明書附圖及實(shí)施例,對(duì)本發(fā)明的【具體實(shí)施方式】作