中文字幕二区_国产精品免费在线观看_黄色网站观看_人人草人人澡_日本真实娇小xxxx

您的位置: 首頁(yè) > 技術(shù)文檔 > 多媒體制作 > 用flash從百度搜索中找歌詞
Accordion組件的使用實(shí)例 回到列表 FLASH打造LRC歌詞播放器
 用flash從百度搜索中找歌詞

作者:FlashK 時(shí)間: 2006-01-12 文檔類型:原創(chuàng) 來(lái)自:藍(lán)色理想

第 1 頁(yè) 本地直接從百度獲取LRC歌詞 一
第 2 頁(yè) 本地直接從百度獲取LRC歌詞 二
第 3 頁(yè) 本地直接從百度獲取LRC歌詞 三
第 4 頁(yè) 本地直接從百度獲取LRC歌詞 四
第 5 頁(yè) 實(shí)用性的東西

既然我們已經(jīng)找到了歌詞的頭,那么只要我們找到歌詞的結(jié)尾并選取在這之間的內(nèi)容差不多就算完成了。findEndTag() 函數(shù)用來(lái)查找歌詞的結(jié)尾。

function findEndTag() {
    var lastIndex = htmlData.lastIndexOf("]");
    if (htmlData.slice(lastIndex-3, lastIndex-2) == "." && htmlData.slice(lastIndex-6, lastIndex-5) == ":") {
        var tmpBR = htmlData.slice(lastIndex);
        htmlData = htmlData.slice(0, lastIndex+tmpBR.indexOf("<br")+3);
        htmlData = htmlData.slice(0, htmlData.indexOf("</"));
    } else {
        htmlData = htmlData.slice(0, lastIndex);
        if (loopStart == undefined) {
            loopCount = 1;
        } else {
            delete loopStart;
        }
        if (loopCount<254) {
            loopStart = true;
            loopCount++;
            findEndTag();
        }
    }
}

LRC歌詞是有特征可以區(qū)別的?纯碙RC文件,它每一行都包含了像"[00:30.11]"這樣的時(shí)間標(biāo)記,我們的目標(biāo)就是找到它。首先我們查找 "]" (不能查找 "[00:30.11]" ,里面的時(shí)間是不確定的,flash 也不支持正則的方式)

var lastIndex = htmlData.lastIndexOf("]") 使用lastIndexOf()從后面向前查找的方式找到最后一個(gè) "]" 字符。這里我們用到了一個(gè) var 聲明一個(gè)局部變量。如果你在函數(shù)過(guò)程中要使用一個(gè)臨時(shí)性的東西,都最好先用var聲明一下,它將在函數(shù)運(yùn)行完后自動(dòng)銷毀,以便更節(jié)省內(nèi)存(另外一個(gè)好處就是可以幫你防止和外面的名字沖突而引起不必要的麻煩)

但光有這些還不夠,下一步就是要驗(yàn)證我們找到是不是像"[00:30.11]"這樣的字符。要完成驗(yàn)證的另外一個(gè)原因就是可能網(wǎng)頁(yè)中(特別是論壇貼子中)其它地方也可能出現(xiàn)"]"這樣的字符。它們可能包含一大堆像"[3]:我想找...[4]:喜歡這歌,頂下"、"第[1]頁(yè)"這樣的包含"]"字符內(nèi)容(甚至是像[ MP=480,360,false]http://music.f4666.com/music/turanziwo.mp3[/MP]"這樣的論壇發(fā)貼的代碼)?梢詤⒖家幌逻@個(gè)網(wǎng)頁(yè)或其它論壇:
www.zjnetcafe.com/html/7/60586.htm

if (htmlData.slice(lastIndex-3, lastIndex-2) == "." && htmlData.slice(lastIndex-6, lastIndex-5) == ":") 對(duì)它進(jìn)行驗(yàn)證,在這里我只驗(yàn)證兩個(gè)字符:在它前面3個(gè)字符的"." 和 在它前面6個(gè)字符的":"。你可以加上驗(yàn)證在它前面9個(gè)字符的"["來(lái)加強(qiáng)驗(yàn)證。代碼是:

if (htmlData.slice(lastIndex-3, lastIndex-2) == "." && htmlData.slice(lastIndex-6, lastIndex-5) == ":" && htmlData.slice(lastIndex-9, lastIndex-8) == "[")

如果驗(yàn)證失。ㄒ簿褪钦f(shuō)它不是我們想找的像"[00:30.11]"這樣的標(biāo)簽),我們將再向前搜索直到找到這個(gè)標(biāo)簽為止,跳到else部份:
else {
        htmlData = htmlData.slice(0, lastIndex);
    ......
            findEndTag();
        }
    }
