(2011-05-11 旧博文搬家)简单MP3播放器

尝试做了一个简单的MP3播放器

(传到网盘上再外链过来似乎无法访问文件了,还要从缓存里挖出来,缓存里如果有个15KB的SWF那就是这个了。。路径可以填本地相对或者绝对路径、也可以填MP3文件的网络地址)

 

本来我是打算让整个播放器里只存在一个CHANNEL的毕竟同一时间只能播放一首歌。结果每次移动进度条都正在播放的歌都会变成重音,就是同时2首或更多首一起在播放,查了资料才知道原来每次使用SOUND.PLAY(),都会重新生成一个CHANNEL,我的理解就是这首歌不是消失了只是停了下来,在移动进度条之后由于再次使用了SOUND.PLAY()重新生成的CHANNEL和先前的CHANNEL一起播放了。所以在每次新播放一首歌的时候把上一首歌添加在进度条上的LISTENER给删除掉,这样同一时间只有一个LISTENER在进度条上即使其他歌曲的CHANNEL还在也不会受到影响。

但是有个疑问,没找到删除CHANNEL的方法,如果这样的话每次播放都生成一次CHANNEL那岂不是留下很多在舞台上?

 

还一个问题是全部循环模式好像有点问题,其他的循环模式都测试了好几遍可以正常运行。全部循环播放几次之后就又出现了重音的问题

控制循环模式的代码:

addEventListener(Event.ENTER_FRAME, nextMusic);
 function nextMusic(e:Event):void {
  if (mc.x>=180) {   //进度条是否移动到尽头
   //trace(playMode);
   for (var q:int=0; listButton[q].x==20; ) {
       q++;
      }  //用来检查歌曲列表的长度,因为每添加一首歌,都会新增一个listButton[i](即歌曲列表的按钮)到舞台并设置他的位置在前一个按

//钮的正下方,所以所有按钮的X值总是为20,q的值就是首个X值不为20的按钮即q-1就是最后一首歌的序号。

   switch (playMode) { //从0到4分别为单曲播放 单曲循环 随即播放 顺序播放 全部循环,其值由控制模式的按钮的X值决定
    case 0 :
     {
      allStopfunction(); //用来停止正在播放的歌并删除为其添加的所有LISTNER
      break;

     };
    case 1 :
     {
      allStopfunction();
      musicStart();
      break;

     };
    case 2 :
     {
      allStopfunction();
      url=musicList[Math.round(Math.random()*(q-1))].text;   //将URL定为0到Q-1之间的随即整数
      musicStart();
     break;}
    case 3 :
     {allStopfunction();
      if (i+1!=q) {        //如果下一首歌存在,则播放
       url=musicList[i+1].text;
       i=i+1;
       musicStart();
       
      }
      if (i==q-1) {
       }

      break;}
    case 4 :
     {allStopfunction();
      if ((i+1)!=q) {
       url=musicList[i+1].text;
       i=i+1;
       musicStart();
      }
      if ((i+1)==q) {     //如果下一首歌不存在,URL的取值就从0开始
       url=musicList[0].text;
       i=0;
       musicStart();
      }
      break;

    }
   }
  }

你可能感兴趣的:((2011-05-11 旧博文搬家)简单MP3播放器)