[AS3]as3.0的sound类常用技巧整理(6)
问题六
我们想创建一个声音文件加载情况的进度条,这就要求我们能获取文件的大小,及已经下载了多少了。
解决方法
访问sound对象的bytesTotal 和bytesLoaded属性。
对于流式的音频文件,让用户知道目前已经下载了多少数据是个不错的想法。理想情况是:声音文件的下载速度比播放速度快,这样就不会在播放的时候暂停。但 是,在不稳定的网络和带宽比较窄的情况下,如果声音文件的编码率比较高,就很难保证缓冲区里总是非空的,也就很难保证不会出现暂停。
因此,用进度条来向用户展示目前声音的加载和播放情况是一个不错的选择。你也许看过很多流媒体播放器的进度条,比如Windows Media Player或QuickTime Player。通常,会有一个进度条表示音乐的播放进度,进度条的背景色是白色的,前景有一个黑色的进度条表示目前播放的位置,另外,还有一个灰色的进度 条表示目前缓冲区的情况。当灰色的进度条(缓冲buffer)比黑色的进度条(当前播放位置play position)长的时候,我们知道文件播放很流畅;当黑色的进度条赶上灰色的进度条的时候,媒体会停止播放,灰色进度条继续变长,继续向缓冲区加载数 据,当它足够长的时候,媒体会继续播放,黑色进度条会继续移动,这时灰色进度条就有希望一直领先了。
本文教你如何实现创建上面提到的灰色进度条和白色背景(以后我们将学习如何创建黑色进度条),要用到声音对象的两个属性bytesTotal 和bytesLoaded,这些属性的含义相当明了:bytesTotal 包含mp3文件总长度的信息,bytesLoaded包含当前已经下载了多少数据的信息。有了这两个值,我们就有了数据下载的百分比。
下面的例子设定了enterFrame的处理函数,让影片每播放一帧就重新计算当前下载百分比,然后根据这个绘制进度条。
- package {
- import flash.display.Sprite;
- import flash.media.Sound;
- import flash.net.URLRequest;
- import flash.events.Event;
- public class ProgressBar extends Sprite {
- private var _sound:Sound;
- public function ProgressBar( ) {
- addEventListener(Event.ENTER_FRAME, onEnterFrame);
- _sound = new Sound(new URLRequest(“song.mp3″));
- _sound.play( );
- }
- public function onEnterFrame(event:Event):void{
- var barWidth:int = 200;
- var barHeight:int = 5;
- var loaded:int = _sound.bytesLoaded;
- var total:int = _sound.bytesTotal;
- if(total > 0) {
- // 绘制白背景
- graphics.clear( );
- graphics.beginFill(0xFFFFFF);
- graphics.drawRect(10, 10, barWidth, barHeight);
- graphics.endFill( );
- // CuPlayer.com已经加载数据的百分比
- var percent:Number = loaded / total;
- // Draw a bar that represents the percent of
- // the sound that has loaded
- graphics.beginFill(0xCCCCCC);
- graphics.drawRect(10, 10,barWidth * percent, barHeight);
- graphics.endFill( );
- }
- }
- }
- }
如果我们把声音文件放在本地机器上进行测试,可能会看不到灰色进度条慢慢增长的效果,它会一下子变成100%,如果可能,把文件放在网络上进行测试,这样你就能看到效果了。注意:当你第二次或后面测试的时候,请清空浏览器的缓存,否则,会和在本地机器上测试的效果一样。
热门文章推荐
- [HLS]做自己的m3u8点播系统使用HTTP Live Streaming(HLS技术)
- [FMS]FMS流媒体服务器配置与使用相关的介绍
- [AS3]什么是M3U8,与HTML5的区别是什么
- AS2.0 让flash自适应全屏,并且不自动缩放
- [AS3]as3.0的sound类常用技巧整理
- [AS3]as3与ByteArray详解、ByteArray介绍、ByteArray用法
- 关于RTMP,RTMPT,RTMPS,RTMPE,RTMPTE协议的介绍
- [JS]分享浏览器弹出窗口不被拦截JS示例