前二天在网上看了一个flash写的,
于是自己就改进了一下,修改了若干BUG,增加了一些功能。
主要的AS如下:
-------------------------------------------------------------------------------------
// Action script...
var myXML = new XML();
var mySound = new Sound();
var TrackCount = 0;
// [Action in Frame 1]
fscommand("allowscale", "false");
fscommand("showmenu", "false");
Stage.scaleMode = "noScale";
_quality = "height";
var fmt = new TextFormat();
fmt.font = "Tahoma";
fmt.size = 12;
//format
LCD.main.createTextField("mainText", 1, 0, 0, 78, 18);
LCD.main.mainText.selectable = false;
LCD.main.mainText.setTextFormat(fmt);
LCD.createTextField("hintText", 1, 4, 5, 78, 18);
LCD.hintText.setTextFormat(fmt);
var player = {};
player.selectedIndex = -1;
player.maxIndex = -1;
player.selectedItem = {};
player.subject = "";
player.mode = 0;
player.rplay = false;
player.intplay = true;
player.playtime = 3;
player.volumeValue = 70;
player.panValue = 0;
player.stoped = true;
player.setDefault = function() {
with (LCD) {
pause._visible = false;
play._visible = false;
stop._visible = true;
main.mainText.text = "已经全部就绪";
}
mySound.isLoaded = false;
stopjump();
progressbar.preloadBar._x = -147;
progressbar.loadBar._x = -147;
progressbar.semiBar._x = -147;
};
player.setDefault();
this.mp3list._visible = false;
this.copyright._visible = false;
this.LCD.max._visible = false;
this.volume.dot._x = 70-player.volumeValue/100*20;
//this.pan.dot._x = 70-player.panValue/100*20;
this.LCD.volumeLeft._width = player.volumeValue/100*20;
this.LCD.volumeLeft._x = 120-player.volumeValue/100*20;
this.LCD.volumeRight._width = player.volumeValue/100*20;
this.LCD.pan._x = 110+player.panValue/100*10;
this.LCD.stop._visible = true;
this.LCD.play._visible = false;
this.LCD.pause._visible = false;
this.LCD.repeatAll._visible = false;
this.LCD.repeatOne._visible = false;
var textMask = this.LCD.createEmptyMovieClip("textMask", 100);
textMask.beginFill(0, 100);
drawRectangle(textMask, 78, 18.5, 6, 6);
this.LCD.main.mainText.autoSize = true;
this.LCD.main.setMask(LCD.textMask);
setInterval(function () {
LCD.main.mainText._x--;
if (LCD.main.mainText._x<LCD.main.mainText._width*-1) {
LCD.main.mainText._x = LCD.textMask._width;
}
}, 80);
setInterval(function () {
if (player.intplay) {
player.select(0);
player.intplay = false;
}
}, 100);
player.select = function(index) {
mp3list.mc.sList.shape._y = index*16+mp3list.mc.sList._y;
player.selectedIndex = index;
player.hasplay[index]++;
player.selectedItem = eval("mp3list.mc.sList.l"+index);
player.subject = player.labelAry[index];
player.artist = player.artAry[index];
LCD.main.mainText._x = 0;
LCD.main.mainText.text = player.subject+"(Artist:"+player.artist+")";
mySound.isLoaded = false;
mySound.preloadDuration = 0;
mySound.start(0);
mySound.stop();
stopjump();
mySound.loadSound(player.dataAry[index], true);
mySound.setVolume(player.volumeValue);
mySound.start(0);
playjump();
mySound.allcomplete = false;
Mshow.trackText.text = (index+1)+"/"+TrackCount;
var goFrame = player.levelAry[index];
Mshow.levelText.gotoAndStop(Number(goFrame)+1);
LCD.stop._visible = false;
LCD.pause._visible = false;
LCD.play._visible = true;
setInterval(function () {
LCD.time.text = formatTime(mySound.position/1000 | 0);
}, 500);
};
//System.useCodepage=true;
myXML.ignoreWhite = true;
myXML.load("mp3list.xml");
myXML.onLoad = function(succ) {
if (succ) {
LCD.main.mainText.text = "载入播放清单完成,可以欣赏音乐了.";
var _l3 = this.firstChild.childNodes;
var labelary = [];
var dataary = [];
var artary = [];
var hasplay = [];
var levelary = [];
var _l1 = 0;
TrackCount = _l3.length;
while (_l1<TrackCount) {
labelary[labelary.length] = _l3[_l1].attributes.n;
dataary[dataary.length] = _l3[_l1].attributes.f;
var _l2 = _l3[_l1].attributes.a;
_l2 = _l2 != undefined ? (" - "+_l2) : ("");
artary[artary.length] = _l2;
var _l4 = _l3[_l1].attributes.l;
_l4 = _l4 != undefined ? (_l4) : ("0");
_l4 = _l4 > 5 ? ("5") : (_l4);
levelary[levelary.length] =_l4;
hasplay[hasplay.length] = 0;
_l1++;
}
player.maxIndex = Math.min(labelary.length-1, dataary.length-1);
player.labelAry = labelary;
player.artAry = artary;
player.dataAry = dataary;
player.levelAry = levelary;
player.hasplay = hasplay;
getMp3List(mp3list, labelary, artary, 158, 98);
Mshow.trackText.text = TrackCount ;
} else {
LCD.main.mainText.text = "载入播放清单出错了";
}
};
function randomplay() {
var j = 1;
while ( j<=player.playtime ) {
var i = 0;
while (i<TrackCount) {
var activeTrack = random(TrackCount-1);
activeTrack = activeTrack+1;
if (player.hasplay[activeTrack]<j) {
player.select(activeTrack);
exit;
}
i++;
}
j++;
}
}
function stopjump() {
Mshow.effectbar.b1.gotoAndStop(1);
Mshow.effectbar.b2.gotoAndStop(1);
Mshow.effectbar.b3.gotoAndStop(1);
Mshow.effectbar.b4.gotoAndStop(1);
Mshow.effectbar.b5.gotoAndStop(1);
Mshow.effectbar.b6.gotoAndStop(1);
Mshow.effectbar.b7.gotoAndStop(1);
}
function pausejump() {
Mshow.effectbar.b1.stop();
Mshow.effectbar.b2.stop();
Mshow.effectbar.b3.stop();
Mshow.effectbar.b4.stop();
Mshow.effectbar.b5.stop();
Mshow.effectbar.b6.stop();
Mshow.effectbar.b7.stop();
}
function playjump() {
Mshow.effectbar.b1.play();
Mshow.effectbar.b2.play();
Mshow.effectbar.b3.play();
Mshow.effectbar.b4.play();
Mshow.effectbar.b5.play();
Mshow.effectbar.b6.play();
Mshow.effectbar.b7.play();
}
function setzero() {
var i = 0;
while (i<TrackCount) {
player.hasplay[i] = 0;
i++;
}
}
function playselecte() {
if (player.maxIndex <= player.selectedIndex) {
if (player.rplay) {
randomplay();
} else if (player.mode == 0) {
player.setDefault();
} else if (player.mode == 1) {
player.select(0);
} else {
player.select(player.selectedIndex);
}
} else {
if (player.rplay) {
randomplay();
} else if (player.mode == 2) {
player.select(player.selectedIndex);
} else {
player.select(player.selectedIndex+1);
}
}
}
mySound.isLoaded = false;
mySound.onLoad = function(succ) {
if (succ) {
mySound.isLoaded = true;
player.timeNum = mySound.duration;
if (player.timeNum | false) {
LCD.timeNum.num.text = formatTime(player.timeNum/1000);
} else {
LCD.timeNum.num.text = "N/A.";
}
} else {
stopjump();
//jumpnext();
}
};
mySound.onSoundComplete = function() {
stopjump();
mySound.allcomplete = true;
Mshow.trackText.text = "";
Mshow.levelText.gotoAndStop(1);
playselecte()
};
mySound.onID3 = function() {
if (mySound.id3.TYER | false) {
var _l3 = mySound.id3.TYER;
} else if (mySound.id3.year | false) {
_l3 = mySound.id3.year;
} else {
_l3 = " N/A.";
}
LCD.year.num.text = _l3;
var _l2 = [];
var _l1;
_l1 = mySound.id3.TALB;
if (_l1 != undefined) {
_l2[_l2.length] = "Album:"+_l1;
}
_l1 = mySound.id3.TCOM;
if (_l1 != undefined) {
_l2[_l2.length] = "Composer:"+_l1;
}
_l1 = mySound.id3.TCOP;
if (_l1 != undefined) {
_l2[_l2.length] = "Copyright:"+_l1;
}
_l1 = mySound.id3.TRCK;
if (_l1 != undefined) {
_l2[_l2.length] = "Track:"+_l1;
}
_l1 = mySound.id3.TPUB;
if (_l1 != undefined) {
_l2[_l2.length] = "Publisher:"+_l1;
}
if (_l2.length>1) {
_l1 = _l2.join(", ");
} else if (_l2.length == 0) {
_l1 = "";
} else {
_l1 = _l2[0];
}
LCD.main.mainText.text = player.subject+" (Artist: "+player.artist+(_l1.length>0 ? (", ") : (""))+_l1+" ) ";
};
function drawRectangle(myMc, width, height, Xoffset, Yoffset) {
var _l1 = Xoffset;
var _l11 = Yoffset;
var _l2 = myMc;
_l1 = _l1 != null ? (_l1) : (0);
_l11 = _l11 != null ? (_l11) : (0);
_l2.moveTo(_l1, _l11);
_l2.lineTo(width+_l1, _l11);
_l2.lineTo(width+_l1, height+_l11);
_l2.lineTo(_l1, height+_l11);
_l2.lineTo(_l1, _l11);
}
function getMp3List(parentmc, label, artary, width, height) {
var mc = parentmc.createEmptyMovieClip("mc", 1);
var shapeHeight = 16;
var padding = 1;
var borderWidth = 1;
var scrollWidth = 11;
var shapeWidth = width-borderWidth-padding*3-scrollWidth;
var clientHeight = shapeHeight*label.length;
var border = mc.createEmptyMovieClip("border", 100);
border.lineStyle(1, 6710886);
drawRectangle(border, width, height, padding*-1-borderWidth-0.8, -2.8);
var background = mc.createEmptyMovieClip("background", -100);
background.beginFill(16777215, 90);
drawRectangle(background, width, height, padding*-1-borderWidth-0.2, -2.2);
var sList = mc.createEmptyMovieClip("sList", 10);
var _l2 = 0;
var clicktim = 0;
while (_l2<label.length) {
var _l1 = sList.createEmptyMovieClip("l"+_l2, _l2);
_l1.createTextField("label", 1, -3, -2.5, 200, shapeHeight);
_l1.label.autoSize = false;
_l1.label._width = width-padding*2-borderWidth*2-scrollWidth+20;
_l1.label.selectable = false;
_l1._y = shapeHeight*_l2;
_l1.index = _l2;
_l1.label.text = _l2+1+":"+label[_l2]+artary[_l2];
_l1.label.setTextFormat(fmt);
_l1.doubleclick = function() {
var _l2 = this;
var nowtim = getTimer();
_l2.clicked = nowtim;
_l2.clicked = getTimer();
var subtim = nowtim-clicktim;
clicktim = nowtim;
return (subtim<=300 ? (true) : (false));
};
_l1.onPress = function() {
var _l1 = (_ymouse-parentmc._y-mp3list.mc.sList._y)/shapeHeight | 0;
if (this.doubleclick()) {
player.select(_l1);
shape._y = _l1*shapeHeight;
}
focusShape._y = _l1*shapeHeight;
};
_l2++;
}
var shape = sList.createEmptyMovieClip("shape", -1);
shape.beginFill(65280, 30);
drawRectangle(shape, shapeWidth, shapeHeight, -1, -1);
var hintShape = sList.createEmptyMovieClip("hintShape", -2);
hintShape.beginFill(65280, 10);
drawRectangle(hintShape, shapeWidth, shapeHeight, -1, -1);
var focusShape = sList.createEmptyMovieClip("focusShape", -3);
focusShape.lineStyle(1, 65280, 50);
drawRectangle(focusShape, shapeWidth, shapeHeight, -1, -1);
mc.onMouseMove = function() {
updateAfterEvent();
hintShape._y = Math.max(0, Math.min(_ymouse-shapeHeight/2-parentmc._y, height-padding-borderWidth-shapeHeight)-(sList._y | 0));
};
var myMask = mc.createEmptyMovieClip("myMask", 99);
myMask.beginFill(0, 100);
drawRectangle(myMask, width-borderWidth-scrollWidth, height-borderWidth-padding*2, -2.5, -1.5);
sList.setMask(myMask);
var scrollbar = mc.createEmptyMovieClip("scrollbar", 97);
scrollbar.beginFill(16382457);
drawRectangle(scrollbar, scrollWidth, height-padding*2-borderWidth);
var scrollbarBorder = scrollbar.createEmptyMovieClip("scrollbarBorder", 1);
scrollbarBorder.lineStyle(1, 14935011);
drawRectangle(scrollbarBorder, scrollWidth-1, height-padding*2-borderWidth, 0, -1.5);
var scrollbutton = scrollbar.createEmptyMovieClip("scrollbutton", 2);
scrollbutton.beginFill(10066329);
drawRectangle(scrollbutton, scrollbar._width-5, 16, 1.5);
scrollbar._x = width-scrollWidth-padding*2-borderWidth-0.5;
scrollbar.onPress = function() {
this.button1 = true;
};
scrollbar.onMouseUp = function() {
this.button1 = false;
};
scrollbar.maxY = scrollbar._height-scrollbutton._height-5;
scrollbar.onMouseMove = function() {
if (this.button1) {
scrollbutton._y = Math.max(0, Math.min(_ymouse-parentmc._y-scrollbutton._height/2-2, this.maxY));
sList._y = Math.max(scrollbutton._y*clientHeight/(scrollbar._height-scrollbutton._height)*-1 | 0, myMask._height-clientHeight);
}
};
}
function fixSemiTime(time) {
var _l1 = time;
_l1>=10 ? (_l1) : ("0"+_l1);
return (_l1>=10 ? (_l1) : ("0"+_l1));
}
function formatTime(time) {
var s = "";
return (fixSemiTime(time/60 | 0)+":"+fixSemiTime(time%60 | 0));
}
function hint(obj, hintStr) {
var _l1 = obj;
_l1.onRollOver = function() {
LCD.hintText._visible = true;
LCD.hintText.text = hintStr;
LCD.main.mainText._visible = false;
};
_l1.onRollOut = function() {
LCD.hintText._visible = false;
LCD.hintText.text = "";
LCD.main.mainText._visible = true;
};
_l1.onReleaseOutside = function() {
LCD.hintText._visible = false;
LCD.hintText.text = "";
LCD.main.mainText._visible = true;
};
}
var cbackground = copyright.createEmptyMovieClip("hintShape", 1);
cbackground.beginFill(16777215, 90);
drawRectangle(cbackground, 159, 99, -3.5, -3.5);
var cborder = cbackground.createEmptyMovieClip("focusShape", 1);
cborder.lineStyle(1, 0, 50);
drawRectangle(cborder, 158, 98, -2.8, -3);
cbackground.onPress = function() {
return (false);
};
cbackground.useHandCursor = false;
var rightText = copyright.createTextField("rightText", 2, 0, -2, 153, 95);
copyright.rightText.html = true;
copyright.rightText.selectable = false;
copyright.rightText.htmlText = "<b><font color=\"#ff0000\">MP3Player</font></b><br/>----------------------------------------<br/>Version: 2.0 (2.0.1016)<br/>Author: <u><a href=\"http://landlordh.qqvip.com/" target=\"_blank\"><font color=\"#0066cc\">landlord</font></a></u><br/>Publish Date: 10-16-2004<br/>----------------------------------------<br/>Special thanks to <u>L3X</u>";
copyright.rightText.setTextFormat(fmt);
var mdown = false;
var xwidth = volume._width-volume.dot._width;
this.volume.onPress = function() {
mdown = true;
};
this.volume.onMouseUp = function() {
mdown = false;
};
this.volume.onMouseMove = function() {
if (mdown) {
updateAfterEvent();
var _l2 = _xmouse-volume._x;
var _l1 = 8;
volume.dot._x = Math.max(_l1, Math.min(_l2, xwidth)-1)-3;
player.volumeValue = ((volume.dot._x-1)/(volume._width-_l1-volume.dot._width-1)*100 | 0)-5;
mySound.setVolume(player.volumeValue);
LCD.hintText.text = "音量: "+player.volumeValue+"%";
if (player.volumeValue == 0) {
LCD.speaker._visible = false;
} else if (player.volumeValue == 100) {
LCD.max._visible = true;
} else {
LCD.speaker._visible = true;
LCD.max._visible = false;
}
LCD.volumeLeft._width = player.volumeValue/100*20;
LCD.volumeLeft._x = 120.2-player.volumeValue/100*20;
LCD.volumeRight._width = player.volumeValue/100*20;
}
};
this.pan.maxX = 70;
this.pan.offsetX = pan._x;
this.pan.dot._width = 18;
this.pan.dotWidth = 14;
this.pan.onPress = function() {
this.mdown = true;
};
this.pan.onMouseUp = function() {
this.mdown = false;
};
this.pan.onMouseMove = function() {
if (this.mdown) {
updateAfterEvent();
pan.dot._x = Math.max(0, Math.min(_xmouse-pan.offsetX+pan.dotWidth/2, pan.maxX))+pan.dotWidth/2;
player.panValue = (pan.dot._x-pan.dotWidth/2)/(pan.maxX-pan.dotWidth/3+4.500000)*200-100 | 0;
if (player.panValue>-15 && player.panValue<15) {
player.panValue = 0;
pan.dot._x = pan.maxX/2+pan.dotWidth/1.700000;
}
LCD.hintText.text = "Balance: "+player.panValue;
mySound.setPan(player.panValue);
LCD.pan._x = 110+player.panValue/100*10;
}
};
setInterval(function () {
if (mySound.allcomplete){
progressbar.preloadBar._x = -147;
progressbar.loadBar._x = -147;
}
else if (!mySound.isLoaded) {
progressbar.preloadBar._x = (mySound.getBytesLoaded()/mySound.getBytesTotal()*147 | 0)-147;
mySound.preloadDuration = mySound.getBytesTotal()*mySound.duration/mySound.getBytesLoaded() | 0;
LCD.timeNum.num.text = formatTime(mySound.preloadDuration/1000 | 0);
progressbar.loadBar._x = (mySound.position/mySound.preloadDuration*147 | 0)-147;
} else {
progressbar.preloadBar._x = 0;
progressbar.loadBar._x = (mySound.position/mySound.duration*147 | 0)-147;
}
}, 500);
progressbar.onMouseDown = function() {
this.button = true;
if (_ymouse>progressbar._y && _ymouse<progressbar._height+progressbar._y && _xmouse>progressbar._x && _xmouse<progressbar._x+147 && !mp3list._visible) {
progressbar.semiBar._visible = true;
progressbar.semiBar._x = Math.min(Math.max(0, Math.min(_xmouse-progressbar._x, 147))-147, progressbar.preloadBar._x);
}
};
progressbar.onMouseUp = function() {
this.button = false;
if (_ymouse>progressbar._y && _ymouse<progressbar._height+progressbar._y && _xmouse>progressbar._x && _xmouse<progressbar._x+147 && !mp3list._visible) {
mySound.start((progressbar.semiBar._x+147)/147*mySound.duration/1000 | 0);
}
progressbar.semiBar._visible = false;
};
progressbar.onMouseMove = function() {
updateAfterEvent();
if (_ymouse>progressbar._y && _ymouse<progressbar._height+progressbar._y && this.button && !mp3list._visible) {
progressbar.semiBar._x = Math.min(Math.max(0, Math.min(_xmouse-progressbar._x, 147))-147, progressbar.preloadBar._x);
}
};
btPlay.onRelease = function() {
playjump();
if (mySound.position != 0 && !mySound.reseted && player.selectedIndex != -1) {
mySound.start(mySound.position/1000);
} else if (player.selectedIndex == -1) {
player.select(0);
} else {
mySound.start(0);
}
LCD.stop._visible = false;
LCD.pause._visible = false;
LCD.play._visible = true;
};
btPause.onRelease = function() {
mySound.stop();
mySound.reseted = false;
pausejump();
LCD.stop._visible = false;
LCD.pause._visible = true;
LCD.play._visible = false;
};
btStop.onRelease = function() {
setzero();
stopjump();
LCD.stop._visible = true;
LCD.pause._visible = false;
LCD.play._visible = false;
mySound.stop();
mySound.reseted = true;
//stopjump();
//LCD.stop._visible = true;
//LCD.pause._visible = false;
//LCD.play._visible = false;
};
btPreview.onRelease = function() {
if (player.rplay) {
randomplay();
} else if (player.mode == 1 && player.selectedIndex == 0) {
player.select(player.maxIndex);
} else if (player.mode == 2) {
player.select(player.selectedIndex);
} else if ( player.selectedIndex <= 0 ) {
LCD.hintText.text = "已经是第一首";
} else {
player.select(player.selectedIndex-1);
}
};
btNext.onRelease = function() {
if (player.rplay) {
randomplay();
} else if (player.mode == 1 && player.maxIndex == player.selectedIndex) {
player.select(0);
} else if (player.mode == 2) {
player.select(player.selectedIndex);
} else if (player.maxIndex <= player.selectedIndex) {
LCD.hintText.text = "已经是最末首";
} else {
player.select(player.selectedIndex+1);
}
};
btList.onRelease = function() {
mp3list._visible = true;
};
btMode.onRelease = function() {
if (player.mode == 0) {
player.mode = 1;
LCD.repeatOne._visible = false;
LCD.repeatAll._visible = true;
LCD.hintText.text = "重复所有";
} else if (player.mode == 1) {
player.mode = 2;
LCD.repeatOne._visible = true;
LCD.repeatAll._visible = false;
LCD.hintText.text = "重复这首";
} else {
player.mode = 0;
LCD.repeatOne._visible = false;
LCD.repeatAll._visible = false;
LCD.hintText.text = "不重复";
}
};
btrplay.onRelease = function() {
if (player.rplay) {
player.rplay = false;
LCD.hintText.text = "随机→顺序";
} else {
player.rplay = true;
LCD.hintText.text = "顺序→随机";
}
};
btRight.onRelease = function() {
copyright._visible = true;
};
mp3list.btClose.onRelease = function() {
mp3list._visible = false;
};
copyright.btClose.onRelease = function() {
copyright._visible = false;
};
hint(btPreview, "上一首");
hint(btNext, "下一首");
hint(btPlay, "播放");
hint(btStop, "停止");
hint(btPause, "暂停");
hint(btList, "清单");
hint(btRight, "版权说明");
hint(progressbar, "播放进度");
hint(volume, "音量控制");
hint(pan, "音量平衡");
hint(btMode, "播放模式");
hint(btrplay, "随机播放");
---------------------------------------------------------------------------------------