htmlData = htmlData.slice(0, lastIndex) 截取在找到的"]"這個(gè)字符之前的內(nèi)容用作以后的處理,findEndTag() 使它繼續(xù)重復(fù)上面查找驗(yàn)證的工作。
注意,findEndTag()運(yùn)行了它自已身,我們的整個(gè)查找驗(yàn)證的函數(shù)實(shí)際上是一個(gè)自循環(huán)(自已在函數(shù)內(nèi)部調(diào)用自已)。
flash中一個(gè)函數(shù)遞歸256次的限制。也就是一個(gè)函數(shù)不能重復(fù)執(zhí)行256次。超過(guò)256次 flash 就將終止它并可能停止執(zhí)行所有的ActionScript(接近于程序崩潰了)
這里我們自行加了一個(gè)計(jì)數(shù)器判斷將執(zhí)行次數(shù)限制在256次以內(nèi)以免到時(shí)flashPlayer終止它讓你的程序崩潰。
    if (loopStart == undefined) {
            loopCount = 1;
        } else {
            delete loopStart;
        }
        if (loopCount<254) {
            loopStart = true;
            loopCount++;
這里用了一個(gè)一個(gè)相互排斥的鎖定的方法以使函數(shù)明白自已是不是第一次執(zhí)行。如果是,則重新開(kāi)始計(jì)數(shù)。如果不是,則將計(jì)數(shù)器累加,并將次數(shù)限制在規(guī)定次數(shù)以內(nèi)。

自循環(huán)函數(shù)是比較危險(xiǎn)的,如果不是必要,請(qǐng)盡量少使用它。或者用兩個(gè)AB相同的函數(shù)交叉調(diào)用代替,但也請(qǐng)注意別讓函數(shù)陷在死循環(huán)里跳不出來(lái),極度危險(xiǎn)。更好的解決方案是將函數(shù)的執(zhí)行放在onEnterFrame事件中,但可能會(huì)犧牲點(diǎn)執(zhí)行速度,寫法如下:)
function findEndTag() {
    this.onEnterFrame=function(){
    var lastIndex = htmlData.lastIndexOf("]");
    if (htmlData.slice(lastIndex-3, lastIndex-2) == "." && htmlData.slice(lastIndex-6, lastIndex-5) == ":") {
        var tmpBR = htmlData.slice(lastIndex);
        htmlData = htmlData.slice(0, lastIndex+tmpBR.indexOf("<br")+3);
        htmlData = htmlData.slice(0, htmlData.indexOf("</"));
        delete this.onEnterFrame;
        doFunction();
    } else {
        htmlData = htmlData.slice(0, lastIndex);
    }
    }
}

我們回到驗(yàn)證成功后的部份:
        var tmpBR = htmlData.slice(lastIndex);
        htmlData = htmlData.slice(0, lastIndex+tmpBR.indexOf("<br")+3);
        htmlData = htmlData.slice(0, htmlData.indexOf("</"));

我們只過(guò)濾掉我們不想要的部份,注意,不是從"]"這個(gè)字符串的位置過(guò)濾,這樣你將丟掉最后一行歌詞的內(nèi)容。我們查找最靠近這一行歌詞的源代碼標(biāo)簽(這里我們開(kāi)始要用到源代碼來(lái)識(shí)別了)"<br"方法是將"]"之后的內(nèi)容截成一個(gè)臨時(shí)的字符串并查找它的第一個(gè)位置,然后將它和前面的"]"位置累加得到最終的這個(gè)截取點(diǎn)。
因?yàn)橛行└柙~的旁邊并沒(méi)有"<br" 標(biāo)簽,它可能放在一個(gè)容器中(如文本框或者最后沒(méi)有"<br"結(jié)尾的表格),所我們加上這一句:htmlData = htmlData.slice(0, htmlData.indexOf("</"))
用高級(jí)的查找方式(加個(gè)起始位置參數(shù))你也可以將上面的代碼直接寫成這樣:
        htmlData = htmlData.slice(0, htmlData.indexOf("<br",lastIndex)+3);
        htmlData = htmlData.slice(0, htmlData.indexOf("</"));

