2009-03-21 3 views
5

Je crée un lecteur MP3 de base dans ActionScript 3. J'ai une barre de progression de base qui indique le volume de la chanson. La progression est calculée en pourcentage décimal normalisé entre 0 et 1 en tant que tel:Comment obtenir la longueur finale d'un objet Sound en cours de chargement?

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

Le problème est, si l'audio est toujours chargement/tamponner le sound.length est incorrect. Cela amène ma barre de progression à sauter et même à revenir en arrière jusqu'à ce que le son soit complètement chargé et que le paramètre sound.length ne change plus. Quelle est la meilleure façon de déterminer la longueur finale d'un objet sonore qui est encore en train de se charger?

Répondre

6

Il y a au moins deux options:

1: Laissez votre barre de progression à 0%, et ne se déplacent pas jusqu'à ce que le son soit entièrement chargé. C'est-à-dire:

sound.addEventListener(Event.COMPLETE, onSoundComplete); 

private function onSoundComplete(event:Event):void { 
    // Calculate progress 
} 

2: Pourcentage approximatif basé sur le pourcentage du fichier déjà chargé. Quelque chose comme ceci:

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 
} 
+0

La deuxième idée est géniale! Il devrait être assez précis à quelques millisecondes de ce que je peux dire. – Soviut

2

Vous pouvez également découvrir la longueur du son via sa balise ID3 si le son a été correctement tagged.

Questions connexes