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 }