專利名稱:實現(xiàn)歌曲播放過程中歌詞同步的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)字終端數(shù)字音視頻文件的播放技術(shù),特別是指一種 在數(shù)字終端上進行歌曲播放時的歌詞同步方法和裝置。
背景技術(shù):
在過去的幾年內(nèi),以多媒體手機為代表的多媒體數(shù)字終端技術(shù)發(fā) 展突飛猛進。在傳統(tǒng)通信業(yè)務(wù)以外,移動終端(即手機)廠商向用戶提供了播放多媒體文件的功能以提高自身產(chǎn)品的吸引力。支持mp3 歌曲的播放就是其中之一,而歌詞文件的出現(xiàn),進一步提高了 mp3 歌曲的娛樂性,它向終端提供某一首mp3歌曲的歌詞信息與時間信 息,使數(shù)字終端在播放mp3歌曲的同時同步顯示歌詞成為可能?,F(xiàn)有技術(shù)中,在數(shù)字終端上的歌詞同步播放一般都是通過具有同 步歌詞文件的解析與顯示能力的解碼芯片來完成,由于采用硬件實現(xiàn) 代價較高,對數(shù)字終端對成本的要求較高,并且一些低端的數(shù)字終端 產(chǎn)品一般不會使用功能比較強大的芯片。發(fā)明內(nèi)容有鑒于此,本發(fā)明提出一種實現(xiàn)歌曲播放過程中歌詞同步的方法 和裝置,不依賴高端的解碼芯片支持,能夠在普通數(shù)字終端上實現(xiàn)歌 曲播放過程中歌詞同步?;谏鲜瞿康谋景l(fā)明提供的一種實現(xiàn)歌曲播放過程中歌詞同步的 方法,包括A. 解析歌詞文件,將得到的歌詞時間信息與歌詞文本內(nèi)容對應(yīng) 地保存為歌詞鏈表;B. 歌曲播放過程中,獲取當前播放的時間,查詢歌詞鏈表,通
過時間信息與歌詞文本的對應(yīng)關(guān)系,確定當前時間對應(yīng)的歌詞文本內(nèi)容;c.顯示所確定的歌詞文本內(nèi)容。該方法步驟A所述解析過程包括識別歌詞文件中的時間標簽,將時間標簽轉(zhuǎn)換為時間信息值; 識別歌詞文件中的文本內(nèi)容,獲得歌詞的文本內(nèi)容。 該方法步驟A所述解析過程進一步包括根據(jù)文件格式,識別歌詞文件是字同步文件還是句同步文件。該方法所述歌詞鏈表的每個節(jié)點中至少包含 一 句歌詞開始時間和該句歌詞的文本內(nèi)容。該方法步驟B所述確定當前時間對應(yīng)歌詞文本內(nèi)容的過程包括每間隔一段時間即獲取當前播放時間,在歌詞鏈表中找出與當前時間匹配的開始時間,確定該開始時間對應(yīng)節(jié)點中包含的歌詞文本內(nèi)容為顯示內(nèi)容。該方法所述在歌詞鏈表中找出與當前時間匹配的開始時間的過程 包括將當前時間與下一節(jié)點中的開始時間進行比較,如果下一節(jié)點 歌詞的開始時間小于等于當前播放時間,則確定下 一 節(jié)點中的歌詞文 本內(nèi)容為顯示歌詞內(nèi)容,否則,仍然確定當前節(jié)點中的歌詞文本內(nèi)容 為顯示內(nèi)容。該方法步驟B所述確定當前時間對應(yīng)歌詞文本內(nèi)容的過程包括將下一個節(jié)點歌詞的開始時間減去當前歌詞的開始時間得到當前 這句歌詞的持續(xù)時間;設(shè)置一個定時器,歌曲播放開始時,當前播放字符的指針指向歌 詞鏈表的表頭,設(shè)置定時器的時長為上述持續(xù)時間,定時器啟動;定 時器結(jié)束時,發(fā)送通知消息,將指針指向下一個節(jié)點,返回上一步為 定時器重新設(shè)置時長,并重新啟動定時器。該方法所述歌詞文件為句同步文件,所述時間信息為每句歌詞的 開始時間;
所述歌詞鏈表的每個節(jié)點中包含 一句歌詞開始時間和該句歌詞 的文本內(nèi)容。該方法所述歌詞文件為字同步文件,所述時間信息包括每句歌詞 的開始時間、以及句子中每個字的開始時間和持續(xù)時間;所述歌詞鏈表的每個節(jié)點中包含 一句歌詞的開始時間、該句歌 詞的文本內(nèi)容、以及時間軸鏈表;時間軸鏈表中包含該句歌詞中每個 字的開始時間和持續(xù)時間。該方法所述歌詞文件為字同步文件,所述步驟C還包括從當 前歌詞鏈表節(jié)點中獲取時間軸鏈表,從中獲取每個字的開始時間和持 續(xù)時間;每次間隔一段時間,獲取當前時間,根據(jù)每個字的開始時間 和持續(xù)時間判斷當前歌曲唱到了那個字符,以及這個字符當前已經(jīng)被 歌唱了的百分比,計算出顏色滾動的坐標,用預先設(shè)定的顏色填充坐 標對應(yīng)的文字區(qū)域。該方法所述歌詞文件為字同步文件,所述時間信息包括每句歌詞 的開始時間、以及句子中每個字的開始時間和持續(xù)時間;所述歌詞鏈 表的每個節(jié)點中包含 一句歌詞的開始時間、該句歌詞的文本內(nèi)容、 以及時間軸鏈表;時間軸鏈表中包含該句歌詞中每個字的開始時間和 持續(xù)時間;步驟B所述確定當前時間對應(yīng)歌詞文本內(nèi)容的過程包括從當前歌詞鏈表節(jié)點中獲取時間軸鏈表,從中獲取每個字的開始 時間和持續(xù)時間;歌曲開始播放時,當前播放字符的指針指向歌詞鏈表的表頭,并 從其中的時間軸鏈表的表頭取出第一個字的持續(xù)時間,設(shè)置定時器的 時長為該持續(xù)時間,啟動定時器;定時器結(jié)束時,發(fā)送通知消息,將 當前播放字符指針指向歌詞鏈表的下一個字,并從時間軸鏈表的下一 個節(jié)點取出下一個字的持續(xù)時間,再次啟動定時器。該方法所述步驟C還包括所述定時器每隔一段時間還發(fā)送第 二通知消息,每次第二通知消息到來時,判斷這個字符當前已經(jīng)被歌 唱了的百分比,計算新的顏色滾動坐標,用預先設(shè)定的顏色填充對應(yīng)
的文字區(qū)域。該方法所述第二通知消息的步長可以是分色顯示時的時間片長度。該方法進一步設(shè)置二級緩存,步驟C中,將步驟B中確定歌詞 文本內(nèi)容拷貝到二級緩存中執(zhí)行對該文本內(nèi)容在顯示前的處理,然后復制到播放設(shè)備的顯存中。該方法可應(yīng)用于移動終端中。基于上述目的本發(fā)明還提供了 一種實現(xiàn)歌曲播放過程中歌詞同步 的裝置,包括歌詞文件解析模塊501,用于解析歌詞文件,并將解析得到的歌 詞時間信息與歌詞文本內(nèi)容對應(yīng)地保存在存儲模塊502中;存儲模塊502,用于將歌詞時間信息和歌詞文本內(nèi)容以時間鏈表 的形式保存;歌詞內(nèi)容同步獲取模塊503,用于在歌曲播放過程中,獲取當前 播放的時間,查詢存儲模塊502中的歌詞鏈表,通過時間信息與歌詞 文本的對應(yīng)關(guān)系確定當前時間對應(yīng)的歌詞文本內(nèi)容;歌詞同步顯示模塊504,用于對當前時間下歌詞內(nèi)容同步獲取模 塊503所確定的歌詞文本內(nèi)容進行同步顯示。該裝置所述歌詞文件解析模塊501的歌詞解析過程包括識別歌 詞文件中的時間標簽,將時間標簽轉(zhuǎn)換為時間信息值;識別歌詞文件 中的文本內(nèi)容,獲得歌詞的文本內(nèi)容。該裝置所述歌詞鏈表的每個節(jié)點中至少包含 一 句歌詞開始時間 和該句歌詞的文本內(nèi)容。該裝置還包括定時器;所述歌詞內(nèi)容同步獲取模塊503每間隔一 段時間從定時器獲取當前播放時間,在存儲模塊502的歌詞鏈表中找 出與當前時間匹配的開始時間,將該開始時間對應(yīng)節(jié)點中包含的歌詞 文本內(nèi)容確定為顯示內(nèi)容。該裝置所述歌詞內(nèi)容同步獲取模塊503找出與當前時間匹配的開 始時間的過程為歌詞內(nèi)容同步獲取模塊503將當前時間與歌詞鏈表 下一節(jié)點中的開始時間進行比較,如果下 一節(jié)點歌詞的開始時間小于 等于當前播放時間,則確定下一節(jié)點中的歌詞文本內(nèi)容為顯示歌詞內(nèi) 容,否則,仍然確定當前節(jié)點中的歌詞文本內(nèi)容為顯示內(nèi)容。該裝置還包括定時器;所述歌詞內(nèi)容同步獲取模塊503將下一個 節(jié)點歌詞的開始時間減去當前歌詞的開始時間得到當前這句歌詞的持 續(xù)時間;歌詞內(nèi)容同步獲取模塊503在歌曲播放開始時,將當前播放字符 的指針指向存儲模塊502中歌詞鏈表的表頭,設(shè)置定時器的時長為上 述持續(xù)時間,定時器啟動;定時器結(jié)束時,向歌詞內(nèi)容同步獲取模塊 503發(fā)送通知消息,歌詞內(nèi)容同步獲取模塊503將指針指向下一個節(jié) 點,歌詞內(nèi)容同步獲取模塊503為定時器重新設(shè)置時長,并重新啟動 定時器。該裝置所述歌詞文件為句同步文件,'所述時間信息為每句歌詞的 開始時間;所述歌詞鏈表的每個節(jié)點中包含 一句歌詞開始時間和該句歌詞 的文本內(nèi)容。該裝置所述歌詞文件為字同步文件,所述時間信息包括每句歌詞 的開始時間、以及句子中每個字的開始時間和持續(xù)時間;所述歌詞鏈表的每個節(jié)點中包含 一句歌詞的開始時間、該句歌 詞的文本內(nèi)容、以及時間軸鏈表;時間軸鏈表中包含該句歌詞中每個 字的開始時間和持續(xù)時間。該裝置所述歌詞文件為字同步文件,所述歌詞同步顯示模塊504 從當前歌詞鏈表節(jié)點中荻取時間軸鏈表,從中獲取每個字的開始時間 和持續(xù)時間;每次間隔一段時間獲取當前時間,根據(jù)每個字的開始時 間和持續(xù)時間判斷當前歌曲唱到了那個字符,以及這個字符當前已經(jīng) 被歌唱了的百分比,計算出顏色滾動的坐標,用預先設(shè)定的顏色填充 坐標對應(yīng)的文字區(qū)域。該裝置所述歌詞文件為字同步文件,所述時間信息包括每句歌詞 的開始時間、以及句子中每個字的開始時間和持續(xù)時間;所述歌詞鏈
表的每個節(jié)點中包含 一句歌詞的開始時間、該句歌詞的文本內(nèi)容、 以及時間軸鏈表;時間軸鏈表中包含該句歌詞中每個字的開始時間和 持續(xù)時間;所述歌詞內(nèi)容同步獲取模塊503從當前歌詞鏈表節(jié)點中獲取時間 軸鏈表,從中獲取每個字的開始時間和持續(xù)時間;歌曲開始播放時, 當前播放字符的指針指向歌詞鏈表的表頭,并從其中的時間軸鏈表的 表頭取出第一個字的持續(xù)時間,設(shè)置定時器的時長為該持續(xù)時間,啟 動定時器;定時器結(jié)束時,發(fā)送通知消息,將當前播放字符指針指向 歌詞鏈表的下一個字,并從時間軸鏈表的下一個節(jié)點取出下一個字的 持續(xù)時間,再次啟動定時器。該裝置所述定時器每隔一段時間還發(fā)送第二通知消息,每次第二 通知消息到來時,所述歌詞同步顯示模塊504判斷這個字符當前已經(jīng) 被歌唱了的百分比,計算新的顏色滾動坐標,用預先設(shè)定的顏色填充 對應(yīng)的文字區(qū)域。該裝置所述笫二通知消息的步長可以是分色顯示時的時間片長度。該裝置進一步設(shè)置二級緩存,歌詞同步顯示模塊504將確定的歌 詞文本內(nèi)容拷貝到二級緩存中執(zhí)行對該文本內(nèi)容在顯示前的處理,然 后復制到播放設(shè)備的顯存中。該裝置設(shè)置于移動終端中。從上面所述可以看出,本發(fā)明提供的實現(xiàn)歌曲播放過程中歌詞同 步的方法和裝置,通過對歌詞文件的解析并建立歌詞鏈表,根據(jù)當前 時間查詢歌詞鏈表確定當前應(yīng)顯示的歌詞內(nèi)容等筒單的技術(shù)手段實現(xiàn) 了歌曲播放過程中歌詞同步顯示,具體包括有以下優(yōu)點由于不依賴具有同步歌詞文件的解析與顯示能力的高端解碼芯片 支持,本發(fā)明為數(shù)字終端的低端產(chǎn)品,比如個人無繩市話系統(tǒng) (PHS)終端、非智能的低端手機等,提供了詞曲同步的解決方案, 克服了長期以來低端機型無法同步顯示歌詞的缺陷;現(xiàn)有數(shù)字終端的詞曲同步技術(shù)只能實現(xiàn)句同步,本發(fā)明方案在此
基礎(chǔ)上還實現(xiàn)了歌詞顯示的字同步,可以配合語音輸入實現(xiàn)卡拉OK 效果,大大加強了產(chǎn)品的娛樂性。
圖1為本發(fā)明實施例針實現(xiàn)歌詞同步的流程示意圖;圖2為本發(fā)明實施例對句同步文件采用通知方式指示歌詞的示意圖3為本發(fā)明實施例對字同步文件采用通知方式指示歌詞的示意圖;圖4為本發(fā)明實施例進行KOK文件歌詞顯示時對顯存的填充示意圖;圖5為本發(fā)明實施例實現(xiàn)歌曲播放過程中歌詞同步裝置的結(jié)構(gòu)示意圖。
具體實施方式
下面參照附圖對本發(fā)明進行更全面的描述,其中說明本發(fā)明的示 例性實施例。本發(fā)明實現(xiàn)歌曲播放過程中歌詞同步的方法主要包括解析歌詞 文件,將得到的歌詞時間信息與歌詞文本內(nèi)容對應(yīng)地保存為歌詞鏈 表;歌曲播放過程中,獲取當前播放的時間,查詢歌詞鏈表通過時間 信息與歌詞文本的對應(yīng)關(guān)系,確定當前時間對應(yīng)的歌詞文本內(nèi)容;顯 示所確定的歌詞文本內(nèi)容。參見圖1所示,下面以句同步的LRC歌詞文件和字同步的 KOK歌詞文件為例,對本發(fā)明的較佳實施方式進行描述。步驟IOI,對歌詞文件進行解析,建立歌詞鏈表。具體包括a,依照LRC文件和KOK文件的格式解析文件頭,獲取文件 名、歌手名、文件作者、時間偏移量等信息備用。 建立時間軸的過程包括b、根據(jù)文件格式,識別是字同步文件還是句同步文件。具體來
說,句同步文件中,每句歌詞,兩個時間標簽之間,沒有字符,而字同步文件中,時間標簽和一個漢字/英文交替出現(xiàn);c、 解析每句歌詞;1) 識別時間標簽,LRC文件的時間標簽根據(jù)生成文件的軟件的 不同,有[分:秒亳秒和[分:秒兩種,KOK文件僅有[分:秒毫秒]一 種,將時間標簽轉(zhuǎn)換為時間值備用;2) 識別文本,將這句歌詞的文本內(nèi)容保存下來;3) 用一定的數(shù)據(jù)結(jié)構(gòu)保存時間值和文本內(nèi)容,建立一個歌詞鏈表;其中,句同步的鏈表的每個節(jié)點包括這句句子的文本和開始時間;字同步的鏈表包括一個句子中每個字開始時間、持續(xù)時間的鏈表 和這句句子的文本。d. 文件解析完成,保存的數(shù)據(jù)結(jié)構(gòu)備用。LRC文件的格式舉例如下:[ti:千里之外] [ar:周杰倫〗 [al:依然范特西] [by:lizaixing] [offset:500]
[(M:13. 12]詞方文山唱周杰倫.費玉洧
ww, 5lire, con^lizaixing制
QQ:114951191
屋檐如是崖
鳳薛如洽海
我等燕歸來按照LRC文件的格式規(guī)范對文件中每行行首的11個字節(jié)數(shù)據(jù) 進行匹配,從而來判斷這行數(shù)據(jù)是屬于合法數(shù)據(jù)還是非法數(shù)據(jù),如果 是合法數(shù)據(jù),再判斷是歌詞數(shù)據(jù)還是屬性數(shù)據(jù)。屬性字段符合[ti:XX….XXj的為歌曲名稱 符合[ar:XX….XX的為歌手名稱
符合al:XX….XX的為專輯名稱符合[by:XX….XX的為LRC文件作者名稱符合[offset:XXX為數(shù)據(jù)字段的時間偏移量,單位毫秒數(shù)據(jù)字段符合[mm:SS.ssl或者[mm:SS.sss格式的為合法的一句歌詞,從下一個字節(jié)開始到行尾即為這句歌詞的內(nèi)容。然后,按照以上的判定規(guī)則,對整個文件依次進行解析,建立對 應(yīng)的數(shù)據(jù)結(jié)構(gòu), 一個歌詞文件對應(yīng)的數(shù)據(jù)結(jié)構(gòu)是一個鏈表,鏈表的節(jié) 點可按時間軸排列,每一個節(jié)點對應(yīng)一句歌詞,節(jié)點的成員為這句開 始的時間和歌詞的內(nèi)容。關(guān)于持續(xù)時間,可以以毫秒為單位進行保存,也可以轉(zhuǎn)換為相應(yīng) 的時間單位,比如定時器以50亳秒為間隔,則可以設(shè)置以50亳秒為 一個時間單位。KOK文件的格式舉例如下[ar:鳳凰傳奇] [ti:月殼之上] [al:] [by:]
我
逞
望
[OO:乾34〗月
有
多
少
夢
想
自
由
的
飛
翔
〖00:51.81]昨
夭
以
住
風
千
傷
對屬性字段的解析與LRC文件相同,但是KOK文件的一句歌 詞中,每一個字都有一個時間信息,每句歌詞的行尾還有一個時間信 息,標志這句歌詞的結(jié)束時間。 一個字的時間信息中,字前的時間信 息是它開始的時間,字后的時間信息是它結(jié)束的時間,這兩個時間信 息之差即是這個字持續(xù)的時間。對每一句歌詞的解析,必須獲得每一個字的起始時間,持續(xù)時 間。 一個KOK文件解析完成,也會形成一個鏈表,每一個節(jié)點是一 句歌詞,這個節(jié)點包含這一句的開始時間(用于每句歌詞之間的切 換)、歌詞的內(nèi)容、以及一個時間軸鏈表,這個時間軸鏈表的每個節(jié) 點是句子中每個字的開始時間和持續(xù)時間。關(guān)于持續(xù)時間,可以以毫秒為單位進行保存,也可以轉(zhuǎn)換為相應(yīng) 的時間單位。由于在顯示時,字同步的文件需要進行顏色的滾動,標 志當前歌唱的進度,顏色的滾動必定以一定的時間片段起定時器,持 續(xù)時間可以保存為這個定時器的時間單位,比如上述例子中第一句話的第一個字"我,,,持續(xù)時間是42110 - 41870 = 240毫秒,如果顏色 滾動的定時器以50毫秒為間隔,那么這個字的時間單位可以保存為步驟102,歌曲播放過程中,獲得精確的當前時間信息,參照歌 詞鏈表,獲得當前顯示的歌詞內(nèi)容。播放過程中,可以采取兩種方式獲得歌詞,查詢方式和通知方式。l)查詢方式每間隔一段時間即獲取當前播放時間,在歌詞鏈 表中找出與當前時間匹配的開始時間,確定該開始時間對應(yīng)節(jié)點中包 含的歌詞文本內(nèi)容為顯示內(nèi)容。具體可以設(shè)置一個用于計算播放時間的定時器,定時器每隔一段時間發(fā)送一次查詢消息,該消息可以是一個簡單的中斷信號;開始播放時,在收到查詢消息后,根據(jù)定時器獲取當前的播放時 間,按照該時間遍歷歌詞鏈表,找到該時間下的歌詞鏈表節(jié)點,然后 取出該節(jié)點的歌詞字符串備用。以后每次查詢消息來到時,對比當前 時間和下一個節(jié)點句子的開始時間,如果下一句的開始時間等于或小 于定時器當前時間,則取出該節(jié)點的歌詞字符串備用;否則保持當前 節(jié)點的歌詞字符串。其中,所述定時器主要是用來計算當前播放時間的,也用于數(shù)字 終端音樂播放器界面的相關(guān)時間顯示。歌曲播放開始時定時器啟動, 播放結(jié)束時停止。定時器查詢消息到來時對比當前時間和下一句句子 的開始時間,如果下一句句子的開始時間等于或小于定時器當前時 間,則需要更新屏幕,將新的句子顯示到屏幕上。定時器精度根據(jù)軟硬件平臺的性能不同可以取不同的值,在查詢 方式下,由于需要在下句句子到來時比較及時地更新屏幕,因此需要 對顯示的誤差進行評估,比如,下句句子開始的時候,新的定時器消 息尚未到來,而歌曲中已經(jīng)開始唱出下一句歌詞,如果這個間隔較 長,用戶就可以感覺到屏幕顯示的歌詞和音樂失步了。這個時間,根據(jù)經(jīng)驗,300毫秒以下幾乎沒有感覺,500毫秒時可以感覺到失步。 由于每次定時器消息到來時都會進行運算,如果設(shè)置過高的定時器精 度,將會加重CPU的負擔,嚴重的情況,甚至可能干擾歌曲本身的 解碼(mp3軟解碼解決方案),因此,需要根據(jù)軟硬件性能和用戶 體驗設(shè)置合理的定時器精度,在本發(fā)明較佳的實施例中,使用的是 200毫秒的精度。以上過程對于句同步文件和字同步文件都適用。2)通知方式對于句同步文件將下一個節(jié)點歌詞的開始時間減去當前歌詞的開始時間得到當前 這句歌詞的持續(xù)時間,設(shè)置一個定時器,其時長為該持續(xù)時間的長度;歌曲播放開始時,當前播放字符的指針指向歌詞鏈表的表頭,設(shè) 置定時器的時長為上述持續(xù)時間,定時器啟動;定時器結(jié)束時,發(fā)送 通知消息,將指針指向下一個節(jié)點,返回上一步(將下一個節(jié)點歌詞 的開始時間減去當前歌詞的開始時間得到當前這句歌詞的持續(xù)時間,其時長為該持續(xù)時間的長度),為定時器重新設(shè)置時長,并重新啟動 定時器。參見圖2所示,歌曲播放開始時,指針指向第一個節(jié)點對應(yīng) 的第一句歌詞,定時器結(jié)束后指針指向第二句歌詞,以后依此類推。 對于字同步文件從當前歌詞鏈表節(jié)點中獲取時間軸鏈表,從中獲取每個字的開始 時間和持續(xù)時間;歌曲開始播放時,當前播放字符的指針指向歌詞鏈表的表頭,并 從其中的時間軸鏈表的表頭取出第 一個字的持續(xù)時間,設(shè)置定時器的時長為該持續(xù)時間,啟動定時器;定時器結(jié)束時,發(fā)送通知消息,將 當前播放字符指針指向歌詞鏈表的下一個字,并從時間軸鏈表的下一 個節(jié)點取出下一個字的播放持續(xù)時間,再次啟動定時器。參見圖3所 示,歌曲播放開始時,指針指向第一句歌詞的第一個字,定時器啟 動,當定時器結(jié)束后,指針指向第二個字,以后依此類推。步驟103,歌詞的顯示。對于句同步文件如果步驟102采用查詢方式,顯示當前取出的歌詞字符串; 如果步驟102采用通知方式,顯示當前指針指向的歌詞。 對于字同步文件如果步驟102采用查詢方式,顯示取出的當前句歌詞的字符串; 另外,還從當前歌詞鏈表節(jié)點中獲取時間軸鏈表,從中獲取每個字的 開始時間和持續(xù)時間;每次定時器的查詢消息來到時,獲取當前時 間,根據(jù)每個字的開始時間和持續(xù)時間判斷當前歌曲唱到了那個字 符,以及這個字符當前已經(jīng)被歌唱了多少百分比,從而計算出顏色滾 動的坐標,用預先設(shè)定的顏色填充對應(yīng)的文字區(qū)域。如果步驟102釆用通知方式,顯示當前指針指向字所在句的歌 詞,即當前指針指示的歌詞鏈表節(jié)點的歌詞文本;另外,定時器每隔 一段時間還發(fā)送第二通知消息,其步長可以是分色顯示時的時間片長 度,這個第二通知消息到來,意味著一個時間片的結(jié)束,判斷這個字 符當前已經(jīng)被歌唱了的百分比,需要計算新的坐標,用預先設(shè)定的顏 色填充對應(yīng)的文字區(qū)域,進行分色顯示。另外,上述步驟也可以采用另一個定時器來完成,該定時器在每 個字的開始時間到來時,定時器啟動,持續(xù)時間結(jié)束時第二定時器關(guān) 閉,定時器的步長可以是分色顯示時的時間片長度。在運算速度并不是很快的嵌入式系統(tǒng)中,畫屏是一個非常消耗系 統(tǒng)資源的操作。例如在PHS系統(tǒng)中,畫屏是通過GUI層實現(xiàn)的, 一般的做法,需要將顯示的內(nèi)容傳給GUI層,再由GUI層經(jīng)過處理
后調(diào)用BIOS的接口操作顯存。這個過程有大量的運算,而且,最關(guān) 鍵的一點是,在KOK格式的字同步顯示中,通常的GUI不存在一 個字符可以分色顯示的函數(shù),設(shè)備上下文(DC)只能設(shè)置一個前景 色。為了解決這個問題,本發(fā)明實施例采用了二級顯存的方式。顯示 一句歌詞之前,將當前句的字符串,連同屏幕的背景一起,拷貝到二 級顯存當中,在顯示這句歌詞時,因為在解析KOK文件時,為這句 歌詞也建立了一個時間軸,這個關(guān)于字符的時間軸已經(jīng)包含了每個字 符的起始時間、持續(xù)時間片數(shù)量,因此,可以由當前時間計算得出當 前歌曲歌唱到了這句話的哪個字符,以及這個字符當前已經(jīng)被歌唱了 多少百分比。以上述例子中第一句第一個字"我"為例說明,"我"這個字開 始時間為41870ms,持續(xù)時間為240ms,假設(shè)播放器為字同步顏色滾 動設(shè)置的第二定時器時間為50ms,那么,這個字持續(xù)的時間片數(shù)量 就是5個,那么,第一個時間片結(jié)束時,這個字被唱了 1/5,第二個 時間片結(jié)束時,這個字被唱了 2/5......,直到5個時間片結(jié)束后開始顯示"在"字。當每個時間片結(jié)束時,由計算出的百分比計算出顏色滾動的坐 標,假設(shè)"我"字的橫坐標是IO,使用16x16的字體,那么在第一 個時間片結(jié)束時,顏色需要覆蓋的坐標就是10+16*1/5 = 13;第二個 時間片結(jié)束時,這個坐標就是10+16*2/5 = 16……求得這個坐標以后,在開辟的二級顯存中用預先設(shè)定的顏色填充 對應(yīng)的文字區(qū)域,參見圖4所示,然后調(diào)用BIOS的接口復制到終端 的顯存中,即可達到同步滾動的卡拉OK效果。這樣做的好處是,效率較高一一省去了不少中間環(huán)節(jié);機動靈 活一一因為不同平臺的能力不同,通過調(diào)節(jié)時間片的長度,可以獲得 最佳的顯示效果?;谏鲜龇椒ū景l(fā)明還提供了 一種實現(xiàn)歌曲播放過程中歌詞同步 的裝置,其較佳實施方案參見圖5所示,包括 歌詞文件解析模塊501,用于解析歌詞文件,并將解析得到的歌 詞時間信息與歌詞文本內(nèi)容對應(yīng)地保存在存儲模塊中。其中歌詞解析 過程主要包括識別歌詞文件中的時間標簽,將時間標簽轉(zhuǎn)換為時間 信息值;識別歌詞文件中的文本內(nèi)容,獲得歌詞的文本內(nèi)容。存儲模塊502,用于將歌詞時間信息和歌詞文本內(nèi)容以時間鏈表 的形式保存。其中,歌詞鏈表可以是由按時間順序排列的節(jié)點組成, 每個節(jié)點中的內(nèi)容可以是一句歌詞的開始時間和該句歌詞的文本內(nèi) 容。歌詞內(nèi)容同步獲取模塊503,用于在歌曲播放過程中,獲取當前 播放的時間,查詢存儲模塊502中的歌詞鏈表,通過時間信息與歌詞 文本的對應(yīng)關(guān)系確定當前時間對應(yīng)的歌詞文本內(nèi)容。歌詞同步顯示模塊504,用于對當前時間下歌詞內(nèi)容同步獲取模 塊503所確定的歌詞文本內(nèi)容進行同步顯示。另外,還可以在該裝置中增加定時器,分別與歌詞內(nèi)容同步獲取 模塊503、歌詞同步顯示模塊504等模塊相連,來滿足上述歌詞內(nèi)容 同步確定和歌詞顯示等功能的需求。本發(fā)明的以上方法和裝置都可應(yīng)用于數(shù)字終端,特別是移動終端中。本發(fā)明的描述是為了示例和描述起見而給出的,而并不是無遺漏 的或者將本發(fā)明限于所公開的形式。很多修改和變化對于本領(lǐng)域的普通技術(shù)人員而言是顯然的。選擇和描述實施例是為了更好說明本發(fā)明 的原理和實際應(yīng)用,并且使本領(lǐng)域的普通技術(shù)人員能夠理解本發(fā)明從 而設(shè)計適于特定用途的帶有各種修改的各種實施例。
權(quán)利要求
1.一種實現(xiàn)歌曲播放過程中歌詞同步的方法,其特征在于,包括A.解析歌詞文件,將得到的歌詞時間信息與歌詞文本內(nèi)容對應(yīng)地保存為歌詞鏈表;B.歌曲播放過程中,獲取當前播放的時間,查詢歌詞鏈表,通過時間信息與歌詞文本的對應(yīng)關(guān)系,確定當前時間對應(yīng)的歌詞文本內(nèi)容;C.顯示所確定的歌詞文本內(nèi)容。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟A所述解析 過程包括識別歌詞文件中的時間標簽,將時間標簽轉(zhuǎn)換為時間信息值; 識別歌詞文件中的文本內(nèi)容,獲得歌詞的文本內(nèi)容。
3. 根據(jù)權(quán)利要求1或2所述的方法,其特征在于,步驟A所述 解析過程進一步包括根據(jù)文件格式,識別歌詞文件是字同步文件還 是句同步文件。
4. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述歌詞鏈表的 每個節(jié)點中至少包含 一句歌詞開始時間和該句歌詞的文本內(nèi)容。
5. 根據(jù)權(quán)利要求4所述的方法,其特征在于,步驟B所述確定 當前時間對應(yīng)歌詞文本內(nèi)容的過程包括每間隔一段時間即獲取當前 播放時間,在歌詞鏈表中找出與當前時間匹配的開始時間,確定該開 始時間對應(yīng)節(jié)點中包含的歌詞文本內(nèi)容為顯示內(nèi)容。
6. 根據(jù)權(quán)利要求5所述的方法,其特征在于,所述在歌詞鏈表 中找出與當前時間匹配的開始時間的過程包括將當前時間與下一節(jié) 點中的開始時間進行比較,如果下一節(jié)點歌詞的開始時間小于等于當 前播放時間,則確定下一節(jié)點中的歌詞文本內(nèi)容為顯示歌詞內(nèi)容,否 則,仍然確定當前節(jié)點中的歌詞文本內(nèi)容為顯示內(nèi)容。
7. 根據(jù)權(quán)利要求4所述的方法,其特征在于,步驟B所述確定 當前時間對應(yīng)歌詞文本內(nèi)容的過程包括將下一個節(jié)點歌詞的開始時間減去當前歌詞的開始時間得到當前 這句歌詞的持續(xù)時間;設(shè)置一個定時器,歌曲播放開始時,當前播放字符的指針指向歌 詞鏈表的表頭,設(shè)置定時器的時長為上述持續(xù)時間,定時器啟動;定 時器結(jié)束時,發(fā)送通知消息,將指針指向下一個節(jié)點,返回上一步為 定時器重新設(shè)置時長,并重新啟動定時器。
8. 根據(jù)權(quán)利要求5至7任意一項所述的方法,其特征在于,所 述歌詞文件為句同步文件,所述時間信息為每句歌詞的開始時間;所述歌詞鏈表的每個節(jié)點中包含 一句歌詞開始時間和該句歌詞 的文本內(nèi)容。
9. 根據(jù)權(quán)利要求5或6所述的方法,其特征在于,所述歌詞文 件為字同步文件,所述時間信息包括每句歌詞的開始時間、以及句子 中每個字的開始時間和持續(xù)時間;所述歌詞鏈表的每個節(jié)點中包含 一句歌詞的開始時間、該句歌 詞的文本內(nèi)容、以及時間軸鏈表;時間軸鏈表中包含該句歌詞中每個 字的開始時間和持續(xù)時間。
10. 根據(jù)權(quán)利要求9所述的方法,其特征在于,所述歌詞文件為 字同步文件,所述步驟C還包括從當前歌詞鏈表節(jié)點中獲取時間 軸鏈表,從中獲取每個字的開始時間和持續(xù)時間;每次間隔一段時 間,獲取當前時間,根據(jù)每個字的開始時間和持續(xù)時間判斷當前歌曲 唱到了那個字符,以及這個字符當前已經(jīng)被歌唱了的百分比,計算出 顏色滾動的坐標,用預先設(shè)定的顏色填充坐標對應(yīng)的文字區(qū)域。
11. 根據(jù)權(quán)利要求4所述的方法,其特征在于,所述歌詞文件為 字同步文件,所述時間信息包括每句歌詞的開始時間、以及句子中每 個字的開始時間和持續(xù)時間;所述歌詞鏈表的每個節(jié)點中包含 一句 歌詞的開始時間、該句歌詞的文本內(nèi)容、以及時間軸鏈表;時間軸鏈 表中包含該句歌詞中每個字的開始時間和持續(xù)時間;步驟B所述確定當前時間對應(yīng)歌詞文本內(nèi)容的過程包括 從當前歌詞鏈表節(jié)點中獲取時間軸鏈表,從中獲取每個字的開始時間和持續(xù)時間;歌曲開始播放時,當前播放字符的指針指向歌詞鏈表的表頭,并 從其中的時間軸鏈表的表頭取出第一個字的持續(xù)時間,設(shè)置定時器的 時長為該持續(xù)時間,啟動定時器;定時器結(jié)束時,發(fā)送通知消息,將 當前播放字符指針指向歌詞鏈表的下一個字,并從時間軸鏈表的下一 個節(jié)點取出下一個字的持續(xù)時間,再次啟動定時器。
12. 根據(jù)權(quán)利要求ll所述的方法,其特征在于,所述步驟C還 包括所述定時器每隔一段時間還發(fā)送第二通知消息,每次第二通知 消息到來時,判斷這個字符當前已經(jīng)被歌唱了的百分比,計算新的顏 色滾動坐標,用預先設(shè)定的顏色填充對應(yīng)的文字區(qū)域。
13. 根據(jù)權(quán)利要求12所述的方法,其特征在于,所述第二通知 消息的步長可以是分色顯示時的時間片長度。
14. 根據(jù)權(quán)利要求1所述的方法,其特征在于,設(shè)置二級緩存, 步驟C中,將步驟B中確定歌詞文本內(nèi)容拷貝到二級緩存中執(zhí)行對 該文本內(nèi)容在顯示前的處理,然后復制到播放設(shè)備的顯存中。
15. 根據(jù)權(quán)利要求1、 2、 4~7、 14任意一項所述的方法,其特 征在于,該方法應(yīng)用于移動終端。
16. —種實現(xiàn)歌曲播放過程中歌詞同步的裝置,其特征在于,包括歌詞文件解析模塊(501),用于解析歌詞文件,并將解析得到 的歌詞時間信息與歌詞文本內(nèi)容對應(yīng)地保存在存儲模塊502中;存儲模塊(502 ),用于將歌詞時間信息和歌詞文本內(nèi)容以時間 鏈表的形式保存;歌詞內(nèi)容同步獲取模塊(503),用于在歌曲播放過程中,獲取 當前播放的時間,查詢存儲模塊(502 )中的歌詞鏈表,通過時間信 息與歌詞文本的對應(yīng)關(guān)系確定當前時間對應(yīng)的歌詞文本內(nèi)容;歌詞同步顯示模塊(504 ),用于對當前時間下歌詞內(nèi)容同步獲 取模塊503所確定的歌詞文本內(nèi)容進行同步顯示。
17. 根據(jù)權(quán)利要求16所述的裝置,其特征在于,所述歌詞文件 解析模塊(501)的歌詞解析過程包括識別歌詞文件中的時間標 簽,將時間標簽轉(zhuǎn)換為時間信息值;識別歌詞文件中的文本內(nèi)容,獲 得歌詞的文本內(nèi)容。
18. 根據(jù)權(quán)利要求16所述的裝置,其特征在于,所述歌詞鏈表 的每個節(jié)點中至少包含 一句歌詞開始時間和該句歌詞的文本內(nèi)容。
19. 根據(jù)權(quán)利要求18所述的裝置,其特征在于,該裝置還包括 定時器;所述歌詞內(nèi)容同步獲取模塊(503)每間隔一段時間從定時器獲 取當前播放時間,在存儲模塊(502 )的歌詞鏈表中找出與當前時間 匹配的開始時間,將該開始時間對應(yīng)節(jié)點中包含的歌詞文本內(nèi)容確定 為顯示內(nèi)容。
20. 根據(jù)權(quán)利要求19所述的裝置,其特征在于,所述歌詞內(nèi)容 同步獲取模塊(503 )找出與當前時間匹配的開始時間的過程為歌 詞內(nèi)容同步獲取模塊(503)將當前時間與歌詞鏈表下一節(jié)點中的開 始時間進行比較,如果下一節(jié)點歌詞的開始時間小于等于當前播放時 間,則確定下一節(jié)點中的歌詞文本內(nèi)容為顯示歌詞內(nèi)容,否則,仍然 確定當前節(jié)點中的歌詞文本內(nèi)容為顯示內(nèi)容。
21. 根據(jù)權(quán)利要求18所述的裝置,其特征在于,該裝置還包括 定時器;所述歌詞內(nèi)容同步獲取模塊(503 )將下一個節(jié)點歌詞的開始時 間減去當前歌詞的開始時間得到當前這句歌詞的持續(xù)時間;歌詞內(nèi)容同步獲取模塊(503 )在歌曲播放開始時,將當前播放 字符的指針指向存儲模塊(502 )中歌詞鏈表的表頭,設(shè)置定時器的 時長為上述持續(xù)時間,定時器啟動;定時器結(jié)束時,向歌詞內(nèi)容同步 獲取模塊(503)發(fā)送通知消息,歌詞內(nèi)容同步獲取模塊(503)將指 針指向下一個節(jié)點,歌詞內(nèi)容同步獲取模塊(503)為定時器重新設(shè) 置時長,并重新啟動定時器。
22. 根據(jù)權(quán)利要求19至21任意一項所述的裝置,其特征在于, 所述歌詞文件為句同步文件,所述時間信息為每句歌詞的開始時間;所述歌詞鏈表的每個節(jié)點中包含 一句歌詞開始時間和該句歌詞 的文本內(nèi)容。
23. 根據(jù)權(quán)利要求19或20所述的裝置,其特征在于,所述歌詞 文件為字同步文件,所述時間信息包括每句歌詞的開始時間、以及句 子中每個字的開始時間和持續(xù)時間;所述歌詞鏈表的每個節(jié)點中包含 一句歌詞的開始時間、該句歌 詞的文本內(nèi)容、以及時間軸鏈表;時間軸鏈表中包含該句歌詞中每個 字的開始時間和持續(xù)時間。
24. 根據(jù)權(quán)利要求23所述的裝置,其特征在于,所述歌詞文件 為字同步文件,所述歌詞同步顯示模塊(504 )從當前歌詞鏈表節(jié)點 中獲取時間軸鏈表,從中獲取每個字的開始時間和持續(xù)時間;每次間 隔 一 段時間獲取當前時間,根據(jù)每個字的開始時間和持續(xù)時間判斷當 前歌曲唱到了那個字符,以及這個字符當前已經(jīng)被歌唱了的百分比, 計算出顏色滾動的坐標,用預先設(shè)定的顏色填充坐標對應(yīng)的文字區(qū) 域。
25. 根據(jù)權(quán)利要求18所述的裝置,其特征在于,所述歌詞文件 為字同步文件,所述時間信息包括每句歌詞的開始時間、以及句子中 每個字的開始時間和持續(xù)時間;所述歌詞鏈表的每個節(jié)點中包含一 句歌詞的開始時間、該句歌詞的文本內(nèi)容、以及時間軸鏈表;時間軸 鏈表中包含該句歌詞中每個字的開始時間和持續(xù)時間;所述歌詞內(nèi)容同步獲取模塊(503 )從當前歌詞鏈表節(jié)點中獲取 時間軸鏈表,從中獲取每個字的開始時間和持續(xù)時間;歌曲開始播放 時,當前播放字符的指針指向歌詞鏈表的表頭,并從其中的時間軸鏈 表的表頭取出第一個字的持續(xù)時間,設(shè)置定時器的時長為該持續(xù)時 間,啟動定時器;定時器結(jié)束時,發(fā)送通知消息,將當前播放字符指 針指向歌詞鏈表的下一個字,并從時間軸鏈表的下一個節(jié)點取出下一 個字的持續(xù)時間,再次啟動定時器。
26. 根據(jù)權(quán)利要求25所述的裝置,其特征在于,所述定時器每 隔一段時間還發(fā)送第二通知消息,每次第二通知消息到來時,所述歌 詞同步顯示模塊(504 )判斷這個字符當前已經(jīng)被歌唱了的百分比, 計算新的顏色滾動坐標,用預先設(shè)定的顏色填充對應(yīng)的文字區(qū)域。
27. 根據(jù)權(quán)利要求26所述的裝置,其特征在于,所述第二通知 消息的步長可以是分色顯示時的時間片長度。
28. 根據(jù)權(quán)利要求16所述的裝置,其特征在于,設(shè)置二級緩 存,歌詞同步顯示模塊(504 )將確定的歌詞文本內(nèi)容拷貝到二級緩 存中執(zhí)行對該文本內(nèi)容在顯示前的處理,然后復制到播放設(shè)備的顯存 中。
29. 根據(jù)權(quán)利要求16~21、 28任意一項所述的裝置,其特征在 于,該裝置設(shè)置于移動終端中。
全文摘要
本發(fā)明公開一種實現(xiàn)歌曲播放過程中歌詞同步的方法和裝置,主要包括解析歌詞文件,將得到的歌詞時間信息與歌詞文本內(nèi)容對應(yīng)地保存為歌詞鏈表;歌曲播放過程中,獲取當前播放的時間,查詢歌詞鏈表通過時間信息與歌詞文本的對應(yīng)關(guān)系,確定當前時間對應(yīng)的歌詞文本內(nèi)容;顯示所確定的歌詞文本內(nèi)容。本發(fā)明不依賴高端的解碼芯片支持,能夠在普通數(shù)字終端上實現(xiàn)歌曲播放過程中歌詞同步。
文檔編號G10L21/06GK101127210SQ20071015377
公開日2008年2月20日 申請日期2007年9月20日 優(yōu)先權(quán)日2007年9月20日
發(fā)明者曹金男 申請人:Ut斯達康通訊有限公司