在Flash中用as實現(xiàn)lrc歌詞動態(tài)顯示
更新時間:2007年03月20日 00:00:00 作者:
Winplay中可以使用LRC插件來實現(xiàn)歌詞的動態(tài)顯示,在FLASH中也可以[演示],選擇一首排行版的歌曲,比較容易看到。
如果你細(xì)心,用記事本打開一個LRC文件,他的文件格式如下:
[ti:東風(fēng)破]
[ar:周杰倫]
[al:葉惠美]
[by:葉澤生]
[offset:500]
[00:00.00]東風(fēng)破
[00:03.22]
[00:05.46]周杰倫
[00:07.37]詞:方文山 曲:周杰倫
[00:10.27]LRC:葉澤生
[00:12.45]
[00:13.88]一盞離愁孤單佇立在窗口
[00:20.20]我在門后假裝你人還沒走
[00:26.52]舊地如重游月圓更寂寞
[00:32.98]夜半清醒的燭火不忍苛責(zé)我
[00:40.04]一壺漂泊浪跡天涯難入喉
[00:46.47]你走之后酒暖回憶思念瘦
[00:52.93]水向東流時間怎么偷
[00:59.28]花開就一次成熟我卻錯過
[01:06.31]
[03:50.68][02:58.31][01:09.30]誰在用琵琶彈奏一曲東風(fēng)破
[03:57.23][03:04.88][01:16.23]歲月在墻上剝落看見小時候
[04:03.55][03:11.11][01:22.58]猶記得那年我們都還很年幼
[04:10.30][03:17.62][01:28.87]而如今琴聲幽幽我的等候你沒聽過
[04:17.07][03:24.50][01:36.08]誰在用琵琶彈奏一曲東風(fēng)破
[04:23.67][03:30.95][01:42.30]楓葉將故事染色結(jié)局我看透
[04:30.02][03:37.35][01:48.88]籬笆外的古道我牽著你走過
[04:36.69][01:55.52]荒煙漫草的年頭就連分手都很沉默
[05:01.62][02:07.25][02:15.36]
[02:27.75]一壺漂泊浪跡天涯難入喉
[02:35.15]你走之后酒暖回憶思念瘦
[02:41.54]水向東流時間怎么偷
[02:48.06]花開就一次成熟我卻錯過
[05:09.43][04:49.63][02:57.23]
[03:43.97]荒煙漫草的年頭就連分手都
這個東西如果FLASH讀比較麻煩,但如果的VBS的正則表達(dá)式就比較方便,將結(jié)果輸出成下面的樣子:
<?xml version="1.0" encoding="GB2312" standalone="yes"?>
<!DOCTYPE MUSIC [
<!ELEMENT MUSIC (ARTIST, TITLE, ALBUM, LANGUAGE, EDITER, OFFSET, LYRICS)>
<!ELEMENT ARTIST (#PCDATA)>
<!ELEMENT TITLE (#PCDATA)>
<!ELEMENT ALBUM (#PCDATA)>
<!ELEMENT LANGUAGE (#PCDATA)>
<!ELEMENT EDITER (#PCDATA)>
<!ELEMENT OFFSET (#PCDATA)>
<!ELEMENT LYRICS (LRC)*>
<!ELEMENT LRC (#PCDATA)>
<!ATTLIST LRC
TAG CDATA #REQUIRED>
]>
<MUSIC>
<ARTIST>周杰倫</ARTIST>
<TITLE>東風(fēng)破</TITLE>
<ALBUM>葉惠美</ALBUM>
<LANGUAGE></LANGUAGE>
<EDITER>葉澤生</EDITER>
<OFFSET>500</OFFSET>
<LYRICS>
<LRC TAG="0">東風(fēng)破</LRC>
<LRC TAG="3220"></LRC>
<LRC TAG="5460">周杰倫</LRC>
<LRC TAG="7370">詞:方文山 曲:周杰倫 </LRC>
<LRC TAG="10270">LRC:葉澤生</LRC>
<LRC TAG="12450"></LRC>
<LRC TAG="13880">一盞離愁孤單佇立在窗口</LRC>
<LRC TAG="20200">我在門后假裝你人還沒走</LRC>
<LRC TAG="26520">舊地如重游月圓更寂寞</LRC>
<LRC TAG="32980">夜半清醒的燭火不忍苛責(zé)我</LRC>
<LRC TAG="40040">一壺漂泊浪跡天涯難入喉</LRC>
<LRC TAG="46470">你走之后酒暖回憶思念瘦</LRC>
<LRC TAG="52930">水向東流時間怎么偷</LRC>
<LRC TAG="59280">花開就一次成熟我卻錯過</LRC>
<LRC TAG="66310"></LRC>
<LRC TAG="69300">誰在用琵琶彈奏一曲東風(fēng)破</LRC>
<LRC TAG="76230">歲月在墻上剝落看見小時候</LRC>
<LRC TAG="82580">猶記得那年我們都還很年幼</LRC>
<LRC TAG="88870">而如今琴聲幽幽我的等候你沒聽過</LRC>
<LRC TAG="96080">誰在用琵琶彈奏一曲東風(fēng)破</LRC>
<LRC TAG="102300">楓葉將故事染色結(jié)局我看透</LRC>
<LRC TAG="108880">籬笆外的古道我牽著你走過</LRC>
<LRC TAG="115520">荒煙漫草的年頭就連分手都很沉默</LRC>
<LRC TAG="127250"></LRC>
<LRC TAG="135360"></LRC>
<LRC TAG="147750">一壺漂泊浪跡天涯難入喉</LRC>
<LRC TAG="155150">你走之后酒暖回憶思念瘦</LRC>
<LRC TAG="161540">水向東流時間怎么偷</LRC>
<LRC TAG="168060">花開就一次成熟我卻錯過</LRC>
<LRC TAG="177230"></LRC>
<LRC TAG="178310">誰在用琵琶彈奏一曲東風(fēng)破</LRC>
<LRC TAG="184880">歲月在墻上剝落看見小時候</LRC>
<LRC TAG="191110">猶記得那年我們都還很年幼</LRC>
<LRC TAG="197620">而如今琴聲幽幽我的等候你沒聽過</LRC>
<LRC TAG="204500">誰在用琵琶彈奏一曲東風(fēng)破</LRC>
<LRC TAG="210950">楓葉將故事染色結(jié)局我看透</LRC>
<LRC TAG="217350">籬笆外的古道我牽著你走過</LRC>
<LRC TAG="223970">荒煙漫草的年頭就連分手都</LRC>
<LRC TAG="230680">誰在用琵琶彈奏一曲東風(fēng)破</LRC>
<LRC TAG="237230">歲月在墻上剝落看見小時候</LRC>
<LRC TAG="243550">猶記得那年我們都還很年幼</LRC>
<LRC TAG="250300">而如今琴聲幽幽我的等候你沒聽過</LRC>
<LRC TAG="257070">誰在用琵琶彈奏一曲東風(fēng)破</LRC>
<LRC TAG="263670">楓葉將故事染色結(jié)局我看透</LRC>
<LRC TAG="270020">籬笆外的古道我牽著你走過</LRC>
<LRC TAG="276690">荒煙漫草的年頭就連分手都很沉默</LRC>
<LRC TAG="289630"></LRC>
<LRC TAG="301620"></LRC>
<LRC TAG="309430"></LRC>
</LYRICS>
</MUSIC>
采用FLASH的XML讀取,他將十分的便捷。
Music_word_arr = new Array();
//新的數(shù)組,存放歌詞
Music_word_xml = new XML();
//新的XML對象,也就是存放上面所說的XML
Music_word_xml.ignoreWhite = true;
Music_word_xml.onLoad = function(success) {
if (success) {
var tracks_xml = Music_word_xml.firstChild;
var LRC = tracks_xml.childNodes[tracks_xml.childNodes.length-1];
for (var i = 0; i<LRC.childNodes.length; i++) {
var time = LRC.childNodes[i].attributes.TAG;
//獲取時間
var geci = LRC.childNodes[i].childNodes;
//獲取歌詞
Music_word_arr.push({Time:time, Word:geci});
//將時間信息及歌詞存在Music_word_arr數(shù)組中
}
Show_Word();
//輸出
} else {
trace("Error loading MusicWord.");
//如果沒有加載,則顯示錯誤
}
delete Music_word_xml;
//刪除XML對象
};
Music_word_xml.load(URL);
現(xiàn)在我們該說說如何讓歌詞與歌曲同步。
還是看代碼吧,代碼說明一切:
function Show_Word() {
t = 0;
Word.text = "";
music_word = new Object();
//循環(huán)對象
music_word.interval = function() {
var zs = mySound.position/100;
if (int(Music_word_arr[t].Time/100) == int(zs)) {
if (Music_word_arr[t].Word == "" || Music_word_arr[t].Word == null) {
Word.text = "";
} else {
Word.text = Music_word_arr[t].Word;
}
t++;
}
if (int(Music_word_arr[t].Time/100)<int(zs)) {
t++;
}
};
music_word_n = setInterval(music_word, "interval", 10);
}
應(yīng)該很容易看懂,因為不長,值得注意的地方有一個:
if (int(Music_word_arr[t].Time/100)<int(zs)) {
t++;
}
這行代碼有什么用?他主要用來解決歌曲播放了,而歌詞還沒有加載,在這個時候,他就負(fù)責(zé)讓歌詞追上歌曲播放進(jìn)度,而不要讓歌曲等他。其實他還有一個更重要的功能,我想做過播放器的人應(yīng)該都會知道,在這里我就不說了,你自己想想吧,哈哈~~~~~(好象有些不對??¥%¥# 有不明物體降落……啊~?。。。。。?
如果你細(xì)心,用記事本打開一個LRC文件,他的文件格式如下:
[ti:東風(fēng)破]
[ar:周杰倫]
[al:葉惠美]
[by:葉澤生]
[offset:500]
[00:00.00]東風(fēng)破
[00:03.22]
[00:05.46]周杰倫
[00:07.37]詞:方文山 曲:周杰倫
[00:10.27]LRC:葉澤生
[00:12.45]
[00:13.88]一盞離愁孤單佇立在窗口
[00:20.20]我在門后假裝你人還沒走
[00:26.52]舊地如重游月圓更寂寞
[00:32.98]夜半清醒的燭火不忍苛責(zé)我
[00:40.04]一壺漂泊浪跡天涯難入喉
[00:46.47]你走之后酒暖回憶思念瘦
[00:52.93]水向東流時間怎么偷
[00:59.28]花開就一次成熟我卻錯過
[01:06.31]
[03:50.68][02:58.31][01:09.30]誰在用琵琶彈奏一曲東風(fēng)破
[03:57.23][03:04.88][01:16.23]歲月在墻上剝落看見小時候
[04:03.55][03:11.11][01:22.58]猶記得那年我們都還很年幼
[04:10.30][03:17.62][01:28.87]而如今琴聲幽幽我的等候你沒聽過
[04:17.07][03:24.50][01:36.08]誰在用琵琶彈奏一曲東風(fēng)破
[04:23.67][03:30.95][01:42.30]楓葉將故事染色結(jié)局我看透
[04:30.02][03:37.35][01:48.88]籬笆外的古道我牽著你走過
[04:36.69][01:55.52]荒煙漫草的年頭就連分手都很沉默
[05:01.62][02:07.25][02:15.36]
[02:27.75]一壺漂泊浪跡天涯難入喉
[02:35.15]你走之后酒暖回憶思念瘦
[02:41.54]水向東流時間怎么偷
[02:48.06]花開就一次成熟我卻錯過
[05:09.43][04:49.63][02:57.23]
[03:43.97]荒煙漫草的年頭就連分手都
這個東西如果FLASH讀比較麻煩,但如果的VBS的正則表達(dá)式就比較方便,將結(jié)果輸出成下面的樣子:
<?xml version="1.0" encoding="GB2312" standalone="yes"?>
<!DOCTYPE MUSIC [
<!ELEMENT MUSIC (ARTIST, TITLE, ALBUM, LANGUAGE, EDITER, OFFSET, LYRICS)>
<!ELEMENT ARTIST (#PCDATA)>
<!ELEMENT TITLE (#PCDATA)>
<!ELEMENT ALBUM (#PCDATA)>
<!ELEMENT LANGUAGE (#PCDATA)>
<!ELEMENT EDITER (#PCDATA)>
<!ELEMENT OFFSET (#PCDATA)>
<!ELEMENT LYRICS (LRC)*>
<!ELEMENT LRC (#PCDATA)>
<!ATTLIST LRC
TAG CDATA #REQUIRED>
]>
<MUSIC>
<ARTIST>周杰倫</ARTIST>
<TITLE>東風(fēng)破</TITLE>
<ALBUM>葉惠美</ALBUM>
<LANGUAGE></LANGUAGE>
<EDITER>葉澤生</EDITER>
<OFFSET>500</OFFSET>
<LYRICS>
<LRC TAG="0">東風(fēng)破</LRC>
<LRC TAG="3220"></LRC>
<LRC TAG="5460">周杰倫</LRC>
<LRC TAG="7370">詞:方文山 曲:周杰倫 </LRC>
<LRC TAG="10270">LRC:葉澤生</LRC>
<LRC TAG="12450"></LRC>
<LRC TAG="13880">一盞離愁孤單佇立在窗口</LRC>
<LRC TAG="20200">我在門后假裝你人還沒走</LRC>
<LRC TAG="26520">舊地如重游月圓更寂寞</LRC>
<LRC TAG="32980">夜半清醒的燭火不忍苛責(zé)我</LRC>
<LRC TAG="40040">一壺漂泊浪跡天涯難入喉</LRC>
<LRC TAG="46470">你走之后酒暖回憶思念瘦</LRC>
<LRC TAG="52930">水向東流時間怎么偷</LRC>
<LRC TAG="59280">花開就一次成熟我卻錯過</LRC>
<LRC TAG="66310"></LRC>
<LRC TAG="69300">誰在用琵琶彈奏一曲東風(fēng)破</LRC>
<LRC TAG="76230">歲月在墻上剝落看見小時候</LRC>
<LRC TAG="82580">猶記得那年我們都還很年幼</LRC>
<LRC TAG="88870">而如今琴聲幽幽我的等候你沒聽過</LRC>
<LRC TAG="96080">誰在用琵琶彈奏一曲東風(fēng)破</LRC>
<LRC TAG="102300">楓葉將故事染色結(jié)局我看透</LRC>
<LRC TAG="108880">籬笆外的古道我牽著你走過</LRC>
<LRC TAG="115520">荒煙漫草的年頭就連分手都很沉默</LRC>
<LRC TAG="127250"></LRC>
<LRC TAG="135360"></LRC>
<LRC TAG="147750">一壺漂泊浪跡天涯難入喉</LRC>
<LRC TAG="155150">你走之后酒暖回憶思念瘦</LRC>
<LRC TAG="161540">水向東流時間怎么偷</LRC>
<LRC TAG="168060">花開就一次成熟我卻錯過</LRC>
<LRC TAG="177230"></LRC>
<LRC TAG="178310">誰在用琵琶彈奏一曲東風(fēng)破</LRC>
<LRC TAG="184880">歲月在墻上剝落看見小時候</LRC>
<LRC TAG="191110">猶記得那年我們都還很年幼</LRC>
<LRC TAG="197620">而如今琴聲幽幽我的等候你沒聽過</LRC>
<LRC TAG="204500">誰在用琵琶彈奏一曲東風(fēng)破</LRC>
<LRC TAG="210950">楓葉將故事染色結(jié)局我看透</LRC>
<LRC TAG="217350">籬笆外的古道我牽著你走過</LRC>
<LRC TAG="223970">荒煙漫草的年頭就連分手都</LRC>
<LRC TAG="230680">誰在用琵琶彈奏一曲東風(fēng)破</LRC>
<LRC TAG="237230">歲月在墻上剝落看見小時候</LRC>
<LRC TAG="243550">猶記得那年我們都還很年幼</LRC>
<LRC TAG="250300">而如今琴聲幽幽我的等候你沒聽過</LRC>
<LRC TAG="257070">誰在用琵琶彈奏一曲東風(fēng)破</LRC>
<LRC TAG="263670">楓葉將故事染色結(jié)局我看透</LRC>
<LRC TAG="270020">籬笆外的古道我牽著你走過</LRC>
<LRC TAG="276690">荒煙漫草的年頭就連分手都很沉默</LRC>
<LRC TAG="289630"></LRC>
<LRC TAG="301620"></LRC>
<LRC TAG="309430"></LRC>
</LYRICS>
</MUSIC>
采用FLASH的XML讀取,他將十分的便捷。
Music_word_arr = new Array();
//新的數(shù)組,存放歌詞
Music_word_xml = new XML();
//新的XML對象,也就是存放上面所說的XML
Music_word_xml.ignoreWhite = true;
Music_word_xml.onLoad = function(success) {
if (success) {
var tracks_xml = Music_word_xml.firstChild;
var LRC = tracks_xml.childNodes[tracks_xml.childNodes.length-1];
for (var i = 0; i<LRC.childNodes.length; i++) {
var time = LRC.childNodes[i].attributes.TAG;
//獲取時間
var geci = LRC.childNodes[i].childNodes;
//獲取歌詞
Music_word_arr.push({Time:time, Word:geci});
//將時間信息及歌詞存在Music_word_arr數(shù)組中
}
Show_Word();
//輸出
} else {
trace("Error loading MusicWord.");
//如果沒有加載,則顯示錯誤
}
delete Music_word_xml;
//刪除XML對象
};
Music_word_xml.load(URL);
現(xiàn)在我們該說說如何讓歌詞與歌曲同步。
還是看代碼吧,代碼說明一切:
function Show_Word() {
t = 0;
Word.text = "";
music_word = new Object();
//循環(huán)對象
music_word.interval = function() {
var zs = mySound.position/100;
if (int(Music_word_arr[t].Time/100) == int(zs)) {
if (Music_word_arr[t].Word == "" || Music_word_arr[t].Word == null) {
Word.text = "";
} else {
Word.text = Music_word_arr[t].Word;
}
t++;
}
if (int(Music_word_arr[t].Time/100)<int(zs)) {
t++;
}
};
music_word_n = setInterval(music_word, "interval", 10);
}
應(yīng)該很容易看懂,因為不長,值得注意的地方有一個:
if (int(Music_word_arr[t].Time/100)<int(zs)) {
t++;
}
這行代碼有什么用?他主要用來解決歌曲播放了,而歌詞還沒有加載,在這個時候,他就負(fù)責(zé)讓歌詞追上歌曲播放進(jìn)度,而不要讓歌曲等他。其實他還有一個更重要的功能,我想做過播放器的人應(yīng)該都會知道,在這里我就不說了,你自己想想吧,哈哈~~~~~(好象有些不對??¥%¥# 有不明物體降落……啊~?。。。。。?
相關(guān)文章
比較完整簡潔的Flash處理XML文檔數(shù)據(jù)教程 上篇
比較完整簡潔的Flash處理XML文檔數(shù)據(jù)教程 上篇...2007-12-12