5

我在 ActionScript 3 中创建了一个基本的 MP3 播放器。我有一个基本的进度条来指示歌曲的播放量。进度计算为在 0 和 1 之间标准化的小数百分比,如下所示:

var progress:Number = channel.position / sound.length;

问题是,如果音频仍在加载/缓冲 sound.length 不正确。这会导致我的进度条四处跳动,甚至向后移动,直到声音完全加载并且 sound.length 不再改变。

确定仍在加载的声音对象的最终长度的最佳方法是什么?

4

2 回答 2

6

至少有两种选择:

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
}
于 2009-03-21T22:29:38.867 回答
2

如果声音已被正确标记,您还可以通过其ID3标签找出声音的长度。

于 2009-03-22T09:02:51.887 回答