|
首页 | 名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
ttp://www.flashk.org/.....Sukii-o/mp3/ s2 music player支持LRC歌词显示,它得的地址: http://www.flashk.org/.....Sukii-o/mp3/ 由zas开发的s2 music player LRC歌词原理(由zas本人提供): //--接口--
function loadLRC(path) { delete this.onEnterFrame; lrcData.timer = new Array(); lrcData.info = new Array(); myCodePage = System.useCodepage; System.useCodepage = true; isLRCShow = false; mc_lrc.tx_lrc.htmlText = " "; mc_lrc.tx_lrc.setTextFormat(lrcFormat); trace("LRC文件地址:"+path); lrcFile.load(path); mc_loadEvent.onEnterFrame = function() { if (lrcFile.getBytesLoaded()>10) { var per = Math.floor(lrcFile.getBytesLoaded()/lrcFile.getBytesTotal()*100); mc_lrc.tx_lrc.htmlText = " "+"正在下载歌词.."+per+"%"; } else { mc_lrc.tx_lrc.htmlText = " "+"正在查找歌词.."+""; } mc_lrc.tx_lrc.setTextFormat(lrcFormat); }; } // //读取LRC文本流 lrcFile = new XML(); lrcFile.onLoad = function(success) { if (success) { trace(true); myLRC = this.toString(); myLRC = myLRC.slice(myLRC.indexOf("[")); initLRC(); } else { trace("LRC LoadError"); mc_lrc.tx_lrc.htmlText = " "+"未加载歌词"+""; mc_lrc.tx_lrc.setTextFormat(lrcFormat); } delete mc_loadEvent.onEnterFrame; //编码恢复 if (myCodePage != undefined) { System.useCodepage = myCodePage; } else { System.useCodepage = false; } }; // //LRC解析器 myLRC = new String(); lrcData = new Object(); lrcData.timer = new Array(); lrcData.info = new Array(); lrcData.txScroll = new Array(); function initLRC() { i = 0; hasMoreTags = false; offset = 0; for (var k = 0; k<200; k++) { //LRC文本流分行 var cur = myLRC.indexOf("n"); parseLineData(myLRC.slice(0, cur)); myLRC = myLRC.slice(cur+1); if (myLRC.length<=0) { break; } } if (hasMoreTags == true) { sortTimer(); } trace(lrcData.timer); startShowLRC(); } function parseLineData(lineString) { var lineData = new String(lineString); //解析[00:25.62]时间标签 var startCharID = lineData.indexOf("["); if (isNaN(lineData.slice(startCharID+1, startCharID+3)) == false && lineData.indexOf(":") == startCharID+3) { //标准[00:25.62]格式 if (lineData.indexOf("]") == startCharID+9) { lrcData.info[i] = lineData.slice(lineData.lastIndexOf("]")+1); lrcData.timer[i] = Number(lineData.slice(startCharID+1, startCharID+3))*60+Number(lineData.slice(startCharID+4, startCharID+6))+Number(lineData.slice(startCharID+7, startCharID+9)/100); } else if (lineData.indexOf("]") == startCharID+10) { //兼容[00:25.625]格式 lrcData.info[i] = lineData.slice(lineData.lastIndexOf("]")+1); lrcData.timer[i] = Number(lineData.slice(startCharID+1, startCharID+3))*60+Number(lineData.slice(startCharID+4, startCharID+6))+Number(lineData.slice(startCharID+7, startCharID+10)/1000); } else if (lineData.indexOf("]") == startCharID+8) { //兼容[00:25.6]格式 lrcData.info[i] = lineData.slice(lineData.lastIndexOf("]")+1); lrcData.timer[i] = Number(lineData.slice(startCharID+1, startCharID+3))*60+Number(lineData.slice(startCharID+4, startCharID+6))+Number(lineData.slice(startCharID+7, startCharID+8)/10); } else if (lineData.indexOf("]") == startCharID+6) { //兼容[00:21]格式 lrcData.info[i] = lineData.slice(lineData.lastIndexOf("]")+1); lrcData.timer[i] = Number(lineData.slice(startCharID+1, startCharID+3))*60+Number(lineData.slice(startCharID+4, startCharID+6)); } } else { var tagName; //解析标识标签 //[ar:艺人名] if (lineData.indexOf("[ar:") != -1) { tagName = "艺人:"; } else if (lineData.indexOf("[ti:") != -1) { //[ti:曲名] tagName = "歌曲:"; } else if (lineData.indexOf("[al:") != -1) { //[al:专辑名] tagName = "专辑:"; } else if (lineData.indexOf("[by:") != -1) { //[by:编辑LRC歌词的网友信息] tagName = "歌词制作:"; } if (lineData.lastIndexOf("]")>lineData.lastIndexOf("[")) { lrcData.info[i] = tagName+lineData.slice(lineData.lastIndexOf(":")+1, lineData.lastIndexOf("]")); } else { lrcData.info[i] = lineData; } if (lineData.indexOf("[offset:") != -1) { //[offset:时间补偿值] lrcData.info[i] = "------------------------------------------"; offset = Number(lineData.slice(lineData.lastIndexOf(":")+1, lineData.lastIndexOf("]"))); if (isNaN(offset)) { offset = 0; } } lrcData.timer[i] = 0; } i++; //[01:17][02:24][02:53][03:21] 多时间标签支持 var surplusData = new String(lineData.slice(lineData.indexOf("]")+1)); if (surplusData.indexOf("[") != -1) { hasMoreTags = true; parseLineData(surplusData); } } function sortTimer() { lrcData.timerID = new Array(); for (var i = 0; i lrcData.timerID[i] = i; } ////使用迅速排序(备用) //QuickSorter(lrcData.timer); InsertionSorter(lrcData.timer); lrcData.tmpInfo = new Array(); for (var i = 0; i lrcData.tmpInfo[i] = lrcData.info[lrcData.timerID[i]]; } lrcData.info = lrcData.tmpInfo; } //数组排序算法:插入排序 //这份算法代码核心是从网上找的 function InsertionSorter(list) { for (var i = 1; i var t = list[i]; var j = i; while ((j>0) && (list[j-1]>t)) { list[j] = list[j-1]; var myC = lrcData.timerID[j]; lrcData.timerID[j] = lrcData.timerID[j-1]; lrcData.timerID[j-1] = myC; --j; } list[j] = t; } } //迅速排序(备用) //这份算法代码核心是从网上找的 function QuickSorter(list) { var low = 0; var high = list.length-1; if (high<=low) { return; } else if (high == low+1) { if (list[low]>list[high]) { Swap(low, high); return; } } myQuickSort(list, low, high); } function myQuickSort(list, low, high) { if (low var pivot = Partition(list, low, high); myQuickSort(list, low, pivot-1); myQuickSort(list, pivot+1, high); } } function Partition(list, low, high) { var pivot; var pivot = list[low]; while (low while (low=pivot) { high--; } if (low != high) { Swap(low, high); low++; } while (low low++; } if (low != high) { Swap(low, high); high--; } } return low; } function Swap(l, r) { var myl = lrcData.timerID[l]; lrcData.timerID[l] = lrcData.timerID[r]; lrcData.timerID[r] = myl; lrcData.timer[l] = lrcData.timer[l] ^ lrcData.timer[r]; lrcData.timer[r] = lrcData.timer[l] ^ lrcData.timer[r]; lrcData.timer[l] = lrcData.timer[l] ^ lrcData.timer[r]; } // //LRC显示 function startShowLRC() { this.onEnterFrame = checTimer; isLRCShow = true; var t = getTimer(); var myTextTest = ""; for (var i = 0; i<=lrcData.info.length; i++) { myTextTest += lrcData.info[i]+"n"; mc_lrc.tx_lrc.text = myTextTest; lrcData.txScroll[i] = mc_lrc.tx_lrc.maxscroll; } trace(getTimer()-t); trace(lrcData.txScroll); mc_lrc.tx_lrc.htmlText = ""; showLRCInfo(0); } t = 0; function checTimer() { if (_root.musicPlay.mySound.position-checBackPosition<-500) { t = 0; mc_lrc.tx_lrc.scroll = 0; } checBackPosition = _root.musicPlay.mySound.position; //时间检测 if (_root.musicPlay.mySound.position>lrcData.timer[t]*1000-600-offset && lrcData.timer[t]>=lrcData.timer[t-1]) { if (lrcData.timer[t] != 0) { mc_lrc.tx_lrc.scroll = lrcData.txScroll[t-1]+3; } gotoAndPlay(8); n = t; t++; } } fontColor1 = new String("005CB9"); fontColor2 = new String("FFFFFF"); lrcFormat = new TextFormat(); lrcFormat.align = "center"; function showLRCInfo(id) { frontInfo = new String(); for (var i = 0; i frontInfo += lrcData.info[i]+" "; } backInfo = new String(); for (var i = id+1; i<=lrcData.info.length; i++) { backInfo += lrcData.info[i]+" "; } mc_lrc.tx_lrc.htmlText = ""+frontInfo+""+""+lrcData.info[id]+" "+""+backInfo+""; mc_lrc.tx_lrc.setTextFormat(lrcFormat); } 返回类别: Flash教程 上一教程: Flash 8 中文版视频教程(4)发光 下一教程: Flash构造角色设计 您可以阅读与"flash中显示LRC歌词原理"相关的教程: · Flash播放器显示LRC歌词代码 · 显示隐藏鼠标的Flash Action · Flash绘画中基础线条的绘制原理 · Flash实用技巧之音乐时间显示篇 · Flash 动态遮罩的原理和应用 |
快精灵印艺坊 版权所有 | 首页会员中心在线印刷在线编辑付款方式索取样品设计指南连锁门店 |