夢(mèng)回AS2純代碼卡拉OK動(dòng)態(tài)歌詞同步配圖MP3播放器(附源碼下載)欄目:
代碼開(kāi)發(fā)交流 分類:
AS開(kāi)發(fā)關(guān)鍵字:
AS2,
純代碼,
MP3播放器,
歌詞同步,
源碼一、功能簡(jiǎn)介:
這個(gè)由AS2純代碼實(shí)現(xiàn)的單行卡拉OK風(fēng)格歌詞同步MP3多曲播放器,除了播放音樂(lè),同步顯示LRC歌詞的基本功能之外;最富特色的莫過(guò)于它能讓歌詞字條從左到右漸顯推入,然后又繼續(xù)向右漸隱淡出;它還可以在XML列表中為每個(gè)MP3指定一張背景圖片,播放MP3時(shí)能同步進(jìn)行更換;另外,全屏顯示并自動(dòng)適應(yīng)屏幕大小、開(kāi)關(guān)歌詞條的水平運(yùn)動(dòng)動(dòng)畫(huà)效果、為歌詞條添加或和移除倒角投影濾鏡以改變其視覺(jué)效果、控制MP3的播放暫停和曲目切換,等等,也是它的實(shí)用功能。
二、技術(shù)要點(diǎn):
《夢(mèng)回AS2純代碼卡拉OK動(dòng)態(tài)歌詞同步配圖MP3播放器》僅有244行代碼(其中包含11行注釋)。但“麻雀雖小,五臟俱全”,它綜合應(yīng)用了多種實(shí)用的AS2開(kāi)發(fā)技術(shù):
1、屏幕尺寸大小自動(dòng)適應(yīng):偵聽(tīng)舞臺(tái)尺寸變化,讓LRC同步歌詞顯示條始終位于舞臺(tái)正下方,播放控制條始終位于舞臺(tái)右下方,MP3配圖始終垂直頂對(duì)齊,高度始終等于舞臺(tái)高度-100像素,寬度以高度為標(biāo)準(zhǔn)比例縮放,水平居中對(duì)齊;
2、用AS2代碼創(chuàng)建右鍵菜單;
3、用AS2代碼創(chuàng)建動(dòng)態(tài)文本框、并使用TextFormat類設(shè)置文本格式;
4、用AS2代碼在舞臺(tái)上創(chuàng)建影片剪輯元件并添加倒角和投影濾鏡;
5、用AS2代碼流式加載MP3文件并控制其播放暫停;
6、用AS2代碼為動(dòng)態(tài)文本框設(shè)置HTML格式文本,并使用asfunction協(xié)議通過(guò)其中的鏈接,調(diào)用函數(shù);
7、用AS2代碼加載并解析外部XML文件,獲取其節(jié)點(diǎn)上自定義屬性的值;
8、用AS2代碼加載并解析外部LRC文件,用字符串拆分的方法將其中包含的時(shí)間標(biāo)簽和對(duì)應(yīng)的歌詞句子存貯到兩個(gè)數(shù)組中;
9、用AS2代碼的MovieClipLoader類加載外部圖片文件,并為其添加偵聽(tīng)器;
10、用AS2代碼的BitmapData類平滑加載進(jìn)來(lái)的圖片,令其在縮放之后不產(chǎn)生馬賽克效果;
11、用AS2代碼的Tween類,在圖片加載完畢時(shí)為其添加淡入動(dòng)畫(huà)效果;
12、用AS2代碼的setInterval + updateAfterEvent()實(shí)現(xiàn)不依賴幀頻的高頻率渲染,讓卡拉OK風(fēng)格的LRC同步歌詞條進(jìn)度動(dòng)畫(huà)更加細(xì)膩平滑。
三、算法特色:
1、獨(dú)創(chuàng)的簡(jiǎn)潔高效的LRC文本的解析方法:使用的LRC解析算法是自己根據(jù)對(duì)LRC文件的分析編寫(xiě)的,使用2個(gè)FOR循環(huán)嵌套,外層解析LRC文本行,內(nèi)層解析一行中的所有時(shí)間標(biāo)簽。支持一行多時(shí)間標(biāo)簽的LRC文件,支持精確到秒和毫秒兩種LRC規(guī)格。LRC解析過(guò)程總代碼僅21行,如下所示:
-折疊[運(yùn)行代碼][另存為網(wǎng)頁(yè)][拷貝到剪貼板]var lrcItem:Array;
var divsign:String = "|||";
function parseLRC(lrcStr) {
lrcItem = [];
var lrcLine:Array = lrcStr.split("\n");
for (var k:Number = 0; k<lrcLine.length; k++) {
for (var j:Number = 0; j<1000; j++) {
var subpos:Number = lrcLine[k].indexOf("]");
if (subpos<0) {
break;
} else {
var curTimeTag:String = lrcLine[k].slice(1, subpos);
curTimeTag.length == 5 ? curTimeTag += ".00" : null;
lrcItem[lrcItem.length] = curTimeTag+divsign+lrcLine[k].slice(lrcLine[k].lastIndexOf("]")+1);
lrcItem[lrcItem.length-1] = lrcItem[lrcItem.length-1].split("\r").join("").split("\n").join("");
lrcLine[k] = lrcLine[k].slice(subpos+1);
}
}
}
lrcItem.sort();
}
LRC原文件內(nèi)容:
[ti:我們站在雨中]
[ar:]
[al:我們站在雨中]
[by:LRC制作者]
[00:03.25]《我們站在雨中》
[00:08.68]連城訣吳越版主題歌曲
[00:16.54]把雙眼緊閉,劍要往哪里刺去
[00:24.97]誰(shuí)說(shuō)秋風(fēng)最能懂落葉思緒
[00:32.21]致命的一擊,真的對(duì)手是自己
[00:40.24]只剩下了無(wú)聲的嘆息
[00:48.69]酒逢知己,千杯也難盡興
[00:56.27]英雄醉了也一樣的慢慢倒下去
[01:04.45]望星辰轉(zhuǎn)移,江湖又下起暴雨
[01:12.51]我們都站在雨里
[01:52.46][01:20.49]穿過(guò)刀光劍影之后,我還是那個(gè)我
[02:00.74][01:28.45]只是把受傷的心獨(dú)自對(duì)著明月說(shuō)
[02:08.38][01:36.77]天涯的盡頭有沒(méi)有一處安靜的角落
[02:16.57][01:44.70]讓浪跡的人在走累的時(shí)候躲一躲
[02:31.80][00:12.40]
解析之后輸出的結(jié)果:
00:03.25|||《我們站在雨中》
00:08.68|||連城訣吳越版主題歌曲
00:12.40|||
00:16.54|||把雙眼緊閉,劍要往哪里刺去
00:24.97|||誰(shuí)說(shuō)秋風(fēng)最能懂落葉思緒
00:32.21|||致命的一擊,真的對(duì)手是自己
00:40.24|||只剩下了無(wú)聲的嘆息
00:48.69|||酒逢知己,千杯也難盡興
00:56.27|||英雄醉了也一樣的慢慢倒下去
01:04.45|||望星辰轉(zhuǎn)移,江湖又下起暴雨
01:12.51|||我們都站在雨里
01:20.49|||穿過(guò)刀光劍影之后,我還是那個(gè)我
01:28.45|||只是把受傷的心獨(dú)自對(duì)著明月說(shuō)
01:36.77|||天涯的盡頭有沒(méi)有一處安靜的角落
01:44.70|||讓浪跡的人在走累的時(shí)候躲一躲
01:52.46|||穿過(guò)刀光劍影之后,我還是那個(gè)我
02:00.74|||只是把受傷的心獨(dú)自對(duì)著明月說(shuō)
02:08.38|||天涯的盡頭有沒(méi)有一處安靜的角落
02:16.57|||讓浪跡的人在走累的時(shí)候躲一躲
02:31.80|||
al:我們站在雨中|||
ar:|||
by:LRC制作者|||
ti:我們站在雨中|||
2、LRC句子時(shí)間點(diǎn)與MP3播放時(shí)間的對(duì)比用字符串對(duì)比方式實(shí)現(xiàn):與網(wǎng)上其他開(kāi)發(fā)者制作歌詞同步時(shí)用的LRC時(shí)間數(shù)組與播放時(shí)間的對(duì)比方式不同,我不比時(shí)間,而是比字符串,即把當(dāng)前播放時(shí)間轉(zhuǎn)換成字符串再和LRC時(shí)間數(shù)組中的字符串相對(duì)比,從而實(shí)現(xiàn)到時(shí)換句從上面的代碼中可以看出,時(shí)間標(biāo)簽只保留了前面七個(gè)字符,也就是精確到0.1秒,這是為了降低對(duì)比的頻率以降低CPU使用率,精確到0.1秒已經(jīng)完全足夠了,因?yàn)橄噜弮删涓柙~的時(shí)間間隔絕對(duì)不可能小于0.1秒。兩次比較的時(shí)間間隔我設(shè)置為了30毫秒,也就是說(shuō)確保時(shí)間頭經(jīng)過(guò)每一個(gè)LRC時(shí)間點(diǎn)時(shí)都會(huì)執(zhí)行至少三次對(duì)比,以確保不會(huì)漏句跳句。
很低的CPU占用率(測(cè)試環(huán)境:2.4G單核賽揚(yáng)四CPU)
3、制作歌詞條卡拉OK進(jìn)度效果不用遮罩,而是直接設(shè)置本底文本框的自動(dòng)對(duì)齊屬性(autoSize)和高亮文本框的寬度:
看到網(wǎng)上其他人的LRC歌詞同步MP3播放器作品,幾乎都是用的遮罩的方法來(lái)做卡拉OK的進(jìn)度效果的,而我做的水平文字的LRC同步播放器完全不用遮罩(除了豎式的必須使用遮罩以外,見(jiàn)下圖:)
水平文字卡拉OK風(fēng)格歌詞條的進(jìn)度實(shí)現(xiàn),我使用的是直接設(shè)置本底文本框的自動(dòng)對(duì)齊屬性(autoSize)和高亮文本框的寬度的方法。使用這種技術(shù)有一點(diǎn)要注意:濾鏡一定不要加在文本框上,而是要將文本框放入一個(gè)剪輯,濾鏡只能加到剪輯上。
四、MP3播放列表XML文件的結(jié)構(gòu):
-折疊[運(yùn)行代碼(可先修改)][另存為網(wǎng)頁(yè)][拷貝到剪貼板]五、《夢(mèng)回AS2純代碼卡拉OK動(dòng)態(tài)歌詞同步配圖MP3播放器》全部AS2代碼:
/*****************第一部分:系統(tǒng)參數(shù)設(shè)置、顯示尺寸及模式、右鍵菜單功能****************/
-折疊[運(yùn)行代碼][另存為網(wǎng)頁(yè)][拷貝到剪貼板]/*****************第一部分:系統(tǒng)參數(shù)設(shè)置、顯示尺寸及模式、右鍵菜單功能****************/
System.useCodepage = false;
Stage.scaleMode = "NoScale";
Stage.align = "LT";
var stageResizeListener:Object = new Object();
stageResizeListener.onResize = fitmodels;
function fitmodels() {
lrcBar._x = Stage.width/2-350;
lrcBar._y = Stage.height-100;
mp3Cap._x = Stage.width-mp3Cap._width;
mp3Cap._y = Stage.height-35;
if (mp3Img._width) {
mp3Img._height = Stage.height-100;
mp3Img._xscale = mp3Img._yscale;
mp3Img._x = (Stage.width-mp3Img._width)/2;
}
}
Stage.addListener(stageResizeListener);
function switchDisplayMode() {
Stage["displayState"] == "normal" ? Stage["displayState"]="fullScreen" : Stage["displayState"]="normal";
}
function authorHomePage() {
System.setClipboard("http://dreamdesign.csrjgzs.com/");
getURL("http://dreamdesign.csrjgzs.com/", "_blank");
}
function authorQQTalk() {
System.setClipboard("http://wpa.qq.com/msgrd?v=3&uin=744123372&site=qq&menu=yes");
getURL("http://wpa.qq.com/msgrd?v=3&uin=744123372&site=qq&menu=yes", "_blank");
}
var rightMenu:ContextMenu = new ContextMenu();
rightMenu.hideBuiltInItems();
rightMenu.customItems.push(new ContextMenuItem("□ 全屏顯示/返回窗口", switchDisplayMode, true, true, true));
rightMenu.customItems.push(new ContextMenuItem("○ 一葉扁舟(夢(mèng)回輕狂)2013.08.18,QQ:744123372", authorQQTalk, true, true, true));
rightMenu.customItems.push(new ContextMenuItem("⊙ 一葉夢(mèng)回XML-LRC單行卡拉OK風(fēng)格歌詞同步MP3列表播放器(一曲一圖+全屏自適應(yīng))", authorHomePage, true, true, true));
this.menu = rightMenu;
/*****************第二部分:解析LRC文件的功能****************/
-折疊[運(yùn)行代碼][另存為網(wǎng)頁(yè)][拷貝到剪貼板]/*****************第二部分:解析LRC文件的功能****************/
var lrcItem:Array;
var divsign:String = "|||";
function parseLRC(lrcStr) {
lrcItem = [];
var lrcLine:Array = lrcStr.split("\n");
for (var k:Number = 0; k<lrcLine.length; k++) {
for (var j:Number = 0; j<1000; j++) {
var subpos:Number = lrcLine[k].indexOf("]");
if (subpos<0) {
break;
} else {
var curTimeTag:String = lrcLine[k].slice(1, subpos);
curTimeTag.length == 5 ? curTimeTag += ".00" : null;
lrcItem[lrcItem.length] = curTimeTag+divsign+lrcLine[k].slice(lrcLine[k].lastIndexOf("]")+1);
lrcItem[lrcItem.length-1] = lrcItem[lrcItem.length-1].split("\r").join("").split("\n").join("");
lrcLine[k] = lrcLine[k].slice(subpos+1);
}
}
}
lrcItem.sort();
}
/*****************第三部分:顯示LRC歌詞的功能****************/
-折疊[運(yùn)行代碼][另存為網(wǎng)頁(yè)][拷貝到剪貼板]/*****************第三部分:顯示LRC歌詞的功能****************/
import flash.filters.BevelFilter;
var lrcBarBevelFilter:BevelFilter = new BevelFilter(1);
import flash.filters.DropShadowFilter;
var lrcBarDropShadowFilter:DropShadowFilter = new DropShadowFilter(1);
lrcBarDropShadowFilter.blurX = lrcBarDropShadowFilter.blurY=3;
var lrcTextFomart:TextFormat = new TextFormat();
lrcTextFomart.size = 28;
lrcTextFomart.bold = true;
//lrcTextFomart.font = "楷體_GB2312";
var curLrcId:Number;
var lrcHander:Number;
function getTimeMS(timeStr:String):Number {
return (Number(timeStr.split(":")[0])*60+Number(timeStr.split(":")[1])+Number(timeStr.split(".")[1])/10)*1000;
}
function getTimeStr(theTime:Number):String {
var sec = Math.floor(theTime/1000)%60;
sec<10 ? sec="0"+sec : null;
var min = Math.floor(Math.floor(theTime/1000)/60);
min<10 ? min="0"+min : null;
return min+":"+sec;
}
var secondPos:String;
var klokStepLong:Number;
var lrcMotionMode:Boolean = true;
var lrcBarFilterMode:Boolean = true;
function updateLrcBar() {
var curTime:Number = mp3Sound.position+300;
var mp3Time:String = getTimeStr(curTime);
if (secondPos != mp3Time) {
secondPos = mp3Time;
mp3Cap.htmlText = "<b><font color='#ff0000'>"+mp3Time+" / "+getTimeStr(mp3Sound.duration/(mp3Sound.getBytesLoaded()/mp3Sound.getBytesTotal()))+"</font></b> "+mp3CtrlHtml;
}
mp3Time += "."+String(curTime).slice(String(curTime).length-3, String(curTime).length-2);
//for (var i:Number = curLrcId+1; i<curLrcId+5; i++) {
for (var i:Number = curLrcId+1; i<lrcItem.length; i++) {
if (lrcItem[i].slice(0, 7) == mp3Time) {
curLrcId = i;
break;
}
}
if (lrcBar.lrcBase.lrcText.text != lrcItem[curLrcId].split(divsign)[1] && lrcBar._alpha>0) {
lrcBar._alpha -= 10;
lrcMotionMode == true ? lrcBar.lrcBase._x=lrcBar.lrcOver._x=Math.ceil((100-lrcBar._alpha)/10)/10*lrcBar.lrcBase.lrcText._width*1.5 : null;
} else if (lrcBar.lrcBase.lrcText.text == lrcItem[curLrcId].split(divsign)[1] && lrcBar._alpha<100) {
lrcBar._alpha += 10;
lrcMotionMode == true ? lrcBar.lrcBase._x=lrcBar.lrcOver._x=-Math.ceil((100-lrcBar._alpha)/10)/10*lrcBar.lrcBase.lrcText._width*1.5 : null;
} else if (lrcBar._alpha<=0) {
lrcBar.lrcBase._x = lrcBar.lrcOver._x=0;
curLrcId>=0 ? setLrcText() : null;
}
lrcBar.lrcOver.lrcText._width<lrcBar.lrcBase.lrcText._width ? lrcBar.lrcOver.lrcText._width += klokStepLong : lrcBar.lrcOver.lrcText._width=lrcBar.lrcBase.lrcText._width;
//lrcBar.lrcOver.lrcText._width<lrcBar.lrcBase.lrcText._width ? lrcBar.lrcOver.lrcText._width=lrcBar.lrcBase.lrcText._width*((getTimeMS(mp3Time)-getTimeMS(lrcItem[curLrcId].slice(0,7)))/(getTimeMS(lrcItem[curLrcId+1].slice(0,7))-getTimeMS(lrcItem[curLrcId].slice(0,7)))) : lrcBar.lrcOver.lrcText._width=lrcBar.lrcBase.lrcText._width;
updateAfterEvent();
}
function setLrcText() {
lrcBar.lrcBase.lrcText.text = lrcBar.lrcOver.lrcText.text=lrcItem[curLrcId].split(divsign)[1];
lrcBar.lrcBase.lrcText.setTextFormat(lrcTextFomart);
lrcBar.lrcOver.lrcText.setTextFormat(lrcTextFomart);
lrcBar.lrcOver.lrcText._x = lrcBar.lrcBase.lrcText._x;
lrcBar.lrcOver.lrcText._width = 0;
klokStepLong = lrcBar.lrcBase.lrcText._width/((getTimeMS(lrcItem[curLrcId+1].slice(0, 7))-getTimeMS(lrcItem[curLrcId].slice(0, 7)))/(Stage["displayState"] == "fullScreen" ? 50 : 45));
}
function switchFilterMode() {
if (lrcBarFilterMode == true) {
lrcBarFilterMode = false;
lrcBar.filters = [];
} else {
lrcBarFilterMode = true;
lrcBar.filters = [lrcBarBevelFilter, lrcBarDropShadowFilter];
}
}
function switchMotionMode() {
lrcMotionMode = !lrcMotionMode;
}
/*****************第四部分:加載LRC文件的功能****************/
-折疊[運(yùn)行代碼][另存為網(wǎng)頁(yè)][拷貝到剪貼板]/*****************第四部分:加載LRC文件的功能****************/
var lrcLoader:LoadVars;
function loadLRC(lrcUrl:String) {
delete lrcLoader.onData;
lrcLoader = new LoadVars();
lrcLoader.onData = function(lrcStr) {
parseLRC(lrcStr);
trace(lrcItem.join("\n"));
curLrcId = -1;
clearInterval(lrcHander);
startLrcBarUpdate();
};
lrcLoader.load(lrcUrl);
}
function startLrcBarUpdate() {
lrcItem.length>0 ? lrcHander=setInterval(updateLrcBar, 30) : lrcBar.lrcBase.lrcText.text=lrcBar.lrcOver.lrcText.text="非常抱歉,此曲暫無(wú)歌詞!";
}
/*****************第五部分:播放MP3列表的功能****************/
-折疊[運(yùn)行代碼][另存為網(wǎng)頁(yè)][拷貝到剪貼板]/*****************第五部分:播放MP3列表的功能****************/
var mp3List:Array;
var mp3Sound:Sound;
var mp3Id:Number = -1;
var mp3CtrlHtml:String;
function playmp3(disVar:Number) {
clearInterval(lrcHander);
mp3Sound = new Sound(this);
mp3Sound.onSoundComplete = function() {
playmp3(1);
};
mp3Playing = true;
mp3Id = makeMp3Id(disVar);
mp3Sound.loadSound(mp3List[mp3Id].attributes.url,true);
lrcBar.lrcBase.lrcText.text = lrcBar.lrcOver.lrcText.text="";
mp3CtrlHtml = "<b>("+String(mp3Id+1)+"/"+mp3List.length+") "+mp3List[mp3Id].attributes.cap+" <font color='#cc0000'><a href='asfunction:playmp3,-1'><上一首</a> <a href='asfunction:pausemp3,1'>暫停/播放</a> <a href='asfunction:playmp3,1'>下一首></a> <a href='asfunction:switchFilterMode'>倒角投影淡入開(kāi)關(guān)</a> <a href='asfunction:switchMotionMode'>動(dòng)效開(kāi)關(guān)</a> <a target='_blank' href='"+mp3List[mp3Id].attributes.lrc+"'>LRC</a> </font></b>";
mp3Cap.htmlText = mp3CtrlHtml;
loadLRC(mp3List[mp3Id].attributes.lrc);
loadMp3Img(mp3List[mp3Id].attributes.img);
}
function makeMp3Id(disVar:Number) {
var theid:Number = mp3Id+Number(disVar);
theid>mp3List.length-1 ? theid=0 : null;
theid<0 ? theid=mp3List.length-1 : null;
return theid;
}
var mp3Playing:Boolean;
var mp3PausePos:Number;
function pausemp3() {
clearInterval(lrcHander);
if (mp3Playing == true) {
mp3Playing = false;
mp3PausePos = mp3Sound.position/1000;
mp3Sound.stop();
} else {
mp3Playing = true;
mp3Sound.start(mp3PausePos,1);
startLrcBarUpdate();
}
}
/*****************第六部分:加載MP3配圖的功能****************/
-折疊[運(yùn)行代碼][另存為網(wǎng)頁(yè)][拷貝到剪貼板]/*****************第六部分:加載MP3配圖的功能****************/
import flash.display.BitmapData;
var imgbitmapdata:BitmapData;
import mx.transitions.Tween;
import mx.transitions.easing.*;
var fadestyle:Object = None.easeNone;
var fadeduration:Number = 0.5;
var fadeTween:Object;
var imgloader:MovieClipLoader = new MovieClipLoader();
var imgloadlistener:Object = new Object();
imgloader.addListener(imgloadlistener);
imgloadlistener.onLoadInit = function(target:MovieClip) {
imgbitmapdata = new BitmapData(target._width, target._height, true, 0xff0000);
imgbitmapdata.draw(target);
target.attachBitmap(imgbitmapdata,target.getNextHighestDepth(),"auto",true);
fadeTween = new Tween(mp3Img, "_alpha", fadestyle, mp3Img._alpha, 100, fadeduration, true);
fitmodels();
};
function loadMp3Img(imgUrl:String) {
fadeTween = new Tween(mp3Img, "_alpha", fadestyle, mp3Img._alpha, 0, fadeduration, true);
fadeTween.onMotionFinished = function() {
imgloader.unloadClip(mp3Img);
mp3Img._xscale = mp3Img._yscale=100;
imgloader.loadClip(imgUrl,mp3Img);
};
}
/*****************第七部分:創(chuàng)建LRC歌詞條、播放控制鏈接等界面元素****************/
-折疊[運(yùn)行代碼][另存為網(wǎng)頁(yè)][拷貝到剪貼板]/*****************第七部分:創(chuàng)建LRC歌詞條、播放控制鏈接等界面元素****************/
function createLrcCtrl() {
createEmptyMovieClip("mp3Img",getNextHighestDepth());
createEmptyMovieClip("lrcBar",getNextHighestDepth());
lrcBar.filters = [lrcBarBevelFilter, lrcBarDropShadowFilter];
lrcBar.createEmptyMovieClip("lrcBase",lrcBar.getNextHighestDepth());
lrcBar.createEmptyMovieClip("lrcOver",lrcBar.getNextHighestDepth());
lrcBar.lrcBase.createTextField("lrcText",lrcBar.lrcBase.getNextHighestDepth(),0,15,740,35);
lrcBar.lrcOver.createTextField("lrcText",lrcBar.lrcOver.getNextHighestDepth(),0,15,740,35);
lrcBar.lrcBase.lrcText.textColor = 0x3366ff;
lrcBar.lrcOver.lrcText.textColor = 0xff3300;
createTextField("mp3Cap",getNextHighestDepth(),0,65,740,20);
lrcBar.lrcBase.lrcText.autoSize = "center";
mp3Cap.autoSize = "right";
mp3Cap.html = true;
lrcBar._alpha = 0;
}
createLrcCtrl();
fitmodels();
/*****************第八部分:加載MP3列表的功能****************/
-折疊[運(yùn)行代碼][另存為網(wǎng)頁(yè)][拷貝到剪貼板]/*****************第八部分:加載MP3列表的功能****************/
var mp3Xml:XML = new XML();
mp3Xml.ignoreWhite = true;
mp3Xml.onLoad = function(success) {
if (success) {
mp3List = this.firstChild.firstChild.childNodes;
playmp3(Math.ceil(Math.random()*mp3List.length));
}
};
mp3Xml.load("http://dreamdesign.105.idcxin.com/bbs/menber/yypz/mp3/lrc/mp3list.xml");