|
51099在线学习网 http://www.51099.com在自己的主页上放个mp3播放器,把自己喜欢的音乐承上与朋友分享是件快乐的事,遗憾的是音乐文件太大,占自己的空间心疼:(链接别人的音乐又经常出现错误(音乐文件删了也不跟咱们打招呼),朋友久等却听不到音乐:) 这个简单的播放器最得意的地方就是能识别无效的链接,遇到无效的链接就自动跳到下一首,一直到有效的地址(除非你的音乐地址列表没有一个能下的),你所做的事就是在网上搜索你喜欢的音乐,把网址加到播放列表里就可以。 先看xml文件:songlist.xml 记录mp3的信息(主要是歌名、歌曲地址,你也可以自己添加其它信息)
<?xml version="1.0" ?> <songList> <songs> <songUrl><![CDATA[music/lwen.mp3]]></songUrl> <songName><![CDATA[山歌年年唱春光]]></songName> </songs> <songs> <songUrl><![CDATA[music/lwen2.mp3]]></songUrl> <songName><![CDATA[山歌年年唱春光2]]></songName> </songs> </songList>
//这里只列两首
注意:信息是<![CDATA[**********]]>星号部分 把下面的AS拷贝到你的第一帧就可以(简单写一下注释)
soundstop = 0; //默认音乐为播放,只为关闭音乐时使用 //-------------------- createEmptyMovieClip("songMc", 50); //建立一个空的MC存放mp3的信息(用数组也可以,但觉得没这方便) createTextField("song_txt", 10, 30, 3, 300, 50); //this.createTextField(instanceName, depth, x, y, width, height) //建立一个动态文本框来显示歌曲名等 setSongtxt = function (string) { song_txt._width = Number(string.length*13); song_txt.text = string; // 以下几行是自定义文字的颜色等属性 // myformat = new TextFormat(); // myformat.font = sans; // myformat.color = 0xFFFF99; // myformat.align = right; // song_txt.setTextFormat(myformat); }; //定义的控制动态文本框显示的内容及属性 //以下是处理xml里保存的mp3信息最好不要动,------------------------ xmlObj = new XML(); system.useCodepage = true; xmlObj.ignoreWhite = true; xmlObj.onLoad = function(success) { if (success) { setSongtxt("歌曲列表下载完毕"); var i = 0; var one_xml = xmlObj.firstChild.firstChild; while (one_xml != null) { duplicateMovieClip("songMc", "songMc" i, 100 i); var tempMc = eval("songMc" i); var two_xml = one_xml.firstChild; while (two_xml.firstChild != null) { var a = two_xml.nodeName; tempMc[a] = two_xml.firstChild.nodeValue; //trace(a " : " tempMc[a]); // 看看输出的是什么就知道是怎么回事了 two_xml = two_xml.nextSibling; } i ; one_xml = one_xml.nextSibling; } xmlLoad = 1; totalSongNum = i; //记下歌曲总数 curNum = random(totalSongNum); // 随机选中一首 //如果不喜欢老从第一首歌开始播放 curSong(curNum); //调用播放的函数开始播放 } else { setSongtxt("歌曲列表下载错误"); } }; //-------------- if (xmlLoad == undefined) { setSongtxt("下载歌曲列表"); xmlObj.load("songlist.xml"); } //--------------- my_sound = new Sound(); my_sound.onLoad = function(success) { if (success) { //如果下载成功。。。 setSongtxt(curSongName); my_sound.setVolume(80); stop(); } else { //如果下载失败。。。 setSongtxt("歌曲下载错误"); if (curNum<(totalSongNum-1)) { curNum ; } else { curNum = 0; } con = true; } }; // select-------------- curSong = function (curNum) { var tempSong = eval("this.songMc" curNum); curSongUrl = tempSong.songUrl; curSongName = tempSong.songName; // songUrl、songName分别与songlist.xml里对应 my_sound.loadSound(curSongUrl, true); // 获取地址后加载音乐 }; // 一首歌结束时调用----------------- my_sound.onSoundComplete = function() { if (curNum<(totalSongNum-1)) { curNum ; } else { curNum = 0; } con = true; play(); }; // ------------- if (con) { con = false; curSong(curNum); } //以下是按钮控制----------- ctrl.stop_mc.onPress = function() { if (soundstop == 0) { soundstop = 1; my_sound.stop(); ctrl.stop_mc.stop(); setSongtxt("音乐已关闭"); } else { soundstop = 0; my_sound.start(); ctrl.stop_mc.play(); setSongtxt(curSongName); } }; ctrl.next_btn.onPress = function() { if (curNum<(totalSongNum-1)) { curNum ; } else { curNum = 0; } ctrl.stop_mc.play(); con = true; play(); }; //END ------ //说明:本来想在一帧里实现所有功能,但不知是flash 本身的bug还是我的fool,两三个循环就停了,于是用多帧解决, //但还是把所有代码放在一帧里,其中xmlLoad作用是使第一次运行时下载xml列表, //con是为作用是使第一次运行时不马上调用curSong(curNum),而等xml处理完再调用 //后面加几帧都不碍,看你的耐性了 源文件打包 点击浏览该文件51099在线学习网 http://www.51099.com
|