我正在 ActionScript 3 中创建一个基本的 MP3 播放器。我有一个基本的进度条,指示歌曲已播放了多少。进度以 0 到 1 之间归一化的小数百分比计算,如下所示:
var progress:Number = channel.position / sound.length;
问题是,如果音频仍在加载/缓冲,则 sound.length 不正确。这会导致我的进度条跳跃,甚至向后移动,直到声音完全加载并且 sound.length 不再改变。
确定仍在加载的声音对象的最终长度的最佳方法是什么?
至少有两个选择:
1:将进度条保持在 0%,并且在声音完全加载之前不要移动它。那是:
sound.addEventListener(Event.COMPLETE, onSoundComplete);
private function onSoundComplete(event:Event):void {
// Calculate progress
}
2:基于已加载文件的百分比的近似百分比。像这样的东西:
private var _sound:Sound = /* Your logic here */;
private var _channel:SoundChannel = _sound.play();
_sound.addEventListener(ProgressEvent.PROGRESS, onSoundProgress);
private function onSoundProgress(event:ProgressEvent):void {
var percentLoaded:Number = event.bytesLoaded / event.bytesTotal;
var approxProgress:Number
= _channel.position / _sound.length * percentLoaded;
// Update your progress bar based on approxProgress
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)