最后我們回到這里:
    htmlData = htmlData.split("<br>").join("\n");
    htmlData = htmlData.split("<br />").join("\n");
    lrcData = htmlData.split(String.fromCharCode(10)).join("");

看看最后我們得到的LRC歌詞內(nèi)容,它大致是下面的樣子:
......
[ti:突然的自我]<br>
[ar:黃小琥]<br>
[al:]<br>
[by:wolfpey]<br>
[offset:500]<br>
[00:02.67]《突然的自我》<br>
[00:10.12]作詞:伍佰 徐克<br>
[00:11.67]作曲/編曲:伍佰<br>
[00:12.30]演唱:黃小琥<br>
......
最后我們將所有<br>標(biāo)簽去除并替換成換行符 "\n"(LRC分行的寫法)。
(注:split().join()用來(lái)替換字符串,請(qǐng)參見(jiàn)wersling的站點(diǎn):http://www.wersling.com/blog/

考慮到html和xhtml的兼容性,所以這里用了兩次同樣的方法。第一次對(duì)html常用的"<br>"標(biāo)簽進(jìn)行替換,第二次對(duì)xhtml的"<br />"標(biāo)簽進(jìn)行替換。
如果再考慮到大小寫"<BR>"的問(wèn)題,應(yīng)該再寫成這樣:
    htmlData = htmlData.split("<br>").join("\n");
    htmlData = htmlData.split("<BR>").join("\n");
    htmlData = htmlData.split("<Br>").join("\n");
    htmlData = htmlData.split("<bR>").join("\n");
    htmlData = htmlData.split("<br />").join("\n");
    htmlData = htmlData.split("<BR />").join("\n");
    htmlData = htmlData.split("<Br />").join("\n");
    htmlData = htmlData.split("<bR />").join("\n");

也可以用先轉(zhuǎn)換大小寫的方式(但請(qǐng)注意記得還原原來(lái)LRC內(nèi)容的大小寫),幸好這里還不算太長(zhǎng)(只有br兩個(gè)字母)

最后,去掉多余的換行符。(String.fromCharCode(10) 等同于 "\n" );

(考慮對(duì)特別內(nèi)容的兼容性,最后一行代碼其實(shí)還是有些問(wèn)題的,一些站點(diǎn)可能并沒(méi)有"<br>"標(biāo)簽而直接用換行符替代,這樣最后一行代碼會(huì)引發(fā)問(wèn)題。)
如果再加上某些站點(diǎn)可能使用回車符換行的方式,應(yīng)該替換成這樣(共有4種組合方式):
回車+回車;回車+換行;換行+換行;換行+回車;
或者設(shè)計(jì)一個(gè)循環(huán)檢查代碼(針對(duì)三個(gè)以上連續(xù)回車換行的情況,這種情況極少)

源文件:
http://www.95time.cn/articleimg/2006/01/3161/lrcSearch.rar

出處:藍(lán)色理想
責(zé)任編輯:藍(lán)色月光

上一頁(yè) 本地直接從百度獲取LRC歌詞 三 下一頁(yè) 實(shí)用性的東西

◎進(jìn)入論壇Flash專欄版塊參加討論

相關(guān)文章 更多相關(guān)鏈接
Google 視頻下載工具
flash留言本梯度教程(附源)
Accordion組件的使用實(shí)例
歌詞同步關(guān)鍵技術(shù)
Flashforward 2006最終入圍名單
關(guān)鍵字搜索 常規(guī)搜索 推薦文檔
熱門搜索:CSS Fireworks 設(shè)計(jì)比賽 網(wǎng)頁(yè)制作 web標(biāo)準(zhǔn) 用戶體驗(yàn) UE photoshop Dreamweaver Studio8 Flash 手繪 CG
站點(diǎn)最新 站點(diǎn)最新列表
周大福“敬•自然”設(shè)計(jì)大賽開(kāi)啟
國(guó)際體驗(yàn)設(shè)計(jì)大會(huì)7月將在京舉行
中國(guó)國(guó)防科技信息中心標(biāo)志征集
云計(jì)算如何讓安全問(wèn)題可控
云計(jì)算是多數(shù)企業(yè)唯一擁抱互聯(lián)網(wǎng)的機(jī)會(huì)
阿里行云
云手機(jī)年終巨獻(xiàn),送禮標(biāo)配299起
阿里巴巴CTO王堅(jiān)的"云和互聯(lián)網(wǎng)觀"
1499元買真八核 云OS雙蛋大促
首屆COCO桌面手機(jī)主題設(shè)計(jì)大賽
欄目最新 欄目最新列表
淺談JavaScript編程語(yǔ)言的編碼規(guī)范
如何在illustrator中繪制臺(tái)歷
Ps簡(jiǎn)單繪制一個(gè)可愛(ài)的鉛筆圖標(biāo)
數(shù)據(jù)同步算法研究
用ps作簡(jiǎn)單的作品展示頁(yè)面
CSS定位機(jī)制之一:普通流
25個(gè)最佳最閃亮的Eclipse開(kāi)發(fā)項(xiàng)目
Illustrator中制作針線縫制文字效果
Photoshop制作印刷凹凸字體
VS2010中創(chuàng)建自定義SQL Rule
>> 分頁(yè) 首頁(yè) 前頁(yè) 后頁(yè) 尾頁(yè) 頁(yè)次:4/5頁(yè) 1個(gè)記錄/頁(yè) 轉(zhuǎn)到 頁(yè) 共5個(gè)記錄

藍(lán)色理想版權(quán)申明:除部分特別聲明不要轉(zhuǎn)載,或者授權(quán)我站獨(dú)家播發(fā)的文章外,大家可以自由轉(zhuǎn)載我站點(diǎn)的原創(chuàng)文章,但原作者和來(lái)自我站的鏈接必須保留(非我站原創(chuàng)的,按照原來(lái)自一節(jié),自行鏈接)。文章版權(quán)歸我站和作者共有。

轉(zhuǎn)載要求:轉(zhuǎn)載之圖片、文件,鏈接請(qǐng)不要盜鏈到本站,且不準(zhǔn)打上各自站點(diǎn)的水印,亦不能抹去我站點(diǎn)水印。

特別注意:本站所提供的攝影照片,插畫,設(shè)計(jì)作品,如需使用,請(qǐng)與原作者聯(lián)系,版權(quán)歸原作者所有,文章若有侵犯作者版權(quán),請(qǐng)與我們聯(lián)系,我們將立即刪除修改。

您的評(píng)論
用戶名:  口令:
說(shuō)明:輸入正確的用戶名和密碼才能參與評(píng)論。如果您不是本站會(huì)員,你可以注冊(cè) 為本站會(huì)員。
注意:文章中的鏈接、內(nèi)容等需要修改的錯(cuò)誤,請(qǐng)用報(bào)告錯(cuò)誤,以利文檔及時(shí)修改。
不評(píng)分 1 2 3 4 5
注意:請(qǐng)不要在評(píng)論中含與內(nèi)容無(wú)關(guān)的廣告鏈接,違者封ID
請(qǐng)您注意:
·不良評(píng)論請(qǐng)用報(bào)告管理員,以利管理員及時(shí)刪除。
·尊重網(wǎng)上道德,遵守中華人民共和國(guó)的各項(xiàng)有關(guān)法律法規(guī)
·承擔(dān)一切因您的行為而直接或間接導(dǎo)致的民事或刑事法律責(zé)任
·本站評(píng)論管理人員有權(quán)保留或刪除其管轄評(píng)論中的任意內(nèi)容
·您在本站發(fā)表的作品,本站有權(quán)在網(wǎng)站內(nèi)轉(zhuǎn)載或引用
·參與本評(píng)論即表明您已經(jīng)閱讀并接受上述條款
推薦文檔 | 打印文檔 | 評(píng)論文檔 | 報(bào)告錯(cuò)誤  
專業(yè)書推薦 更多內(nèi)容
網(wǎng)站可用性測(cè)試及優(yōu)化指南
《寫給大家看的色彩書1》
《跟我去香港》
眾妙之門—網(wǎng)站UI 設(shè)計(jì)之道
《Flex 4.0 RIA開(kāi)發(fā)寶典》
《贏在設(shè)計(jì)》
犀利開(kāi)發(fā)—jQuery內(nèi)核詳解與實(shí)踐
作品集 更多內(nèi)容

雜⑦雜⑧ Gold NORMANA V2