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

[AS3]AS3之处理音乐播放器的播放进度

时间:2013-07-03 23:13CuPlayer.com
使用Sound类的length属性获取当前音频的总长度;使用SoundChannel类的position属性获取播放头在当前音频的位置,也就是当前播放的长度;然后二者的比值就是当前播放进度值

此原理为:使用Sound类的length属性获取当前音频的总长度;使用SoundChannel类的position属性获取播放头在当前音频的位置,也就是当前播放的长度;然后二者的比值就是当前播放进度值。

下面上示例:(文档类如下)

  1. package com.lzxt{ 
  2.     //导入包 
  3.     import flash.display.Sprite; 
  4.     import flash.events.*; 
  5.     import flash.media.Sound; 
  6.     import flash.media.SoundChannel; 
  7.     import flash.net.URLRequest; 
  8.     import flash.text.TextField 
  9.     //创建文档类 
  10.     public class SoundPro extends Sprite { 
  11.         //定义属性 
  12.         private var len:Number; 
  13.         private var po:Number; 
  14.         private var song:SoundChannel; 
  15.         private var sp1:Sprite 
  16.         private var sp2:Sprite 
  17.         private var txt:TextField 
  18.         //定义要加载的文件路径,注意,此路径要相对于SWF文件的目录 
  19.         private var url:String="献给爱丽丝.mp3"
  20.         //创建Sound类实例 
  21.         private var mysound:Sound=new Sound(); 
  22.         //构造函数 
  23.         public function SoundPro() { 
  24.             //创建URL连接 
  25.             var request:URLRequest=new URLRequest(url); 
  26.             //注册加载完成事件 
  27.             mysound.addEventListener(Event.COMPLETE,completeHandler); 
  28.             //加载文件 
  29.             mysound.load(request); 
  30.             //创建一个背景显示对象 
  31.             sp1=new Sprite(); 
  32.             sp1.graphics.beginFill(0xff0000); 
  33.             sp1.graphics.drawRect(0,0,300,20); 
  34.             sp1.graphics.endFill(); 
  35.             addChild(sp1); 
  36.             sp1.x=50
  37.             sp1.y=100
  38.             //创建一个用于缩放的显示对象,通过缩放表示进度值 
  39.             sp2=new Sprite(); 
  40.             sp2.graphics.beginFill(0xffff00); 
  41.             sp2.graphics.drawRect(0,0,298,18); 
  42.             sp2.graphics.endFill(); 
  43.             addChild(sp2); 
  44.             sp2.x=51
  45.             sp2.y=101
  46.             //创建一个动态文本,用于在其中不断显示当前的进度 
  47.             txt=new TextField() 
  48.             txt.text="当前播放进度为:" 
  49.             txt.x=50 
  50.             txt.y=120 
  51.             txt.width=300 
  52.             addChild(txt) 
  53.         } 
  54.         //创建加载完成事件侦听函数 
  55.         private function completeHandler(event:Event):void { 
  56.             //加载完成,开始播放 
  57.             song=mysound.play(); 
  58.             //获取当前声音文件的长度 
  59.             len=mysound.length; 
  60.             //加入帧循环事件,逐帧计算播放进度 
  61.             addEventListener(Event.ENTER_FRAME,onenterframe); 
  62.         } 
  63.         //创建逐帧计算和显示进度事件处理函数 
  64.         private function onenterframe(evt:Event):void { 
  65.             //获取当前播放头所对应的音频文件长度 
  66.             po=song.position; 
  67.             //计算进度比值 
  68.             var per=po/len; 
  69.             //缩放显示对象sp2,实现进度显示 
  70.             sp2.scaleX=per 
  71.             //计算进度百分比 
  72.             var percent=Math.floor(per*10000)/100 
  73.             //文本显示进度 
  74.             txt.text="当前播放进度为:"+percent+"%" 
  75.         } 
  76.     } 

热门文章推荐

请稍候...

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

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