Как получить окончательную длину объекта Sound, который все еще загружается? - PullRequest
5 голосов
/ 21 марта 2009

Я создаю базовый MP3-плеер в ActionScript 3. У меня есть базовый индикатор выполнения, который показывает, сколько песни проиграно. Прогресс рассчитывается как десятичный процент, нормализованный между 0 и 1, следующим образом:

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

Проблема в том, что звук все еще загружается / буферизируется. Длина звука неверна. Это заставляет мой индикатор выполнения пропускать и даже перемещаться назад, пока звук полностью не загрузится и длина звука не изменится.

Как лучше всего определить окончательную длину звукового объекта, который все еще загружается?

Ответы [ 2 ]

6 голосов
/ 22 марта 2009

Есть как минимум два варианта:

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
}
2 голосов
/ 22 марта 2009

Вы также можете узнать длину звука по его тегу ID3 , если звук был правильно помечен .

...