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

[AS3]as3.0的sound类常用技巧整理(9)

时间:2013-05-08 17:11CuPlayer.com
问题九 我们想知道当前的歌曲已经播放了百分之几(意译) 解决方法 用Sound.length获取声音文件的长度,用SoundChannel.position获取当前播放了多少。 问题六ActionScript3 使用sound类获取文件大小中,我们提到了

问题九
我们想知道当前的歌曲已经播放了百分之几(意译)
解决方法
用Sound.length获取声音文件的长度,用SoundChannel.position获取当前播放了多少。
问题六ActionScript3 使用sound类——获取文件大小中,我们提到了如何添加一个不仅显示下载进度还显示播放进度的进度条,那一节中学习了创建显示下载进度的部分。
本节讨论另外一个部分:如何跟踪播放进度。为了实现这个目标,我们必须知道两个量:当前文件播放位置是多少和文件总长度。虽然它们看起来差不多,但是它们 却在不同的类中,文件长度信息是sound对象的一个属性,当前播放位置在SoundChannel类中。类似于问题六[原创] ActionScript3 使用sound类(e文翻译)——获取文件大小中创建已下载进度条一样,有这两个量很容易得到播放进度条。
不幸的是,播放进度条做起来比下载进度条要复杂,因为声音文件的总长度要等到声音文件全部下载完毕之后才能得到,此时读取文件长度只是得到了已经下载的声 音文件的长度。因此,比如:以个十分钟的音乐,下载了10%,它的长度(length)是一分钟。(事实上,length和position都返回毫秒为 单位的数据,如果需要,我们也可以把它转换成“分:秒”的表示形式)
幸运的是,我们只要经过一点小小的数学运算就能得到文件的总长度(毫秒),我们拿当前文件的长度(毫秒)除以当前已经下载下来的百分比,结果将非常接近文 件的实际长度(毫秒)。说一下刚刚提到的例子:长度返回值是1分钟,这个一分钟是指已经下载的文件长度。当我们拿这个一分钟除以1/10,就能得到结果是 10,这样我们就得到了文件的总长度是10分钟。
上面提到的百分比是用bytesLoaded/bytesTotal得到的,这个值是我们在做下载进度条时候用过并存起来的,所以所以文件总长度只要一行代码就能实现了:
length /= percentBuffered;
说明:问题六[原创]ActionScript3 使用sound类——获取文件大小中,我们提到了要想正确显示进度条要清空缓存的问题,在此不再重复。下面的代码展示了如何把两个进度条放在一起:

  1. package { 
  2. import flash.display.Sprite; 
  3. import flash.media.Sound; 
  4. import flash.media.SoundChannel; 
  5. import flash.net.URLRequest; 
  6. import flash.events.Event; 
  7. public class ProgressBar2 extends Sprite { 
  8. private var _sound:Sound; 
  9. private var _channel:SoundChannel; 
  10. public function ProgressBar2( ) { 
  11. addEventListener(Event.ENTER_FRAME, onEnterFrame); 
  12. _sound = new Sound(new URLRequest("song.mp3")); 
  13. _channel = _sound.play( ); 
  14. public function onEnterFrame(event:Event):void{ 
  15. var barWidth:int = 200
  16. var barHeight:int = 5
  17. var loaded:int = _sound.bytesLoaded; 
  18. var total:int = _sound.bytesTotal; 
  19. var length:int = _sound.length; 
  20. var position:int = _channel.position; 
  21. // Draw a background bar 
  22. graphics.clear( ); 
  23. graphics.beginFill(0xFFFFFF); 
  24. graphics.drawRect(10, 10, barWidth, barHeight); 
  25. graphics.endFill( ); 
  26. if(total > 0) { 
  27. // The percent of the sound that has loaded 
  28. var percentBuffered:Number = loaded / total; 
  29. // Draw a bar that represents the percent of 
  30. // the sound that has loaded 
  31. graphics.beginFill(0xCCCCCC); 
  32. graphics.drawRect(10, 10,barWidth * percentBuffered, barHeight); 
  33. graphics.endFill( ); 
  34. // Correct the sound length calculation 
  35. length /= percentBuffered; 
  36. // CuPlayer.com提示:The percent of the sound that has played 
  37. var percentPlayed:Number = position / length; 
  38. // Draw a bar that represents the percent of 
  39. // the sound that has played 
  40. graphics.beginFill(0×666666); 
  41. graphics.drawRect(10, 10, barWidth * percentPlayed, barHeight); 
  42. graphics.endFill( ); 

译者注:上面的这个例子的使用方法:
1,新建立一个fla文件,命名,保存;
2,找首歌曲(mp3格式)复制到fla的那个目录里面,命名为song.mp3(mp3是后缀名);
3,新建一个.as文件,把上述代码复制到其中,保存在fla同一个目录,命名为ProgressBar2.as;
4,把fla文件的document class属性(选中舞台,打开属性面板就能看到)设置为ProgressBar2,设置背景颜色为兰色(只要不是白色黑色灰色就行);
5,按ctrl+enter测试。我们看到效果。
如果看不到加载进度,请换个网络上的歌曲试试看。

热门文章推荐

请稍候...

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

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