1 package{ 2 //导入包 3 import flash.display.Sprite; 4 import flash.events.Event; 5 import flash.media.Sound; 6 import flash.media.SoundChannel; 7 import flash.net.URLRequest; 8 import flash.text.TextField; 9 //创建文档类 10 public class ABC1008 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="zbc.mp3"; 20 //创建Sound类实例 21 private var mysound:Sound=new Sound(); 22 //构造函数 23 public function ABC1008() { 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:Number=po/len; 69 //缩放显示对象sp2,实现进度显示 70 sp2.scaleX=per 71 //计算进度百分比 72 var percent:Number=Math.floor(per*10000)/100 73 //文本显示进度 74 txt.text="当前播放进度为:"+percent+"%" 75 } 76 } 77 }