Player BAM5 told me about code his friend Shango wrote, for
extrapolating the total duration of an mp3 while it was loading. Sure enough: we have length (so far), bytesLoaded and bytesTotal. So: do that. It works pretty well! Too bad we can't do something similar for FLVs that don't have metadata. :( (there is no "current length" property, just a current position. So any time estimate would get worse and worse as the bytes advanced past the play position. git-svn-id: svn+ssh://src.earth.threerings.net/nenya/trunk@719 ed5b42cb-e716-0410-a449-f6a68f950b19
This commit is contained in:
@@ -77,7 +77,12 @@ public class Mp3AudioPlayer extends EventDispatcher
|
|||||||
if (_sound == null) {
|
if (_sound == null) {
|
||||||
return NaN;
|
return NaN;
|
||||||
}
|
}
|
||||||
return _sound.length / 1000;
|
const duration :Number = _sound.length / 1000;
|
||||||
|
if (_isComplete) {
|
||||||
|
return duration;
|
||||||
|
}
|
||||||
|
// extrapolate the total duration based on the current length and current bytesLoaded
|
||||||
|
return (duration / _sound.bytesLoaded) * _sound.bytesTotal;
|
||||||
}
|
}
|
||||||
|
|
||||||
// from AudioPlayer
|
// from AudioPlayer
|
||||||
@@ -233,8 +238,8 @@ public class Mp3AudioPlayer extends EventDispatcher
|
|||||||
*/
|
*/
|
||||||
protected function handleLoadingComplete (event :Event) :void
|
protected function handleLoadingComplete (event :Event) :void
|
||||||
{
|
{
|
||||||
handlePositionCheck(); // also updates duration
|
|
||||||
_isComplete = true;
|
_isComplete = true;
|
||||||
|
dispatchEvent(new ValueEvent(MediaPlayerCodes.DURATION, getDuration()));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function handlePlaybackComplete (event :Event) :void
|
protected function handlePlaybackComplete (event :Event) :void
|
||||||
|
|||||||
Reference in New Issue
Block a user