專利名稱:一種解析歌詞并使其與歌曲同步播放的裝置及方法
技術(shù)領(lǐng)域:
本發(fā)明涉及嵌入式多媒體領(lǐng)域,特別涉及一種解析歌詞并使其與歌曲同步播放 的裝置及方法。
背景技術(shù):
近年來,隨著科技水平和經(jīng)濟的發(fā)展,人們對精神生活的要求也越來越高。作 為多媒體技術(shù)的代表,音樂一直以來都為全世界的人們所喜愛。傳統(tǒng)的音樂多來自于電 腦、Mp3播放器等,隨著移動手持設(shè)備的普及,越來越多的人傾向于用手機來聽音樂。 在繁忙工作后的閑暇之余,插上耳機欣賞美妙的音樂,已為大家所接受。如果再加上歌 詞的同步顯示,手機音樂將更具魅力。LRC歌詞是一種包含著“[*:*]”形式的“標簽(tag)”的、基于純文本的歌詞 專用格式。這種歌詞文件既可以用來實現(xiàn)卡拉OK功能(需要專門程序),又能以普通的 文字處理軟件查看、編輯。當然,實際操作時通常是用專門的LRC歌詞編輯軟件進行高 效編輯的。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種解析歌詞并使其與歌曲同步播放的裝置及方法,其能 實現(xiàn)在手機播放歌曲時同步顯示歌詞。一方面,本發(fā)明提供一種解析歌詞并使其與歌曲同步播放的方法,其適用于手 機中,包括以下步驟Si、建立歌詞解析器,定義所述歌詞解析器的數(shù)據(jù)結(jié)構(gòu),使其能夠記錄歌詞文 件的所有有效信息;S2、打開歌詞文件,通過所述歌詞解析器逐行解析,并將解析得到的結(jié)果保存 到所述解析器數(shù)據(jù)結(jié)構(gòu)中形成歌詞數(shù)據(jù)結(jié)構(gòu)數(shù)組;S3、刪除所述歌詞數(shù)據(jù)結(jié)構(gòu)數(shù)組中的冗余及錯誤信息;S4、對得到的所述歌詞數(shù)據(jù)結(jié)構(gòu)數(shù)組以時間大小為基準點進行排序;S5、根據(jù)所述歌詞文件內(nèi)容的順序調(diào)整所述歌詞數(shù)據(jù)結(jié)構(gòu)數(shù)組,并將當前播放 時間與所述歌詞文件包括的時間進行比較,實現(xiàn)歌詞的同步播放。所述步驟Sl中還包括以下步驟SlU分析所述歌詞文件的組成;S12、根據(jù)所述歌詞文件的組成,自定義適合記錄所述歌詞文件有效信息的歌詞 解析器的數(shù)據(jù)結(jié)構(gòu)。所述步驟S2中還包括以下步驟S21、打開歌詞文件,得到其編碼格式;S22、逐行解析所述歌詞文件的時間標簽,忽略標識標簽中offset字段以外的字 段;
S23、若解析出錯,得到了不合法的時間,則進行出錯處理;S24、將解析得到的時間標簽和對應(yīng)的歌詞文本存儲到所述歌詞解析器數(shù)據(jù)結(jié)構(gòu) 中形成歌詞數(shù)據(jù)結(jié)構(gòu)數(shù)組。所述步驟S4中還包括以下步驟S41、以步驟S3得到的時間為基準點,使用冒泡排序法對所述歌詞數(shù)據(jù)結(jié)構(gòu)數(shù) 組進行排序;S42、如果出現(xiàn)同一時間對應(yīng)不同歌詞,則進行出錯處理。所述步驟S5還包括以下步驟S51、將外部歌曲重命名為與所述歌詞文件同名,或者將所述歌詞文件重命名為 與外部歌曲文件同名,本步驟不包括對文件后綴名的重命名;S52、獲取手機播放器正在播放歌曲的播放時間;S53、所述手機平臺定時刷新函數(shù)render,同名歌曲的當前播放時間與歌詞索引 所指時間進行對比,若播放時間不小于索引所指時間,則該句歌詞高亮顯示;否則,索 引進行自增,等到下一次刷新時再行比較。另一方面,一種解析歌詞并使其與歌曲同步播放的裝置,其適用于手機中,包 括歌詞解析器,所述歌詞解析器具有的數(shù)據(jù)結(jié)構(gòu)能夠記錄歌詞文件的所有有效信 息;解析單元,用以打開歌詞文件,并通過所述歌詞解析器逐行解析,將解析得到 的結(jié)果保存到所述解析器數(shù)據(jù)結(jié)構(gòu)中形成歌詞數(shù)據(jù)結(jié)構(gòu)數(shù)組;整合單元,用以刪除所述歌詞數(shù)據(jù)結(jié)構(gòu)數(shù)組中的冗余及錯誤信息;排序單元,用以對得到的所述歌詞數(shù)據(jù)結(jié)構(gòu)數(shù)組以時間大小為基準點進行排 序;同步單元,用以根據(jù)所述歌詞文件內(nèi)容的順序調(diào)整所述歌詞數(shù)據(jù)結(jié)構(gòu)數(shù)組,并 將當前播放時間與所述歌詞文件包括的時間進行比較,實現(xiàn)歌詞的同步播放。所述歌詞解析器還包括以下模塊分析所述歌詞文件的組成的模塊;根據(jù)所述歌詞文件的組成,自定義適合記錄所述歌詞文件有效信息的歌詞解析 器的數(shù)據(jù)結(jié)構(gòu)的模塊。所述解析單元還包括以下模塊用以打開歌詞文件得到其編碼格式的模塊;用以逐行解析所述歌詞文件的時間標簽,忽略標識標簽中offset字段以外的字段 的模塊;用以解析出錯得到了不合法的時間時,進行出錯處理的模塊;用以將解析得到的時間標簽和對應(yīng)的歌詞文本存儲到所述歌詞解析器數(shù)據(jù)結(jié)構(gòu) 中形成歌詞數(shù)據(jù)結(jié)構(gòu)數(shù)組的模塊。所述排序單元還包括以時間為基準點,使用冒泡排序法對所述歌詞數(shù)據(jù)結(jié)構(gòu)數(shù)組進行排序的模塊;負責當出現(xiàn)同一時間對應(yīng)不同歌詞時,進行出錯處理的模塊。
所述同步單元還包括重命名模塊,用以將外部歌曲重命名為與所述歌詞文件同名,或者將所述歌詞 文件重命名為與外部歌曲文件同名,所述重命名模塊不支持文件后綴名的重命名;取時模塊,用以獲取手機播放器正在播放歌曲的播放時間;比較模塊,用以當所述手機平臺定時刷新函數(shù)render時,同名歌曲的當前播放 時間與歌詞索引所指時間進行對比,若播放時間不小于索引所指時間,則該句歌詞高亮 顯示;否則,索引進行自增,等到下一次刷新時再行比較。采用本發(fā)明所述的一種解析歌詞并使其與歌曲同步播放的裝置及方法,首先建 立歌詞解析器,定義所述歌詞解析器的數(shù)據(jù)結(jié)構(gòu),使其能夠記錄歌詞文件的所有有效信 息;然后通過所述歌詞解析器逐行解析,并將解析得到的結(jié)果保存到所述解析器數(shù)據(jù)結(jié) 構(gòu)中形成歌詞數(shù)據(jù)結(jié)構(gòu)數(shù)組;再對得到的所述歌詞數(shù)據(jù)結(jié)構(gòu)數(shù)組以時間大小為基準點進 行排序;最后根據(jù)所述歌詞文件內(nèi)容的順序調(diào)整所述歌詞數(shù)據(jù)結(jié)構(gòu)數(shù)組,并將當前播放 時間與所述歌詞文件包括的時間進行比較,實現(xiàn)歌曲和歌詞的同步播放。
圖1為本發(fā)明所述方法的主流程圖;圖2為本發(fā)明所述方法一實施例的流程圖;圖3為本發(fā)明所述的循環(huán)定時刷新步驟的流程圖。
具體實施例方式下面結(jié)合附圖和實施例進一步說明本發(fā)明的技術(shù)方案,本實施例是通過適用在 手機上進行說明的。參見圖1,本發(fā)明提供一種解析歌詞并使其與歌曲同步播放的方法100,其適用 于手機中,包括以下步驟Si、建立歌詞解析器,定義所述歌詞解析器的數(shù)據(jù)結(jié)構(gòu),使其能夠記錄歌詞文 件的所有有效信息。作為一實施例,所述步驟Sl中還包括以下步驟SlU分析所述歌詞文件的組成。S12、根據(jù)所述歌詞文件的組成,自定義適合記錄所述歌詞文件有效信息的歌詞 解析器的數(shù)據(jù)結(jié)構(gòu)。S2、打開歌詞文件,通過所述歌詞解析器逐行解析,并將解析得到的結(jié)果保存 到所述解析器數(shù)據(jù)結(jié)構(gòu)中形成歌詞數(shù)據(jù)結(jié)構(gòu)數(shù)組。作為一實施例,所述步驟S2中還包括以下步驟S21、打開歌詞文件,得到其編碼格式。S22、逐行解析所述歌詞文件的時間標簽,忽略標識標簽中offset字段以外的字 段。S23、若解析出錯,得到了不合法的時間,則進行出錯處理。S24、將解析得到的時間標簽和對應(yīng)的歌詞文本存儲到所述歌詞解析器數(shù)據(jù)結(jié)構(gòu) 中形成歌詞數(shù)據(jù)結(jié)構(gòu)數(shù)組。
S3、刪除所述歌詞數(shù)據(jù)結(jié)構(gòu)數(shù)組中的冗余及錯誤信息。S4、對得到的所述歌詞數(shù)據(jù)結(jié)構(gòu)數(shù)組以時間大小為基準點進行排序。作為一實施例,所述步驟S4中還包括以下步驟S41、以步驟S3得到的時間為基準點,使用冒泡排序法對所述歌詞數(shù)據(jù)結(jié)構(gòu)數(shù) 組進行排序。S42、如果出現(xiàn)同一時間對應(yīng)不同歌詞,則進行出錯處理。S5、根據(jù)所述歌詞文件內(nèi)容的順序調(diào)整所述歌詞數(shù)據(jù)結(jié)構(gòu)數(shù)組,并將當前播放 時間與所述歌詞文件包括的時間進行比較,實現(xiàn)歌詞的同步播放。作為一實施例,所述步驟S5還包括以下步驟S51、將外部歌曲重命名為與所述歌詞文件同名,或者將所述歌詞文件重命名為 與外部歌曲文件同名,本步驟不包括對文件后綴名的重命名。 S52、獲取手機播放器正在播放歌曲的播放時間。S53、所述手機平臺定時刷新函數(shù)render,同名歌曲的當前播放時間與歌詞索引 所指時間進行對比,若播放時間不小于索引所指時間,則該句歌詞高亮顯示。否則,索 引進行自增,等到下一次刷新時再行比較。參見圖2,圖2是一個實施例的流程圖,首先定義歌詞文件的數(shù)據(jù)存儲結(jié)構(gòu),然 后打開歌詞文件,根據(jù)歌詞編碼格式,逐行解析歌詞文件。如果解析出錯,說明歌詞文 件有問題,進行出錯處理。等逐行處理過后,刪除多余的信息主要包括標識標簽以及 無意義的時間標簽(如負值時間之類的)。至此,得到的數(shù)據(jù)結(jié)構(gòu)數(shù)組可能是有序的,也 可能是無序的,完全由歌詞文件決定。為了便于同步,必須將歌詞進行排序,即以時間 大小為基準點進行排序。有的歌詞文件的標識標簽還具有offset字段,該字段是時間補 償,正值表示將歌詞整體提前,負值則表示將歌詞整體滯后,所以還需要進行微調(diào)根 據(jù)所述歌詞文件內(nèi)容的順序進行調(diào)整,并將當前播放時間與所述歌詞文件包括的時間進 行比較,實現(xiàn)歌詞的同步播放。參見圖3,圖1中的步驟S5有實現(xiàn)歌詞與歌曲同步的步驟,該步驟需要在一個循 環(huán)定時刷新函數(shù)中實現(xiàn)(圖3中的手機刷新函數(shù))。定時刷新保證歌曲播放時間playTime 會不斷更新,當playTime不小于歌詞數(shù)據(jù)結(jié)構(gòu)IrcStruc t索引index所指的IrcTime時,將
該時間所指的歌詞高亮顯示,否則index自增一個,等待下一次刷新時重新比較playT與 IrcTime,如此循環(huán),直到歌曲播放完畢。另外,本發(fā)明還提供一種解析歌詞并使其與歌曲同步播放的裝置,其適用于手 機中,包括歌詞解析器,所述歌詞解析器具有的數(shù)據(jù)結(jié)構(gòu)能夠記錄歌詞文件的所有有效信 息。作為一實施例,所述歌詞解析器還包括以下模塊分析所述歌詞文件的組成的模塊。根據(jù)所述歌詞文件的組成,自定義適合記錄所述歌詞文件有效信息的歌詞解析 器的數(shù)據(jù)結(jié)構(gòu)的模塊。解析單元,用以打開歌詞文件,并通過所述歌詞解析器逐行解析,將解析得到 的結(jié)果保存到所述解析器數(shù)據(jù)結(jié)構(gòu)中形成歌詞數(shù)據(jù)結(jié)構(gòu)數(shù)組。作為一實施例,所述解析 單元還包括以下模塊
用以打開歌詞文件得到其編碼格式的模塊。用以逐行解析所述歌詞文件的時間標簽,忽略標識標簽中offset字段以外的字段 的模塊。用以解析出錯得到了不合法的時間時,進行出錯處理的模塊。用以將解析得到的時間標簽和對應(yīng)的歌詞文本存儲到所述歌詞解析器數(shù)據(jù)結(jié)構(gòu) 中形成歌詞數(shù)據(jù)結(jié)構(gòu)數(shù)組的模塊。整合單元,用以刪除所述歌詞數(shù)據(jù)結(jié)構(gòu)數(shù)組中的冗余及錯誤信息。排序單元,用以對得到的所述歌詞數(shù)據(jù)結(jié)構(gòu)數(shù)組以時間大小為基準點進行排 序。作為一實施例,所述排序單元還包括以時間為基準點,使用冒泡排序法對所述歌詞數(shù)據(jù)結(jié)構(gòu)數(shù)組進行排序的模塊。負責當出現(xiàn)同一時間對應(yīng)不同歌詞時,進行出錯處理的模塊。同步單元,用以根據(jù)所述歌詞文件內(nèi)容的順序調(diào)整所述歌詞數(shù)據(jù)結(jié)構(gòu)數(shù)組,并 將當前播放時間與所述歌詞文件包括的時間進行比較,實現(xiàn)歌詞的同步播放。作為一實 施例,所述同步單元還包括重命名模塊,用以將外部歌曲重命名為與所述歌詞文件同名,或者將所述歌詞 文件重命名為與外部歌曲文件同名,所述重命名模塊不支持文件后綴名的重命名。取時模塊,用以獲取手機播放器正在播放歌曲的播放時間。比較模塊,用以當所述手機平臺定時刷新函數(shù)render時,同名歌曲的當前播放 時間與歌詞索引所指時間進行對比,若播放時間不小于索引所指時間,則該句歌詞高亮 顯示。否則,索引進行自增,等到下一次刷新時再行比較。需要指出的是,本發(fā)明所述的一種解析歌詞并使其與歌曲同步播放的方法與一 種解析歌詞并使其與歌曲同步播放的裝置,兩者在原理和實施上是相同或類似的,故其 重復(fù)部分不再贅述。本技術(shù)領(lǐng)域中的普通技術(shù)人員應(yīng)當認識到,以上的實施例僅是用來說明本發(fā) 明,而并非用作為對本發(fā)明的限定,只要在本發(fā)明的實質(zhì)精神范圍內(nèi),對以上實施例的 變化、變型都將落在本發(fā)明的權(quán)利要求書范圍內(nèi)。
權(quán)利要求
1.一種解析歌詞并使其與歌曲同步播放的方法,其適用于手機中,其特征在于,包 括以下步驟51、建立歌詞解析器,定義所述歌詞解析器的數(shù)據(jù)結(jié)構(gòu),使其能夠記錄歌詞文件的 所有有效信息;52、打開歌詞文件,通過所述歌詞解析器逐行解析,并將解析得到的結(jié)果保存到所 述解析器數(shù)據(jù)結(jié)構(gòu)中形成歌詞數(shù)據(jù)結(jié)構(gòu)數(shù)組;53、刪除所述歌詞數(shù)據(jù)結(jié)構(gòu)數(shù)組中的冗余及錯誤信息;54、對得到的所述歌詞數(shù)據(jù)結(jié)構(gòu)數(shù)組以時間大小為基準點進行排序;55、根據(jù)所述歌詞文件內(nèi)容的順序調(diào)整所述歌詞數(shù)據(jù)結(jié)構(gòu)數(shù)組,并將當前播放時間 與所述歌詞文件包括的時間進行比較,實現(xiàn)歌詞的同步播放。
2.如權(quán)利要求1所述的方法,其特征在于,所述步驟Sl中還包括以下步驟 SlU分析所述歌詞文件的組成;S12、根據(jù)所述歌詞文件的組成,自定義適合記錄所述歌詞文件有效信息的歌詞解析 器的數(shù)據(jù)結(jié)構(gòu)。
3.如權(quán)利要求2所述的方法,其特征在于,所述步驟S2中還包括以下步驟521、打開歌詞文件,得到其編碼格式;522、逐行解析所述歌詞文件的時間標簽,忽略標識標簽中offset字段以外的字段;523、若解析出錯,得到了不合法的時間,則進行出錯處理;524、將解析得到的時間標簽和對應(yīng)的歌詞文本存儲到所述歌詞解析器數(shù)據(jù)結(jié)構(gòu)中形 成歌詞數(shù)據(jù)結(jié)構(gòu)數(shù)組。
4.如權(quán)利要求3所述的方法,其特征在于,所述步驟S4中還包括以下步驟541、以步驟S3得到的時間為基準點,使用冒泡排序法對所述歌詞數(shù)據(jù)結(jié)構(gòu)數(shù)組進 行排序;542、如果出現(xiàn)同一時間對應(yīng)不同歌詞,則進行出錯處理。
5.如權(quán)利要求4所述的方法,其特征在于,所述步驟S5還包括以下步驟551、將外部歌曲重命名為與所述歌詞文件同名,或者將所述歌詞文件重命名為與外 部歌曲文件同名,本步驟不包括對文件后綴名的重命名;552、獲取手機播放器正在播放歌曲的播放時間;553、所述手機平臺定時刷新函數(shù)render,同名歌曲的當前播放時間與歌詞索引所指 時間進行對比,若播放時間不小于索引所指時間,則該句歌詞高亮顯示;否則,索引進 行自增,等到下一次刷新時再行比較。
6.—種解析歌詞并使其與歌曲同步播放的裝置,其適用于手機中,其特征在于,包括歌詞解析器,所述歌詞解析器具有的數(shù)據(jù)結(jié)構(gòu)能夠記錄歌詞文件的所有有效信息; 解析單元,用以打開歌詞文件,并通過所述歌詞解析器逐行解析,將解析得到的結(jié) 果保存到所述解析器數(shù)據(jù)結(jié)構(gòu)中形成歌詞數(shù)據(jù)結(jié)構(gòu)數(shù)組;整合單元,用以刪除所述歌詞數(shù)據(jù)結(jié)構(gòu)數(shù)組中的冗余及錯誤信息; 排序單元,用以對得到的所述歌詞數(shù)據(jù)結(jié)構(gòu)數(shù)組以時間大小為基準點進行排序; 同步單元,用以根據(jù)所述歌詞文件內(nèi)容的順序調(diào)整所述歌詞數(shù)據(jù)結(jié)構(gòu)數(shù)組,并將當前播放時間與所述歌詞文件包括的時間進行比較,實現(xiàn)歌詞的同步播放。
7.如權(quán)利要求6所述的裝置,其特征在于,所述歌詞解析器還包括以下模塊 分析所述歌詞文件的組成的模塊;根據(jù)所述歌詞文件的組成,自定義適合記錄所述歌詞文件有效信息的歌詞解析器的 數(shù)據(jù)結(jié)構(gòu)的模塊。
8.如權(quán)利要求8所述的裝置,其特征在于,所述解析單元還包括以下模塊 用以打開歌詞文件得到其編碼格式的模塊;用以逐行解析所述歌詞文件的時間標簽,忽略標識標簽中offset字段以外的字段的模塊;用以解析出錯得到了不合法的時間時,進行出錯處理的模塊; 用以將解析得到的時間標簽和對應(yīng)的歌詞文本存儲到所述歌詞解析器數(shù)據(jù)結(jié)構(gòu)中形 成歌詞數(shù)據(jù)結(jié)構(gòu)數(shù)組的模塊。
9.如權(quán)利要求8所述的裝置,其特征在于,所述排序單元還包括以時間為基準點,使用冒泡排序法對所述歌詞數(shù)據(jù)結(jié)構(gòu)數(shù)組進行排序的模塊; 負責當出現(xiàn)同一時間對應(yīng)不同歌詞時,進行出錯處理的模塊。
10.如權(quán)利要求9所述的裝置,其特征在于,所述同步單元還包括重命名模塊,用以將外部歌曲重命名為與所述歌詞文件同名,或者將所述歌詞文件 重命名為與外部歌曲文件同名,所述重命名模塊不支持文件后綴名的重命名; 取時模塊,用以獲取手機播放器正在播放歌曲的播放時間;比較模塊,用以當所述手機平臺定時刷新函數(shù)render時,同名歌曲的當前播放時 間與歌詞索引所指時間進行對比,若播放時間不小于索引所指時間,則該句歌詞高亮顯 示;否則,索引進行自增,等到下一次刷新時再行比較。
全文摘要
本發(fā)明揭示了一種解析歌詞并使其與歌曲同步播放的裝置及方法,首先建立歌詞解析器,定義所述歌詞解析器的數(shù)據(jù)結(jié)構(gòu),使其能夠記錄歌詞文件的所有有效信息;然后通過所述歌詞解析器逐行解析,并將解析得到的結(jié)果保存到所述解析器數(shù)據(jù)結(jié)構(gòu)中形成歌詞數(shù)據(jù)結(jié)構(gòu)數(shù)組;再對得到的所述歌詞數(shù)據(jù)結(jié)構(gòu)數(shù)組以時間大小為基準點進行排序;最后根據(jù)所述歌詞文件內(nèi)容的順序調(diào)整所述歌詞數(shù)據(jù)結(jié)構(gòu)數(shù)組,并將當前播放時間與所述歌詞文件包括的時間進行比較,實現(xiàn)歌曲和歌詞的同步播放。
文檔編號G11B27/10GK102013265SQ20101025767
公開日2011年4月13日 申請日期2010年8月19日 優(yōu)先權(quán)日2010年8月19日
發(fā)明者張沖 申請人:上??岚尚畔⒓夹g(shù)有限公司