2009-03-21 10 views
5

मैं एक्शनस्क्रिप्ट 3 में एक मूल एमपी 3 प्लेयर बना रहा हूं। मेरे पास मूल प्रगति पट्टी है जो इंगित करती है कि गीत का कितना हिस्सा खेला गया है। अगर ऑडियो अभी भी लोड कर रहा है/sound.length बफरिंग गलत हैअभी भी लोड होने वाली ध्वनि ऑब्जेक्ट पर अंतिम लंबाई कैसे प्राप्त करें?

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

समस्या है,: प्रगति जैसे 0 और 1 के बीच सामान्यीकृत एक दशमलव प्रतिशत के रूप में गणना की जाती है। इससे मेरी प्रगति पट्टी चारों ओर घूमती है और यहां तक ​​कि पीछे की तरफ यात्रा भी होती है जब तक ध्वनि पूरी तरह से लोड नहीं हो जाती है और ध्वनि। लम्बाई अब और नहीं बदल रही है।

अभी भी लोड होने वाली ध्वनि वस्तु की अंतिम लंबाई निर्धारित करने का सबसे अच्छा तरीका क्या है?

1:

उत्तर

6

कम से कम दो विकल्प होते हैं 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 
} 
+0

दूसरा विचार बहुत अच्छा है! मैं जो कुछ बता सकता हूं उससे कुछ मिलीसेकंड के भीतर यह काफी सटीक होना चाहिए। – Soviut

2

तुम भी अपने ID3 टैग के माध्यम से ध्वनि की लंबाई पता लगा सकते हैं ध्वनि ठीक से tagged किया गया है।

संबंधित मुद्दे