·您当前的位置:首页 > 技术教程 > AS2与AS3技术 >

[Flex]源代码实例mp3播放器

时间:2014-06-03 14:10酷播
[Flex]源代码实例mp3播放器
  1. // 方案一 
  2.  
  3. <?xml version="1.0" encoding="utf-8"?> 
  4. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="myInit()"> 
  5.  <mx:Script> 
  6.   <![CDATA[ 
  7.   import flash.events.*; 
  8.   import flash.net.URLRequest; 
  9.   import flash.media.Sound; 
  10.   import flash.media.SoundChannel; 
  11.   import flash.media.SoundTransform; 
  12.   import flash.utils.Timer; 
  13.   import flash.events.TimerEvent; 
  14.   import mx.controls.Alert; 
  15.   
  16.   //mp3 的 url 地址 
  17.   private var soundURL:String = "asflex.mp3"; 
  18.   //访问 url 上的东西都用 URLRequest 了 
  19.   private var request:URLRequest = new URLRequest(soundURL); 
  20.   private var my_sound:Sound=new Sound(); // 新建 Sound 对象 
  21.   //声明 SoundChannel 类型的变量 my_channel 
  22.   private var my_channel:SoundChannel; 
  23.   //新建 myTimer 对象并定义循环的时间间隔为10毫秒,循环次数为无限次(参数中的0表示无限次) 
  24.   private var myTimer:Timer = new Timer(10, 0); 
  25.     
  26.   private function myInit():void{ 
  27.    my_sound.load(request); // 载入外部 mp3: She is my sin.mp3 
  28.    } 
  29.   //播放音乐: 
  30.   private function playSound(): void{ 
  31.    Alert.show(my_sound.length.toString()); 
  32.    my_channel = my_sound.play(); // 音乐正式开始播放 
  33.    //添加事件侦听器, 功能: 循环执行 timerHandler 函数(但这里还没有开始循环执行) 
  34.    myTimer.addEventListener(TimerEvent.TIMER, timerHandler); 
  35.    myTimer.start(); // 这里才开始循环执行 timerHandler 函数 
  36.   } 
  37.   //停止音乐: 
  38.   private function stopSound():void{ 
  39.    //停止对函数 timerHandler 的循环执行, 因为音乐开始时 myTimer 对象就对函数 timerHandler 循环执行了 
  40.    myTimer.stop(); 
  41.    my_channel.stop(); // 正式停止音乐 
  42.    progress_hs.value = 0; // 使那"播放进度"条的值回到0,即回到最左端 
  43.   } 
  44.   //定义被 myTimer 循环执行的函数 timerHandler 
  45.   private function timerHandler(event:TimerEvent):void{ 
  46.   //功能: 显示音乐的播放进度, 进度条会随着音乐的继续播放而向右缓缓移动; 
  47.   //把这个公式翻译为中文: 播放进度条的值=当前音乐播放时间/音乐的总时间 
  48.    progress_hs.value = my_channel.position/my_sound.length; 
  49.   } 
  50.   //改变播放进度: 每当 "播放进度" 条被用户拉动过而使其值改变时,就执行以下函数 
  51.   private function changeProgress():void{ 
  52.    //音乐停止且必须停止,是为了从新的播放时间点开始播放 
  53.    //(感觉这里麻烦了点, 如果有更好的方法,恳请高手指点!请联系我: 
  54.    // www.Y-boy.cn 或 www.RiaHome.cn ,谢谢!) 
  55.    my_channel.stop(); 
  56.    //使音乐从新的时间点开始播放,新的时间点是小括号内的值, 
  57.    //即:"播放进度"条的值*音乐的总时间, 为什么会这样呢? 
  58.    //因为 HSlider 控件(那条"播放进度")的长度在下面被定义为1, 
  59.    //使得"播放进度"条的值在闭区间[0,1]内, 所以只需再乘以音乐的总时间就行了 
  60.    my_channel = my_sound.play(progress_hs.value*my_sound.length); 
  61.   } 
  62.   //改变音量: 每当 "音量大小" 控制条被用户拉动过而使其值改变时,就执行以下函数 
  63.   private function changeVolume():void{ 
  64.    //把 my_channel.soundTransform 赋值给 my_transform 
  65.    var my_transform:SoundTransform = my_channel.soundTransform; 
  66.    my_transform.volume = volume_hs.value; // 把"音量大小"控制条当前值赋给 my_transform.volume 
  67.    my_channel.soundTransform = my_transform; // 给 my_channel.soundTransform 赋值 
  68.    /* 
  69.         这里的用法很特别, 像使用 AS2.0 里面的滤镜(Filters)那样, 先创建一个 "第三者", 
  70.     对 "第三者" 进行操作, 最后才把 "第三者" 赋值给 "当事人" . AS2.0 里面的滤镜的 "第三者" 
  71.     是数组, 这里的 "第三者" 是 my_transform . 这里不能跟 AS2.0 里面的滤镜相比, 只不过为 
  72.     了方便理解, 才这么说. (个人见解, 如有错请指出!) 
  73.    */ 
  74.   } 
  75.   //改变左右声道: 每当 "左右声道" 控制条被用户拉动过而使其值改变时,就执行以下函数 
  76.   private function changePan():void{ 
  77.    //此处用法与上面的 改变音量 相同, 理解 改变音量 的, 就能理解这里 
  78.    var my_transform:SoundTransform = my_channel.soundTransform; 
  79.    my_transform.pan = pan_vs.value; 
  80.    my_channel.soundTransform = my_transform; 
  81.   }  
  82.   
  83.   ]]> 
  84.  </mx:Script> 
  85.   
  86.  <!-- CuPlayer.com显示歌曲名称 --> 
  87.  <mx:Label text="歌曲:She is my sin" fontSize="12"/> 
  88.   
  89.  <!-- CuPlayer.com播放进度条 --> 
  90.  <mx:Label text="播放进度:" fontSize="12" y="25"/> 
  91.  <mx:HSlider id="progress_hs" width="100" minimum="0" maximum="1" 
  92.   x="60" y="25" mouseDown="myTimer.stop()" mouseUp="myTimer.start()" 
  93.   change="changeProgress()"/> 
  94.   
  95.  <!-- CuPlayer.com音量控制条 --> 
  96.  <mx:Label text="音量大小:" fontSize="12" y="52"/> 
  97.  <mx:HSlider id="volume_hs" width="100" minimum="0" maximum="1" 
  98.   y="52" x="60" value="0.8" change="changeVolume()"/> 
  99.   
  100.  <!-- CuPlayer.com左右声道控制条 --> 
  101.  <mx:Label text="左右声道:" fontSize="12" x="-1" y="78"/> 
  102.  <mx:HSlider id="pan_vs" width="100" minimum="-1" maximum="1" 
  103.   x="60" y="80" value="0" change="changePan()"/> 
  104.   
  105.  <!-- CuPlayer.com播放和停止按钮 --> 
  106.  <mx:Button label="play" y="116" x="50" click="playSound()"/> 
  107.  <mx:Button label="stop" y="116" x="109" click="stopSound()"/> 
  108. </mx:Application> 

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器